UNPKG

1.9 MBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack://AJS/webpack/universalModuleDefinition","webpack://AJS/webpack/bootstrap","webpack://AJS/../src/js/aui/jquery.js","webpack://AJS/../src/js/aui/internal/globalize.js","webpack://AJS/./styles/aui.page.reset.js","webpack://AJS/./styles/aui.page.typography.js","webpack://AJS/../src/js/aui/internal/skate.js","webpack://AJS/external {\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\",\"amd\":\"jquery\",\"root\":\"jQuery\",\"assign\":\"jQuery\",\"global\":\"jQuery\",\"var\":\"jQuery\"}","webpack://AJS/./styles/aui.page.links.js","webpack://AJS/../src/js/aui/i18n.js","webpack://AJS/../src/js/aui/internal/log.js","webpack://AJS/../src/js/aui/key-code.js","webpack://AJS/../src/js/aui/internal/deprecation.js","webpack://AJS/../src/js/aui/internal/amdify.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/version.js","webpack://AJS/./styles/aui.pattern.forms.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/backbone/backbone.js","webpack://AJS/./styles/aui.pattern.icon.js","webpack://AJS/./styles/aui.pattern.button.js","webpack://AJS/../src/js/aui/spinner.js","webpack://AJS/../src/js/aui/layer.js","webpack://AJS/../src/js/aui/polyfills/custom-event.js","webpack://AJS/./styles/aui.page.iconography.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/underscore/underscore.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs-template-html/dist/template-html.js","webpack://AJS/../src/js/aui/trigger.js","webpack://AJS/./styles/aui.pattern.basic.js","webpack://AJS/../src/js/aui/unique-id.js","webpack://AJS/../src/js/aui/escape-html.js","webpack://AJS/../src/js/aui/internal/animation.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/constants.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/utils.js","webpack://AJS/../src/js/aui/internal/state.js","webpack://AJS/../src/js/aui/internal/widget.js","webpack://AJS/./styles/aui.pattern.avatar.js","webpack://AJS/./styles/aui.pattern.messages.js","webpack://AJS/./aui.component.trigger.js","webpack://AJS/../src/js/aui/tooltip.js","webpack://AJS/./styles/aui.pattern.nav.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/widget.js","webpack://AJS/../src/js/aui/restful-table/class-names.js","webpack://AJS/../src/js/aui/restful-table/event-names.js","webpack://AJS/../src/js/aui/format.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/skate.js","webpack://AJS/./internal/iconfont.js","webpack://AJS/./styles/aui.pattern.page-layout.js","webpack://AJS/./styles/aui.pattern.page-header.js","webpack://AJS/(webpack)/buildin/global.js","webpack://AJS/./aui.component.layer.js","webpack://AJS/./aui.component.dropdown2.js","webpack://AJS/../src/js/aui/debounce.js","webpack://AJS/../src/js/aui/internal/browser.js","webpack://AJS/../src/js/aui/internal/alignment.js","webpack://AJS/../src/js/aui/internal/elements.js","webpack://AJS/../src/js/aui/internal/enforcer.js","webpack://AJS/../src/js/aui/internal/constants.js","webpack://AJS/./aui.component.inline-dialog2.js","webpack://AJS/./styles/aui.pattern.inline-dialog.js","webpack://AJS/./styles/aui.pattern.table.js","webpack://AJS/./aui.component.tooltip.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/widgets/mouse.js","webpack://AJS/../src/js/aui/restful-table/data-keys.js","webpack://AJS/../src/js/aui/restful-table/spinner.js","webpack://AJS/../src/js/aui/version.js","webpack://AJS/../src/js/aui/event.js","webpack://AJS/../src/js/aui/blanket.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/globals.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/version.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/lifecycle.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/mutation-observer.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/registry.js","webpack://AJS/./styles/aui.pattern.group.js","webpack://AJS/./styles/aui.pattern.toolbar2.js","webpack://AJS/./styles/aui.pattern.banner.js","webpack://AJS/../src/js/aui/button.js","webpack://AJS/../src/js/aui/dropdown2.js","webpack://AJS/./aui.component.message.js","webpack://AJS/../src/js/aui/spin.js","webpack://AJS/../src/js/aui/internal/attributes.js","webpack://AJS/./aui.component.spinner.js","webpack://AJS/../src/js/aui/inline-dialog2.js","webpack://AJS/./aui.component.nav.js","webpack://AJS/../src/js/aui/navigation.js","webpack://AJS/./styles/aui.pattern.tabs.js","webpack://AJS/./styles/aui.pattern.badge.js","webpack://AJS/./aui.component.form-notification.js","webpack://AJS/../src/js/aui/form-notification.js","webpack://AJS/../src/js/aui/form-validation/validator-register.js","webpack://AJS/../src/js/aui/internal/header/create-header.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/ie.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/data.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/scroll-parent.js","webpack://AJS/../src/js/aui/restful-table/event-handlers.js","webpack://AJS/./aui.batch.prototyping.js","webpack://AJS/./aui.side-effects.js","webpack://AJS/./aui.core.js","webpack://AJS/./behaviours/aui.behaviour.format.js","webpack://AJS/./behaviours/aui.behaviour.version.js","webpack://AJS/./behaviours/aui.behaviour.event-bus.js","webpack://AJS/./behaviours/aui.behaviour.escape-html.js","webpack://AJS/./behaviours/aui.behaviour.layer-manager.js","webpack://AJS/../src/js/aui/layer-manager.js","webpack://AJS/../src/js/aui/focus-manager.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/document-observer.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/data.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/skatejs/lib/fix-ie-innerhtml.js","webpack://AJS/../src/js/aui/setup.js","webpack://AJS/../src/js/aui/populate-parameters.js","webpack://AJS/../src/js/aui/params.js","webpack://AJS/../src/js/aui/to-init.js","webpack://AJS/./behaviours/aui.behaviour.logger.js","webpack://AJS/./aui.batch.components.js","webpack://AJS/./aui.component.banner.js","webpack://AJS/../src/js/aui/banner.js","webpack://AJS/./aui.component.button.js","webpack://AJS/(webpack)/buildin/module.js","webpack://AJS/./aui.component.dialog2.js","webpack://AJS/../src/js/aui/dialog2.js","webpack://AJS/../src/js/aui/internal/i18n/aui.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/popper.js/dist/esm/popper.js","webpack://AJS/./aui.component.expander.js","webpack://AJS/../src/js/aui/expander.js","webpack://AJS/./aui.component.flag.js","webpack://AJS/../src/js/aui/flag.js","webpack://AJS/../src/js/aui/messages.js","webpack://AJS/./aui.component.form.checkbox-multi-select.js","webpack://AJS/../src/js/aui/checkbox-multiselect.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/@atlassian/tipsy/src/javascripts/jquery.tipsy.js","webpack://AJS/./aui.component.form.file-select.js","webpack://AJS/../src/js/aui/fancy-file-input.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/fancy-file-input/dist/fancy-file-input.js","webpack://AJS/./aui.component.form.label.js","webpack://AJS/../src/js/aui/label.js","webpack://AJS/./aui.component.form.select2.js","webpack://AJS/../src/js/aui/select2.js","webpack://AJS/../src/js-vendor/jquery/plugins/jquery.select2.js","webpack://AJS/./aui.component.form.single-select.js","webpack://AJS/../src/js/aui/select.js","webpack://AJS/../src/js/aui/internal/select/option.js","webpack://AJS/../src/js/aui/progressive-data-set.js","webpack://AJS/../src/js/aui/internal/select/suggestion-model.js","webpack://AJS/../src/js/aui/internal/select/suggestions-model.js","webpack://AJS/../src/js/aui/internal/select/suggestions-view.js","webpack://AJS/../src/js/aui/internal/select/template.js","webpack://AJS/./aui.component.form.toggle.js","webpack://AJS/../src/js/aui/toggle.js","webpack://AJS/./aui.component.progressbar.js","webpack://AJS/../src/js/aui/progress-indicator.js","webpack://AJS/./aui.component.sortable-table.js","webpack://AJS/../src/js/aui/tables-sortable.js","webpack://AJS/../src/js-vendor/jquery/jquery.tablesorter.js","webpack://AJS/./aui.component.tabs.js","webpack://AJS/../src/js/aui/tabs.js","webpack://AJS/../src/js/aui/internal/add-id.js","webpack://AJS/../src/js/aui/is-clipped.js","webpack://AJS/./behaviours/aui.behaviour.i18n.js","webpack://AJS/./aui.batch.page.js","webpack://AJS/./aui.batch.patterns.js","webpack://AJS/./styles/aui.pattern.help.js","webpack://AJS/./styles/aui.pattern.label.js","webpack://AJS/./styles/aui.pattern.lozenge.js","webpack://AJS/./styles/aui.pattern.multi-step-progress.js","webpack://AJS/./aui.batch.iconography.js","webpack://AJS/./aui.component.form-validation.js","webpack://AJS/../src/js/aui/form-validation.js","webpack://AJS/../src/js/aui/form-validation/basic-validators.js","webpack://AJS/./aui.component.async-header.js","webpack://AJS/../src/js/aui/header-async.js","webpack://AJS/./aui.component.static-header.js","webpack://AJS/../src/js/aui/header.js","webpack://AJS/./aui.component.form.date-select.js","webpack://AJS/../src/js/aui/date-picker.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/widgets/datepicker.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/keycode.js","webpack://AJS/./aui.component.restful-table.js","webpack://AJS/../src/js/aui/restful-table.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/core.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/widgets/draggable.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/plugin.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/safe-active-element.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/safe-blur.js","webpack://AJS//buildeng/bamboo-agent-home/xml-data/build-dir/AUI-RELNEXT24-JOB1/aui/node_modules/jquery-ui/ui/widgets/sortable.js","webpack://AJS/../src/js/aui/restful-table/custom-create-view.js","webpack://AJS/../src/js/aui/restful-table/custom-edit-view.js","webpack://AJS/../src/js/aui/restful-table/custom-read-view.js","webpack://AJS/../src/js/aui/restful-table/edit-row.js","webpack://AJS/../src/js-vendor/jquery/serializetoobject.js","webpack://AJS/../src/js/aui/restful-table/entry-model.js","webpack://AJS/../src/js/aui/restful-table/row.js","webpack://AJS/./aui.component.sidebar.js","webpack://AJS/../src/js/aui/sidebar.js","webpack://AJS/../src/js/aui/clone.js","webpack://AJS/../src/js/aui/internal/has-touch.js","webpack://AJS/../src/js/aui/internal/is-input.js","webpack://AJS/../src/js/aui/internal/mediaQuery.js","webpack://AJS/../src/js/aui/internal/deduplicateIDs.js","webpack://AJS/./behaviours/aui.behaviour.keyboard-shortcuts.js","webpack://AJS/../src/js/aui/when-i-type.js","webpack://AJS/../src/js/jquery/jquery.hotkeys.js","webpack://AJS/../src/js/jquery/jquery.moveto.js","webpack://AJS/../src/js/aui/dialog.js","webpack://AJS/../src/js/aui/forms.js","webpack://AJS/../src/js/aui/forms/custom-checkbox.js","webpack://AJS/../src/js/aui/forms/custom-radio.js"],"names":["root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__5__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","jQuery","Zepto","$","_typeof","NAMESPACE","auiSkate","skate","noConflict","i18n","keys","getText","this","_len","arguments","length","params","Array","_key","format","apply","concat","_globalize2","default","polyfillConsole","prop","console","Function","log","warn","error","keyCode","ALT","BACKSPACE","CAPS_LOCK","COMMA","COMMAND","COMMAND_LEFT","COMMAND_RIGHT","LEFT_SQUARE_BRACKET","CONTROL","DELETE","DOWN","END","ENTER","ESCAPE","HOME","INSERT","LEFT","MENU","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SHIFT","SPACE","TAB","UP","WINDOWS","has","deprecationCalls","logger","getShowDeprecationMessage","displayName","options","called","printFrameOffset","deprecatedLocation","err","Error","stack","stacktrace","stackMessage","replace","split","getDeprecatedLocation","indexOf","push","message","deprecationType","str","charAt","toUpperCase","substring","toSentenceCase","sinceVersion","removeInVersion","alternativeName","extraInfo","extraObject","logCssDeprecation","selectorMap","newNode","extend","selector","deprecateFunctionExpression","fn","showDeprecationMessage","deprecateConstructor","constructorFn","deprecatedConstructor","supportsProperties","set","propertyDeprecationSupported","e","deprecateObjectProperty","obj","displayNameOrShowMessageFn","oldVal","val","deprecateValueProperty","deprecateAllProperties","objDisplayPrefix","attr","alternativeNamePrefix","handleAddingSelector","matches","document","querySelectorAll","deprecatedSelectorMap","observer","MutationObserver","mutations","forEach","mutation","addedNodes","nodeType","testAndHandleDeprecation","observe","childList","subtree","observeFutureChange","deprecateCSS","selectors","el","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","matchesSelector","construct","css","getMessageLogger","alias","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","undefined","ui","version","global","self","_","Backbone","previousBackbone","slice","VERSION","emulateHTTP","emulateJSON","addUnderscoreMethods","Class","methods","attribute","each","method","iteratee","context","cb","defaultVal","args","unshift","addMethod","instance","isFunction","isObject","_isModel","modelMatcher","isString","model","attrs","matcher","attributes","Events","eventSplitter","eventsApi","events","callback","opts","names","test","on","internalOn","listening","_events","onApi","ctx","listeners","_listeners","id","listenTo","_listenId","uniqueId","listeningTo","_listeningTo","thisId","objId","count","handlers","off","offApi","stopListening","ids","remaining","j","handler","_callback","once","onceMap","listenToOnce","map","offer","trigger","Math","max","triggerApi","objEvents","allEvents","all","triggerEvents","ev","a1","a2","a3","unbind","Model","cid","cidPrefix","collection","parse","defaults","result","changed","initialize","validationError","idAttribute","toJSON","clone","sync","escape","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","_pending","clear","hasChanged","isEmpty","changedAttributes","diff","old","size","previous","previousAttributes","fetch","success","resp","serverAttrs","wrapError","save","wait","validate","isNew","patch","xhr","destroy","defer","url","base","urlError","encodeURIComponent","constructor","isValid","values","pairs","invert","pick","omit","chain","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","array","insert","at","min","tail","singular","isArray","removed","_removeModels","added","merged","toAdd","toMerge","toRemove","modelMap","sort","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","some","index","_removeReference","previousModels","pop","shift","_byId","modelId","where","first","findWhere","sortBy","pluck","callbackOpts","_onModelEvent","event","prevId","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","any","include","includes","contains","invoke","toArray","head","take","initial","rest","drop","last","without","difference","shuffle","lastIndexOf","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","$el","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","match","delegate","eventName","listener","undelegate","_createElement","createElement","className","_setAttributes","type","methodMap","dataType","data","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","RegExp","exec","param","decodeURIComponent","History","checkUrl","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","path","pathname","getSearch","matchRoot","decodeFragment","rootPath","decodeURI","href","getHash","getPath","getFragment","_usePushState","_wantsHashChange","start","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","iframe","src","style","display","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","hash","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","stop","removeEventListener","detachEvent","removeChild","clearInterval","title","assign","_updateHash","protoProps","staticProps","child","parent","__super__","_deprecation","_underscore","SIZE","SMALL","px","radius","MEDIUM","LARGE","DEFAULTS","filled","filledAttributeReplacementText","filledAttributeDeprecatedLogger","filledPropDeprecatedLogger","validateSize","toLowerCase","refresh","_ref","_data","svg","querySelector","circle","setAttribute","circleSize","setSize","height","parentNode","selfDomRect","getBoundingClientRect","parentDomRect","parentMiddleTop","top","spinnerMiddleTop","setMiddleTop","removeMiddleTop","SpinnerEl","_skate2","template","innerHTML","attached","created","newValue","__data","isFilled","removeAttribute","newSize","_blanket","_trigger","EVENT_PREFIX","GLOBAL_EVENT_PREFIX","LAYER_EVENT_PREFIX","AUI_EVENT_PREFIX","$doc","_jquery2","onTransitionEnd","func","transition","getComputedStyle","transitionProperty","isTransitioning","propertyName","triggerEvent","deprecatedName","newNativeName","e1","Event","e2","nativeEvent","CustomEvent","bubbles","cancelable","nativeEvent2","dispatchEvent","isDefaultPrevented","defaultPrevented","Layer","addClass","below","LayerManager","item","above","changeSize","width","show","isVisible","ariaShow","hide","ariaHide","thisLayer","oneTransitionEnd","popUntil","isBlanketed","isPersistent","modal","hasAttribute","_hideLayer","triggerBeforeEvents","FocusManager","exit","_showLayer","zIndex","is","appendTo","enter","createLayer","_widget2","topIndexWhere","layerArr","layerIndex","$layer","topBlanketedIndex","updateBlanket","oldBlanketIndex","newTopBlanketedIndex","dim","undim","popLayers","stopIndex","forceClosePersistent","a","layer","_stack","hasLayer","$trigger","getElementById","popLayersBeside","_nextZIndex","$topEl","parseInt","isNaN","nextZIndex","hasTrigger","parentLayer","getTrigger","closest","getParentLayer","parentIndex","blanketedIndex","hideAll","reverse","getNextLowerNonPersistentOrBlanketedLayer","$nextEl","getNextHigherNonPeristentAndNonBlanketedLayer","oldTopBlanketedIndex","getTopLayer","popTopIfNonPersistent","$topLayer","popUntilTopBlanketed","$topBlanketedLayer","$next","popUntilTopPersistent","$toPop","toPop","preventDefault","$target","target","customEvent","Manager","ce","detail","x","evt","createEvent","initCustomEvent","origPrevent","previousUnderscore","ArrayProto","ObjProto","SymbolProto","toString","nativeIsArray","nativeKeys","nativeCreate","Ctor","_wrapped","builtinIteratee","optimizeCb","argCount","accumulator","identity","Infinity","restArguments","startIndex","baseCreate","shallowProperty","deepGet","MAX_ARRAY_INDEX","pow","getLength","isArrayLike","results","currentKey","createReduce","dir","memo","reducer","predicate","findKey","list","negate","fromIndex","guard","contextPath","computed","lastComputed","v","random","rand","temp","criteria","left","right","b","group","behavior","reStrSymbol","pass","compact","Boolean","flatten","input","shallow","strict","output","idx","isArguments","len","otherArrays","uniq","unique","isSorted","isBoolean","seen","union","arrays","intersection","argsLength","unzip","zip","createPredicateIndexFinder","sortedIndex","low","high","mid","floor","createIndexFinder","predicateFind","range","step","ceil","chunk","executeBound","sourceFunc","boundFunc","callingContext","TypeError","bound","callArgs","partial","boundArgs","placeholder","position","bindAll","memoize","hasher","cache","address","delay","setTimeout","throttle","timeout","later","leading","now","throttled","clearTimeout","trailing","cancel","debounce","immediate","debounced","callNow","wrap","wrapper","compose","after","times","before","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","proto","allKeys","mapObject","functions","createAssigner","keysFunc","source","extendOwn","eq","deepEq","keyInObj","String","props","tap","interceptor","isMatch","aStack","bStack","valueOf","areArrays","aCtor","bCtor","isElement","nodelist","childNodes","Int8Array","isFinite","isSymbol","parseFloat","isNumber","isNull","isUndefined","constant","noop","propertyOf","accum","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","join","testRegexp","replaceRegexp","string","unescape","fallback","idCounter","prefix","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","text","settings","oldSettings","offset","variable","argument","_chain","chainResult","mixin","DocumentFragment","elProto","HTMLElement","getData","__SKATE_TEMPLATE_HTML_DATA","setData","createFragmentFromString","domString","tag","div","caption","dd","dt","li","tbody","td","thead","tr","createFragmentFromNodeList","nodeList","frag","createDocumentFragment","appendChild","getNodesBetween","startNode","endNode","nodes","nextNode","nextSibling","findChildrenMatchingSelector","sourceNode","found","foundLength","filtered","node","addDefaultContent","content","defaultNodes","nodesLen","container","isDefault","removeDefaultContent","createProxyProperty","parseCommentNode","textContent","defaultContent","skateTemplateHtml","contentNodes","getElementsByTagName","contentData","contentNode","getAttribute","createComment","replaceChild","cacheContentData","parseNodeForContent","lastContentNode","childNodesLen","contentDatas","childNode","contentInfo","wrapped","wrapNodeWith","contentNodesLen","html","outerHTML","targetFragment","foundNodes","lastChild","attrsLength","nodeName","nodeValue","childNodesLength","acceptsTextContent","createTextNode","fragChildNodes","contentSelector","insertAdjacentHTML","referenceNode","fragChildNodesLength","hasFoundReferenceNode","mainLoop","betweenNodes","betweenNodesLen","betweenNode","newChild","oldChild","htmlTemplateParentWrapper","setTrigger","validTrigger","_state2","doIfTrigger","forEachTrigger","findControllers","findControlled","isEnabled","triggerMessage","component","click","$closestAnchor","isNestedAnchor","keydown","mouseenter","mouseleave","focus","blur","relatedTarget","activeElement","focusingToControlledElement","currentTarget","which","msg","ATTRIBUTE","disable","enable","_amdify2","uniqueID","uniqueIDstring","uniqueIDcounter","generateUniqueId","special","expr","escapeHtml","recomputeStyle","jquery","getPropertyValue","ATTR_IGNORE","TYPE_ATTRIBUTE","TYPE_CLASSNAME","TYPE_ELEMENT","_constants","hasOwn","camelCase","elementContains","elementPrototypeContains","getClosestIgnoredElement","Element","inherit","overwrite","getOwnPropertyNames","namesLen","desc","getOwnPropertyDescriptor","shouldDefineProps","writable","configurable","objEach","supportsNativeCustomElements","registerElement","isValidNativeCustomElementName","elementPrototype","stateName","stateValue","_state","dataAttr","selectorOrOptions","maybeOptions","isPlainObject","widget","AUI_TOOLTIP_CLASS_NAME","tooltip","allOptions","init","$this","$self","stringOption","tipsy","handleStringOption","triggerIsHover","hideOnClick","onClick","live","bindTooltip","opacity","delayIn","hoverable","aria","findAllTooltips","getElementsByClassName","maybeTooltip","getTipsyObject","$tip","widgetUuid","widgetSlice","cleanData","orig","elems","elem","triggerHandler","existingConstructor","basePrototype","proxiedPrototype","namespace","fullName","Widget","_createWidget","_proto","_childConstructors","_super","_superApply","returnValue","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","childPrototype","bridge","inputIndex","inputLength","isMethodCall","methodValue","pushStack","option","_init","defaultElement","classes","disabled","uuid","eventNamespace","bindings","focusable","classesElementLookup","_on","ownerDocument","defaultView","parentWindow","_getCreateOptions","_create","_setOptionDisabled","_getCreateEventData","that","_destroy","_removeClass","removeData","removeAttr","parts","curOption","_setOptions","_setOption","_setOptionClasses","classKey","elements","currentElements","_classes","_toggleClass","full","processClassString","checkOption","not","extra","_untrackClassesElement","inArray","_addClass","toggleClass","suppressDisabledCheck","delegateElement","handlerProxy","hasClass","guid","_off","_delay","_hoverable","_focusable","focusin","focusout","originalEvent","defaultEffect","hasOptions","effect","effectName","duration","isEmptyObject","complete","effects","easing","queue","next","NO_VALUE","NO_ENTRIES","RESTFUL_TABLE","ROW","READ_ONLY","ACTIVE","ALLOW_HOVER","FOCUSED","MOVEABLE","DISABLED","SUBMIT","CANCEL","EDIT_ROW","CREATE","DRAG_HANDLE","ORDER","EDITABLE","ERROR","STATUS","REORDER_SUCCESS","ROW_ADDED","ROW_REMOVED","SERVER_ERROR","CREATED","UPDATED","FOCUS","BLUR","SAVE","MODAL","MODELESS","CONTENT_REFRESHED","RENDER","FINISHED_EDITING","VALIDATION_ERROR","SUBMIT_STARTED","SUBMIT_FINISHED","INITIALIZED","ROW_INITIALIZED","ROW_EDIT","formatString","apos","simpleFormat","numberFormat","choiceFormat","choicePart","getParamValue","res","prevOptionValue","argValue","formatArgs","_performTokenRegex","tick","openIndex","openCount","_documentObserver","_lifecycle","_registry","_utils","_version","_interopRequire","documentObserver","triggerCreated","triggerAttached","triggerDetached","triggerAttributeChanged","initElements","registry","isOldIE","initDocument","initialiseSkateElementsOnDomLoad","documentElement","readyState","definition","isNativeCustomElement","isPrototypeOf","createdCallback","attachedCallback","detachedCallback","attributeChangedCallback","oldValue","register","detached","isType","CustomElement","tagToExtend","definitionId","makeElementConstructor","nodesToUse","CLASSNAME","ELEMENT","extends","resolvedAttribute","unresolvedAttribute","previousSkate","g","eval","_dropdown","deprecate","deprecatedDebounce","deprecatedDebounceImmediate","debounceImmediate","needsLayeringShim","isIE","isWinXP","isWinVista","isWin7","supportsVoiceOver","isMacOSX","supportsDateField","doesSupportHtml5DateInput","supportsFocusWithin","doesSupportFocusWithin","ua","navigator","userAgent","ATTR_ALIGNMENT","DEFAULT_ATTACHMENT","ATTR_CONTAINER","CLASS_PREFIX_SIDE","CLASS_PREFIX_SNAP","GPU_ACCELERATION_FLAG","ALIGNMENT_MAP","top left","top center","top right","right top","right middle","right bottom","bottom right","bottom center","bottom left","left bottom","left middle","left top","getAlignmentAttribute","calculateBestAlignmentSnap","getContainer","snap","Node","ELEMENT_NODE","containerBounds","getFlipBehavior","auto","bottom","Alignment","alignment","_getAlignmentAttribut","_getAlignmentAttribut2","_slicedToArray","side","getAlignment","placement","getPlacement","flipBehavior","modifiers","flip","enabled","boundariesElement","flipContainer","preventOverflow","padding","escapeWithReference","overflowContainer","computeStyle","gpuAcceleration","classList","popperConfig","eventsEnabled","positionFixed","callbackName","popper","Popper","sideClass","snapClass","addAlignmentClasses","changeTarget","newTarget","referenceEl","shouldRebind","state","reference","scheduleUpdate","enableEventListeners","disableEventListeners","ifGone","deferred","Deferred","parentElement","resolve","DELAY","promise","attributeExists","attributeName","satisfiesRules","refersTo","desiredId","ariaControls","ariaOwns","INPUT_SUFFIX","mouseHandled","distance","_mouseInit","_mouseDown","stopImmediatePropagation","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseMoved","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","elIsCancel","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","ie","button","altKey","ctrlKey","metaKey","shiftKey","ignoreMissingWhich","_mouseDrag","_mouseStop","abs","pageX","pageY","ENABLED_SUBMIT","ROW_VIEW","appendStatusSpinner","SPINNER_SELECTOR","classNames","append","spinner","removeStatusSpinner","AUI_VERSION","EMPTY_SELECTOR","eventType","eventData","extraParameters","overflowEl","_animation","_hiddenByAui","useShim","children","hasAriaHidden","isAuiLayer","useShimDeprecationLogger","isBlanketShowing","$dim","cachedOverflow","overflow","overflowX","overflowY","_mutationObserver","nativeMatchesSelector","hasNativeMatchesSelectorDetattachedBug","cloneNode","needsAttributeOldValueCaching","defineAttributeProperty","mutationData","cachedAttributeOldValues","newValueIsString","oldValueIsString","specific","addEventListeners","parseEvent","useCapture","makeHandler","targetData","attributeOldValue","addAttributeListeners","componentAttributes","addAttributeToPropertyLinks","initAttributes","attrsCopy","attrsLen","triggerAttributesCreated","triggerLifecycle","currentNodeDefinitions","getForElement","currentNodeDefinitionsLength","elementChildNodes","elementChildNodesLen","removeElements","definitions","definitionsLen","WeakMap","counter","entry","JsMutationObserver","setImmediate","registrationsTable","setImmediateQueue","sentinel","postMessage","currentRecord","recordWithOldValue","isScheduled","scheduledObservers","uidCounter","ShadowDOMPolyfill","wrapIfNeeded","characterData","attributeFilter","characterDataOldValue","SyntaxError","registration","registrations","removeListeners","Registration","nodes_","addListeners","disconnect","records_","takeRecords","copyOfRecords","enqueue","record","records","lastRecord","recordToReplaceLast","selectRecord","dispatchCallbacks","scheduleCallback","addListeners_","removeListeners_","addTransientObserver","transientObservedNodes","removeTransientObservers","handleEvent","attrName","relatedNode","namespaceURI","getRecord","attributeNamespace","attrChange","MutationEvent","ADDITION","prevValue","forEachAncestorAndObserverEnqueueRecord","getRecordWithOldValue","removedNodes","changedNode","previousSibling","_isPolyfilled","observers","o1","o2","uid_","anyNonEmpty","removeTransientObserversFor","callback_","MutationRecord","original","copyMutationRecord","newRecord","recordRepresentsCurrentMutation","_globals","globals","isAttr","isAttrValue","localName","isAttrOrTag","getClassList","classListLen","def","_spinner","isBusy","isInputNode","busy","idle","_debounce","_browser","_elements","isChecked","setDropdownTriggerActiveState","isActive","removeClass","UNLOADED","LOADING","SUCCESS","setDropdownErrorState","dropdown","loadContentsIfAsync","setDropdownLoadingState","done","json","status","sectionData","sectionItemsHtml","items","itemData","makeBooleanAttribute","makeAttribute","itemHtml","sectionHtml","label","makeAsyncDropdownContents","setDropdownContents","fail","always","setDropdownLoaded","getDropdownItems","getVisibleDropdownItems","amendDropdownContent","getAllDropdownItems","$item","amendDropdownItem","destroyAlignment","_auiAlignment","setLayerAlignment","hasSubmenu","hasSubmenuAlignment","$dropdown","previousAlignment","restorePreviousAlignment","hasAnyAlignment","saveCurrentAlignment","lazyDeprecate","$triggerGroup","$groupActiveTrigger","$groupFocusedTrigger","keyboardClose","keyboardCloseDetected","bindDropdownBehaviourToLayer","_layer2","_syncClasses","$hiddens","$disableds","$interactives","migrateAndSyncLegacyClassNames","_returnTo","possibleHome","getDropdownHideLocation","wasProbablyClosedViaKeyboard","isSubmenu","bindItemInteractionBehaviourToDropdown","focusNext","focusPrevious","eventKeyCode","isEnter","isSpace","theMenu","hideIfNotSubmenuAndNotInteractive","maybeALayer","dropdownCreated","isInteractive","uncheck","check","$radio","dropdownPrototype","toggle","$items","selected","focusItem","disabledAttributeHandler","interactiveAttributeHandler","checkedAttributeHandler","hiddenAttributeHandler","stringAttributeHandlerGenerator","change","ItemLinkEl","_skatejsTemplateHtml2","interactive","hidden","item-id","for","anchor","updated","ItemCheckboxEl","checked","ItemRadioEl","SectionEl","headingElement","groupElement","DropdownEl","then","aui-layer-show","isDropdownUnloaded","hasCurrentErrorBeenShown","dropdownID","handleIt","parents","normalInvoke","submenuInvoke","rootMenuInvoke","loadContentWhenMouseEnterTrigger","checkbox","radio","_messages","MessageEl","spin","firstArgs","maybeArgs","spinStop","$spinnerDom","color","computeBooleanValue","attrValue","setBooleanAttribute","computeEnumValue","enumOptions","matchesEnumValue","enumValue","isMissing","isInvalid","missingDefault","invalidDefault","setEnumAttribute","_layer","changeTrigger","newTrigger","oldTrigger","enableAlignment","messageHandler","_clearMouseleaveTimeout","onMouseEnter","onMouseLeave","rebindMouseEvents","respondsTo","namespaceEvent","elId","cleanupOnHide","cleanupNestedLayerHandler","disableAlignment","showInlineDialog","noNestedTriggers","handleNestedLayers","reflectOpenness","isInitalizing","shouldBeOpen","hideInlineDialog","RESPONDS_TO_ATTRIBUTE_ENUM","InlineDialogEl","persistent","oldComputedValue","messageList","hover","handleMessage","aria-hidden","responds-to","_enforcer2","NavigationEl","Navigation","elm","$treeParent","$subtreeToggleIcon","hideMoreItems","$selected","navigationWidget","expand","siblings","isNested","isCollapsed","collapse","moreText","limit","$listElements","lessThanTwoToHide","selectedElementPresent","alreadyInitialised","class","insertAfter","CLASS_NOTIFICATION_INITIALISED","ATTRIBUTE_NOTIFICATION_WAIT","ATTRIBUTE_NOTIFICATION_PREFIX","ATTRIBUTE_NOTIFICATION_INFO","ATTRIBUTE_NOTIFICATION_ERROR","NOTIFICATION_PRIORITY","initialiseNotification","$field","isFieldInitialised","appendDescription","prepareFieldMarkup","synchroniseNotificationDisplay","getNotificationMessage","getFieldNotificationType","messages","descriptionTemplate","notificationType","jsonOrString","jsonArray","exception","jsonToArray","fieldNotificationType","prioritisedNotification","field","setFieldSpinner","appendErrorMessages","errorMessageTemplate","previousErrors","getMessageContainer","isSpinnerVisible","isSpinnerForFieldAlreadyExisting","deprecationLogger","ATTRIBUTE_RESERVED_ARGUMENTS","validators","validatorRegister","validatorFunction","triggerSelector","reservedArgument","validatorArguments","arg","isReserved","getReservedArgument","validator","validatorTrigger","$window","Header","$element","$secondaryNav","menuItems","totalWidth","$moreMenu","rightMostNavItemIndex","$applicationLogo","moreMenuWidth","primaryButtonsWidth","$headerFind","$header","outerWidth","_resizeHandler","_debounce2","constructResponsiveDropdown","$logoImg","calculateAvailableWidth","showResponsiveDropdown","createResponsiveDropdownTrigger","hideResponsiveDropdown","remainingWidth","availableWidth","showAll","newRightMostNavItemIndex","moveToResponsiveDropdown","moveOutOfResponsiveDropdown","moreNavItemEl","dropdownEl","dropdownSectionEl","triggerEl","createTriggerAndAssociate","numItems","$moreDropdown","leftMostIndexToMove","rightMostIndexToMove","$navItem","$navItemTrigger","$navItemDropdown","moreDropdownSectionEl","moreDropdownItemEl","detach","originalItem","newItem","header","_header","createPseudo","dataName","scrollParent","includeHidden","excludeStaticParent","overflowRegex","eventRoot","$eventTarget","triggerEvt","bindEvt","triggerEvtForInst","inst","_aui","_auiBatch","_auiBehaviour2","_auiComponent","_auiComponentForm","_auiComponent2","_auiComponent3","_auiBehaviour3","I18n","DatePicker","RestfulTable","sidebar","whenIType","AJS","InlineDialog2","ProgressiveDataSet","formValidation","isClipped","populateParameters","responsiveheader","tablessortable","tabs","_addID","_auiBehaviour","_auiBehaviour4","_event","_escapeHtml","_layerManager","visible","isTabIndexNotNaN","mapName","imageMap","isFormElement","isAnchor","isAnchorTabbable","pseudos","aui-focusable","aui-tabbable","isTabIndexNaN","RESTORE_FOCUS_DATA_KEY","elementTrapsFocus","_focusTrapStack","_handler","defaultFocusSelector","lastFocussedEl","setLastFocus","focusSelector","focusTrapStack","keyCodes","focusOrigin","$focusTrapElement","$tabbableElements","originIdx","newFocusIdx","$controlledElementWithFocus","$controllingElements","$controlledElements","$subTabbable","subOriginIdx","subMove","$restoreFocus","getLastFocus","getFocusManager","_fixIeInnerhtml","documentObserverHandler","mutationsLen","fixIe","unregister","createDocumentObserver","__SKATE_DATA","isIeUntil10","isIe11","isIe","propertyDescriptor","hasBeenEnhanced","_hasBeenEnhanced","originalInnerHTML","walkTree","mutationEvent","initMutationEvent","fixInnerHTML","$body","_populateParameters2","ajaxSettings","traditional","parameters","toInit","when","ready","ex","_log","_auiComponent4","_auiComponent5","_auiComponent6","_auiComponentForm2","_auiComponentForm3","_auiComponentForm4","_auiComponentForm5","_auiComponentForm6","_auiComponent7","_auiComponent8","_auiComponent9","_auiComponent10","_auiComponent11","_auiComponent12","_auiComponent13","_auiComponent14","_auiComponent15","ID_BANNER_CONTAINER","banner","$banner","_ref$type","parseHTML","renderBannerElement","findContainer","isBannerAriaHidden","$bannerContainer","prependTo","insertBanner","webpackPolyfill","paths","aui-focus","aui-blanketed","Dialog2","dataKey","applyDefaults","dialog2Widget","layerWidget","aui.dropdown.async.error","aui.dropdown.async.loading","aui.words.add","aui.words.update","aui.words.delete","aui.words.remove","aui.words.cancel","aui.words.loading","aui.words.close","aui.enter.value","aui.words.more","aui.words.moreitem","aui.keyboard.shortcut.type.x","aui.keyboard.shortcut.then.x","aui.keyboard.shortcut.or.x","aui.sidebar.expand.tooltip","aui.sidebar.collapse.tooltip","aui.validation.message.maxlength","aui.validation.message.minlength","aui.validation.message.exactlength","aui.validation.message.matchingfield","aui.validation.message.matchingfield-novalue","aui.validation.message.doesnotcontain","aui.validation.message.pattern","aui.validation.message.required","aui.validation.message.validnumber","aui.validation.message.min","aui.validation.message.max","aui.validation.message.dateformat","aui.validation.message.minchecked","aui.validation.message.maxchecked","aui.checkboxmultiselect.clear.selected","aui.select.no.suggestions","aui.select.new.suggestions","aui.select.new.value","aui.toggle.on","aui.toggle.off","ajs.datepicker.localisations.day-names.sunday","ajs.datepicker.localisations.day-names.monday","ajs.datepicker.localisations.day-names.tuesday","ajs.datepicker.localisations.day-names.wednesday","ajs.datepicker.localisations.day-names.thursday","ajs.datepicker.localisations.day-names.friday","ajs.datepicker.localisations.day-names.saturday","ajs.datepicker.localisations.day-names-min.sunday","ajs.datepicker.localisations.day-names-min.monday","ajs.datepicker.localisations.day-names-min.tuesday","ajs.datepicker.localisations.day-names-min.wednesday","ajs.datepicker.localisations.day-names-min.thursday","ajs.datepicker.localisations.day-names-min.friday","ajs.datepicker.localisations.day-names-min.saturday","ajs.datepicker.localisations.first-day","ajs.datepicker.localisations.is-RTL","ajs.datepicker.localisations.month-names.january","ajs.datepicker.localisations.month-names.february","ajs.datepicker.localisations.month-names.march","ajs.datepicker.localisations.month-names.april","ajs.datepicker.localisations.month-names.may","ajs.datepicker.localisations.month-names.june","ajs.datepicker.localisations.month-names.july","ajs.datepicker.localisations.month-names.august","ajs.datepicker.localisations.month-names.september","ajs.datepicker.localisations.month-names.october","ajs.datepicker.localisations.month-names.november","ajs.datepicker.localisations.month-names.december","ajs.datepicker.localisations.show-month-after-year","ajs.datepicker.localisations.year-suffix","__webpack_exports__","isBrowser","longerTimeoutBrowsers","timeoutDuration","Promise","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","host","getScrollParent","_getStyleComputedProp","isIE11","MSInputMethodContext","isIE10","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","end","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","isOffsetContainer","element1root","getScroll","upperSide","scrollingElement","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","Constructor","createClass","defineProperties","descriptor","_extends","getClientRect","offsets","rect","scrollTop","scrollLeft","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","borderTopWidth","borderLeftWidth","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","getBoundaries","boundaries","excludeScroll","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","area","getArea","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","getOuterSizes","marginBottom","y","marginRight","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","arr","runModifiers","ends","cur","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","cancelAnimationFrame","removeEventListeners","isNumeric","setStyles","unit","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","basePlacement","useHeight","fragments","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","toValue","index2","Defaults","removeOnDestroy","onCreate","onUpdate","shiftvariation","_data$offsets","isVertical","shiftOffsets","transformProp","popperStyles","transform","priority","primary","secondary","keepTogether","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","flipped","originalPlacement","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","getOppositeVariation","inner","subtractLength","legacyGpuAccelerationOption","offsetParentRect","prefixedProperty","willChange","invertTop","invertLeft","x-placement","arrowStyles","applyStyle","setAttributes","onLoad","modifierOptions","_this","requestAnimationFrame","isDestroyed","isCreated","Utils","PopperUtils","$document","getExpanderProperties","properties","$content","triggerIsParent","$shortContent","isCollapsible","replaceText","replaceSelector","$replaceElement","EXPANDER_EVENTS","aui-expander-invoke","aui-expander-expand","outerHeight","aui-expander-collapse","click.aui-expander","AUTO_CLOSE_TIME","ID_FLAG_CONTAINER","defaultOptions","flag","$flag","_escapeHtml2","$message","renderFlagElement","closeFlag","extendFlagElement","makeCloseable","makeAutoClosable","isFlagAriaHidden","$flagContainer","prepend","insertFlag","$icon","$flagToClose","DEFAULT_FADEOUT_DURATION","DEFAULT_FADEOUT_DELAY","FADEOUT_RESTORE_DURATION","createMessageConstructor","closeable","fadeout","renderMessageElement","insertWhere","insertMessageIntoContext","makeFadeout","$closeIcons","closeMessage","initCloseMessageBoxOnClickAndKeypress","hasFocus","isHover","fadeOut","resetFadeOut","fadeTo","shouldStartFadeOut","setup","createMessage","templates","createSection","$clearItemsSection","data-aui-checkbox-multiselect-clear","$section","$itemList","$li","styleClass","$a","icon","furniture","optionsHtml","dropdownId","$select","multiple","$button","aria-owns","aria-haspopup","handleDropdownSelection","updateOption","$toUpdate","updateClearAll","getSelectedDescriptors","mapOptionDescriptors","$options","$option","renderDropdown","getOptions","getDescriptors","renderButton","selectedLabels","getSelectedLabels","isImplicitAll","getImplicitAllLabel","$btn","getSelectedOptions","CheckboxMultiselectEl","_uniqueId2","deselectAllOptions","getButtonTitle","selectOption","unselectOption","getValue","addOption","removeOption","maybeCall","thing","isElementInDOM","ele","tipsyIDcounter","Tipsy","fixTitle","getTitle","tip","visibility","hoverTooltip","hoverState","eventOut","pos","tipCss","actualWidth","actualHeight","gravity","fade","animate","$tipID","unbindHandlers","$e","toggleEnabled","delayOut","elementOptions","leave","eventIn","revalidate","pointee","metadata","autoNS","autoWE","autoBounds","margin","prefer","ew","boundTop","boundLeft","FancyFileInput","a0","fakePathRegex","multipleFileTextRegex","$label","createLabel","buttonText","_addLabelText","$clearButton","clearButtonText","tabindex","multipleFileTextPattern","_eventNamespace","CLASSES","focused","active","valid","invalid","isDisabled","isFocused","$associatedLabel","data-ffi-button-text","formatMultipleFileText","numFiles","bindEvents","proxy","checkValidity","mousedown","mouseup","unbindEvents","fireEvent","unwrap","required","files","setFieldText","fancyFileInput","ffi","getLabel","LabelEl","_label","form","originalSelect2","select2","auiDropdown","auiSelect2","updatedArgs","auiOpts","auiAvatarClass","hasAvatar","containerCssClass","dropdownCssClass","each2","Select2","AbstractSelect2","SingleSelect2","MultiSelect2","nextUid","sizer","scrollBarDimensions","lastMousePosition","KEY","ESC","CTRL","isArrow","k","isControl","isFunctionKey","MEASURE_SCROLLBAR_TEMPLATE","DIACRITICS","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","clazz","prepareOpts","createContainer","containerId","containerSelector","formula","evaluated","thunk","syncCssClasses","adaptContainerCssClass","containerCss","elementTabIndex","killEvent","adaptDropdownCssClass","queryCount","resultsPage","initContainer","lastpos","installFilteredMouseMove","highlightUnderEvent","threshold","notify","installDebouncedScroll","loadMoreIfNeeded","stopPropagation","mousewheel","delta","deltaX","deltaY","scrollHeight","installKeyUpChangeEvent","updateResults","selectHighlighted","initSelection","monitorSource","maximumInputLength","readonly","$template","measureScrollbar","autofocus","nextSearchTerm","propertyObserver","optionToData","locked","equal","idKey","ajaxUrl","populateResults","query","populate","depth","selectable","compound","innerContainer","formatted","sortResults","formatResultCssClass","formatResult","escapeMarkup","tags","placeholderOption","process","more","term","getPlaceholder","getPlaceholderOption","local","createSearchChoice","splitVal","separator","mutationCallback","WebKitMutationObserver","MozMutationObserver","triggerSelect","triggerChange","details","blurOnChange","isInterfaceEnabled","enabledInterface","enableInterface","_enabled","_readonly","opened","positionDropdown","bodyOffset","changeDirection","resultsListNode","dropHeight","windowWidth","windowHeight","viewPortRight","viewportBottom","dropTop","dropLeft","enoughRoomBelow","enoughRoomAbove","dropWidth","enoughRoomOnRight","dropdownAutoWidth","dropdownCss","shouldOpen","clearDropdownAlignmentPreference","opening","mask","scroll","resize","orient","selectOnBlur","noFocus","empty","clearSearch","externalSearch","getMaximumSelectionSize","maximumSelectionSize","ensureHighlightVisible","hb","rb","highlight","findHighlightableChoices","moveHighlight","choices","choice","removeHighlight","countSelectableResults","page","loadMorePadding","postprocessResults","formatLoadMore","tokenize","queryNumber","lastTerm","showSearchInput","maxSelSize","checkFormatter","formatSelectionTooBig","minimumInputLength","formatInputTooShort","showSearch","formatInputTooLong","formatSearching","formatNoMatches","postRender","selection","focusSearch","setSelectionRange","createTextRange","onSelect","firstOption","initContainerWidth","focusser","minimumResultsForSearch","openOnEnter","allowClear","killEventImmediately","setPlaceholder","isPlaceholderOptionSelected","updateSelection","is_match","noHighlightUpdate","countResults","oldData","cssClass","formatSelection","formatSelectionCssClass","grep","ordered","selectChoice","searchContainer","keydowns","selectionStart","selectionEnd","sel","moveStart","getCursorInfo","selectedChoice","unselect","resizeSearch","clearPlaceholder","maxWidth","getMaxSearchWidth","getVal","addSelectedChoice","tokenizer","closeOnSelect","enableChoice","enabledItem","disabledItem","replaceWith","dequeue","setVal","getSideBorderPadding","minimumWidth","searchWidth","sideBorderPadding","currentStyle","fontSize","fontFamily","fontStyle","fontWeight","letterSpacing","textTransform","whiteSpace","measureTextWidth","buildChangeDetails","onSortStart","onSortEnd","allowedMethods","valueMethods","propertyMethods","methodsMap","markup","markMatch","pageNumber","stripDiacritics","tokenSeparators","selectCallback","token","dupe","defaultEscapeMarkup","selectedObject","currentSearchTerm","ajaxDefaults","transport","util","abstract","single","multi","ret","quietMillis","dest","adapter","adapted","replacements","tl","replace_map","/","deprecated","jsonpCallback","abort","dataText","tmp","dataItem","datum","childDatum","isFunc","formatter","formatterName","SuperClass","bindSelectMousedown","DESELECTED","NO_HIGHLIGHT","DEFAULT_SS_PDS_SIZE","deselect","_select","selectedIndex","_input","clearElementImage","hasResults","_suggestionModel","getNumberOfResults","waitForAssistive","matchPrefix","hideDropdown","_suggestionsView","setInitialVisualState","initialHighlightedItem","suggest","autoHighlight","_autoHighlight","_progressiveDataSet","setInputImageToHighlightedSuggestion","imageSource","highlighted","setElementImage","setValueAndDisplayFromModel","DOMParser","parseFromString","decodeHtmlEntities","selectHighlightedSuggestion","convertOptionToModel","SuggestionModel","serialize","convertOptionsToModels","_datalist","getActiveId","getIndexInResults","initialiseProgressiveDataSet","queryEndpoint","_queryEndpoint","maxResults","_isSync","activeQueryCount","_button","setBusyState","setIdleState","optionToHighlight","isInputExactMatch","isInputEmpty","Option","newValueSuggestionModel","createNewValueModel","indexOfValueInResults","clearAndSet","setHighlighted","getActive","preventClosingContainerLayer","focusInHandler","searchValue","cancelInProgressQueries","isQueryInProgress","getSelectedLabel","focusOutHandler","selectCanBeEmpty","selectionIsEmpty","selectionNotExact","handleInvalidInputOnFocusOut","handleHighlightOnFocusOut","SelectEl","_listId","SuggestionsView","SuggestionsModel","onChange","oldSuggestions","suggestionsToAdd","_suggestions","newSuggestion","oldSuggestion","onHighlightChange","highlightedIndex","setActive","associateDropdownAndTrigger","bindHighlightMouseover","initialiseValue","blur input","mousedown button","click input","click button","keydown input","currentValue","handled","handleTabOut","highlightPrevious","highlightNext","clearValue","displayValue","_idAttribute","_maxResults","_queryData","queryData","_queryParamKey","queryParamKey","queryCache","remote","getFilteredResults","respond","hasQueryCache","shouldGetMoreResults","activity","succ","addQueryCache","getQueryData","response","findQueryCache","setMaxResults","number","_activeIndex","suggestions","toHighlight","previousActiveIndex","nextActiveIndex","generateListItemID","listId","clearActive","currentLength","currListId","sugg","imageSrc","image","newValueText","view","matchWidth","_attributes","fireChangeEvent","_canFireEventsNow","getInput","getSpinner","removedAttributeHandler","fallbackAttributeHandler","getAttributeHandler","formAttributeHandler","_formId","idAttributeHandler","valueAttributeHandler","labelHandler","ToggleEl","bindEventsToInput","tooltip-on","tooltip-off","newVal","indeterminate","setDisabledForLabels","ProgressBarEl","afterTransitionEvent","beforeTransitionEvent","transitionEnd","transitionProgress","progressBar","progressBarContainer","currentProgress","$progressBar","$progressBarContainer","one","progressValue","updateProgress","setIndeterminateOnProgressElement","validNumeric","parseNumeric","num","Number","parseDecimal","precision","toFixed","calc","parsedMax","safeMax","parsedVal","safeValue","valAsFraction","valAsPercent","_calc","bar","setValue","setMax","_calc2","legacyValue","_updating","progressBars","valueAttribute","isIndeterminate","isProgressNotChanged","setIndeterminate","DEFAULT_SORT_OPTIONS","sortMultiSortKey","headers","debug","sortTable","$table","sorter","wrapInner","tablesorter","addParser","keyComponents","projectKey","issueNumber","stringRepresentation","table","setTableSortable","ts","alert","benchmark","getElementText","cellIndex","te","config","textExtraction","textAttribute","innerText","getColumnData","detectParserForColumn","rows","rowIndex","parsers","keepLooking","cells","getParserById","buildParserCache","h","ch","np","time","tb","$tbodies","cssInfoBlock","parsersDebug","extractors","columns","$headers","empties","emptyTo","emptyToBottom","strings","stringTo","buildCache","cc","tx","$row","cols","cacheTime","totalRows","rowData","colMax","$tb","showProcessing","isProcessing","normalized","cssChildRow","cssHasChild","ignoreCase","appendToTable","$bk","appendTime","wo","widgetOptions","tBodies","appender","isUpdating","processTbody","pager","removeRows","pager_removeRows","applyWidget","formatSortingOrder","buildHeaders","$t","lock","headerList","headerContent","computeColumnIndex","cssIcon","selectorHeaders","headerTemplate","onRenderTemplate","headerIn","onRenderHeader","column","sortInitialOrder","lockedOrder","cssHeader","headerRow","cssHeaderRow","scope","role","updateHeader","commonUpdate","resort","selectorRemove","checkResort","$th","col","th","sortDisabled","setHeadersCss","f","sortList","none","sortNone","cssNone","sortAsc","cssAsc","sortDesc","cssDesc","$extraHeaders","nextSort","sortReset","txt","language","getCachedSortType","multisort","sortTime","cts","textSorter","bl","serverSideSorting","sortStable","numberSorter","resortComplete","sl","bindMethods","refreshWidgets","restoreHeaders","cell","row","icell","$cell","tbdy","updateHeaderSortCount","delayInit","getWidgetById","dontapply","originalSettings","hasInitialized","widgets","theme","widthFixed","cancelSelection","dateFormat","sortResetKey","usNumberFormat","sortForce","sortAppend","sortLocaleCompare","sortRestart","zebra","initWidgets","initialized","tableClass","cssProcessing","selectorSort","childRow","info","processing","nextAsc","nextDesc","nextNone","buildTable","tHead","supportsDataObject","emptyMin","emptyMax","zero","null","aria-live","aria-relevant","widgetInit","colgroup","overallWidth","fixColumnWidth","sortlist","processTimer","indx","getCell","trs","cellId","rowSpan","colSpan","firstAvailCol","matrixrow","matrix","lookup","data-column","$ths","$h","isValueInArray","getIt","holdr","clearTableBody","core","downTime","external","initSort","arry","user-select","MozUserSelect","removeClasses","$r","$f","regex","chunks","hex","sortNatural","xN","xD","yN","yD","xF","yF","mx","sortNaturalAsc","sortNaturalDesc","sortText","getTextValue","charCodeAt","sortNumericAsc","sortNumericDesc","sortNumeric","characterEquivalents","A","C","E","I","O","ss","SS","u","U","replaceAccents","acc","characterRegex","characterRegexArray","parser","addWidget","hasWidget","w","wd","isApplyingWidgets","doAll","cw","cl","formatFloat","isDigit","toLocaleLowerCase","ci","parserMetadataName","$tr","even","rmv","_tabs","STORAGE_PREFIX","RESPONSIVE_OPT_IN_SELECTOR","getPaneIdFromTabLink","maybeId","substr","getPaneFromTabLink","ResponsiveAdapter","totalTabsWidth","$visibleTabs","totalVisibleTabsWidth","totalVisibleTabWidth","totalDropdownTabsWidth","tab","$tabs","removeResponsiveDropdown","$dropdownTriggerTab","$tabsMenu","triggerMarkup","createResponsiveDropdown","$tabsContainer","dropdownMarkup","findNewVisibleTabs","parentWidth","dropdownTriggerTabWidth","hasMoreSpace","currentTotalTabWidth","moveVisibleTabs","oldVisibleTabs","$tabsParent","newVisibleTabs","lastTabIndex","$tab","moveTabToResponsiveDropdown","$tabLink","moveInvisibleTabs","tabsInDropdown","remainingSpace","tabInDropdownWidth","moveTabOutOfDropdown","switchToTab","pane","$pane","isPersistentTabGroup","$tabGroup","createPersistentKey","tabGroupId","handleTabClick","responsiveResizeHandler","tabsContainer","$dropdownTrigger","isResponsive","needsResponsive","$newVisibleTabs","visibleTabWidth","$tabsInDropdown","calculateResponsiveTabs","initWindow","responsive","initTab","$tabMenu","link","$thisLink","targetPane","_addId2","enhanceTabLink","initPane","initPanes","initTabs","$tabGroups","ii","localStorage","persistentTabId","getItem","updateTabsFromLocalStorage","thisTab","_isClipped2","tabId","setItem","updateLocalStorageEntry","TabContainerEl","findPanes","findTabs","TabItemEl","TabPaneEl","$component","findComponent","addId","addprefix","_formNotification","ATTRIBUTE_VALIDATION_OPTION_PREFIX","ATTRIBUTE_FIELD_STATE","INVALID","VALID","VALIDATING","UNVALIDATED","CLASS_VALIDATION_INITIALISED","EVENT_FIELD_STATE_CHANGED","initValidation","keyUpTimer","triggerStopTypingEvent","bindStopTypingEvent","validateWhen","getValidationOption","watchedFieldID","validationTriggeredHandler","bindValidationEvent","bindFieldEvents","changeFieldState","setFieldNotification","getDisplayField","clearFieldMessages","validatorsToRun","callList","getValidators","getActivatedValidators","deferreds","allDeferreds","validatorIndex","validatorDeferred","invalidate","createArgumentAccessorFunction","createValidatorContext","runValidatorsAndGetDeferred","fieldValidators","startValidating","optionValue","$displayField","stateToNotificationTypeMap","stillValidating","getFieldState","showSpinnerIfSlow","spinnerWasVisible","removeFieldNotification","removeIconOnlyNotifications","previousMessage","newMessages","newString","previousString","combineJSONMessages","displayFieldID","delaySubmitUntilStateChange","$form","getFieldsInFormWithState","formState","stateNames","containsInvalidState","containsUnvalidatedState","containsValidatingState","mergeStates","$fields","getFieldCollectionStateNames","getFormStateName","validateUnvalidatedFields","selectFirstInvalid","validSubmitEvent","minMaxLength","fieldValueLength","fieldIsEmpty","minlength","maxlength","exactlengthMessage","makeMessage","minlengthMessage","maxlengthMessage","isPasswordField","matchesRegex","pattern","patternMessage","requiredMessage","minOrMax","validNumberMessage","fieldValue","minValue","maxValue","accessorFunction","customTokens","defaultMessage","pluginI18nMessages","messageTokens","formattingArguments","customMessageUnformatted","thisFieldValue","matchingField","matchingFieldValue","matchingFieldMessage","doesNotContainMessage","dateFormatSymbolic","dateFormatMessage","symbolRegexMap","Y","M","D","dateFormatRegexString","dateSymbol","isRecognisedSymbol","dateFormatRegex","amountChecked","aboveMin","belowMax","belowMinMessage","aboveMaxMessage","exactlength","matchingfield","matchingfield-novalue","doesnotcontain","validnumber","dateformat","minchecked","maxchecked","_createHeader2","findAndCreateHeaders","makeDefaultPopupController","datePickerUUID","popup","popupContents","parentPopup","isTrackingDatePickerFocus","handleDatePickerFocus","isTargetInput","isTargetPopup","hideDatePicker","handleFieldBlur","handleFieldFocus","showDatePicker","calendarContainerSelector","getPopupContents","_ref4","horizontalAlignment","popupInlineDialogElement","makePopup","calculateHorizontalAlignment","_datePickerPopup","handleChangeMonthYear","getCalendarNode","destroyPolyfill","createPolyfill","initPolyfill","_ref5","_ref6","datePicker","getField","getUUID","calendar","attributeHandler","withCalendar","destroyCalendar","datepicker","handleFieldUpdate","browserSupportsDateField","setDate","getDate","setMin","languageCode","localisations","i18nConfig","baseConfig","onChangeMonthYear","defaultDate","maxDate","minDate","nextText","dateText","prevText","makeConfig","firstDay","_ref3","hint","$hint","initCalendar","mutationsList","overrideBrowserDefault","baseOptions","browserDoesNotSupportDateField","shouldOverrideBrowserDefault","popupController","reconfigure","newOptions","CalendarWidget","calendarNode","$result","datepickerUI","W3C","dayNames","dayNamesMin","isRTL","monthNames","showMonthAfterYear","yearSuffix","makePlugin","WidgetConstructor","picker","calendarWidget","datepicker_instActive","Datepicker","_curInst","_keyEvent","_disabledInputs","_datepickerShowing","_inDialog","_mainDivId","_inlineClass","_appendClass","_triggerClass","_dialogClass","_disableClass","_unselectableClass","_currentClass","_dayOverClass","regional","closeText","currentText","monthNamesShort","dayNamesShort","weekHeader","_defaults","showOn","showAnim","showOptions","appendText","buttonImage","buttonImageOnly","hideIfNoPrevNext","navigationAsDateFormat","gotoCurrent","changeMonth","changeYear","yearRange","showOtherMonths","selectOtherMonths","showWeek","calculateWeek","iso8601Week","shortYearCutoff","beforeShowDay","beforeShow","onClose","numberOfMonths","showCurrentAtPos","stepMonths","stepBigMonths","altField","altFormat","constrainInput","showButtonPanel","autoSize","en","dpDiv","datepicker_bindHover","datepicker_handleMouseover","_isDisabledDatepicker","inline","datepicker_extendRemove","markerClassName","maxRows","_widgetDatepicker","setDefaults","_attachDatepicker","_newInst","_connectDatepicker","_inlineDatepicker","selectedDay","selectedMonth","selectedYear","drawMonth","drawYear","_attachments","_doKeyDown","_doKeyPress","_doKeyUp","_autoSize","_disableDatepicker","_get","_showDatepicker","alt","_lastInput","_hideDatepicker","findMax","maxI","date","setMonth","getDay","_formatDate","divSpan","_setDate","_getDefaultDate","_updateDatepicker","_updateAlternate","_dialogDatepicker","browserWidth","browserHeight","scrollX","scrollY","_dialogInst","_dialogInput","_pos","blockUI","_destroyDatepicker","_enableDatepicker","cursor","_getInst","_optionDatepicker","_getDateDatepicker","_getMinMaxDate","_changeDatepicker","_refreshDatepicker","_setDateDatepicker","noDefault","_setDateFromField","_getDate","dateStr","_selectDay","_adjustDate","_clearDate","_gotoToday","chars","chr","_possibleChars","fromCharCode","charCode","lastVal","parseDate","_getFormatConfig","beforeShowSettings","_findPos","_checkOffset","datepicker_getZindex","_shouldFocusInput","_generateHTML","_attachHandlers","origyearshtml","numMonths","_getNumberOfMonths","activeCell","yearshtml","dpWidth","dpHeight","inputWidth","inputHeight","viewWidth","viewHeight","filters","postProcess","_tidyDialog","unblockUI","_checkExternalClick","period","_adjustInstDate","currentDay","currentMonth","currentYear","getMonth","getFullYear","_notifyChange","_selectMonthYear","month","year","_selectDate","formatDate","noWeekends","day","checkDate","iFormat","iValue","shortYearCutoffTemp","doy","literal","lookAhead","getNumber","isDoubled","digits","getName","shortNames","longNames","pair","checkLiteral","_ticksTo1970","_getDaysInMonth","_daylightSavingAdjust","ATOM","COOKIE","ISO_8601","RFC_822","RFC_850","RFC_1036","RFC_1123","RFC_2822","RSS","TICKS","TIMESTAMP","formatNumber","formatName","dates","_restrictMinMax","_determineDate","newDate","offsetString","offsetNumeric","setHours","setMinutes","setSeconds","setMilliseconds","getHours","noChange","origMonth","origYear","today","selectDay","selectMonth","selectYear","maxDraw","gotoDate","controls","buttonPanel","dow","selectedDate","cornerClass","calender","daysInMonth","leadDays","curRows","numRows","printDate","dRow","daySettings","otherMonth","unselectable","tempDate","isMultiMonth","currentDate","_canAdjustMonth","_isInRange","_generateMonthYearHeader","_getFirstDayOfMonth","inMinYear","inMaxYear","years","thisYear","determineYear","endYear","monthHtml","minMax","curYear","curMonth","yearSplit","minYear","maxYear","otherArgs","_eventHandlers","_getDefaultOptions","dataKeys","wrapAll","$thead","$theadRow","$tbody","deleteConfirmationCallback","showGlobalLoading","_models","_createCollection","_rowClass","views","editRows","submit","focusedRow","allowReorder","handle","helper","elt","$td","borderLeft","borderRight","cachedHeight","getColumnCount","getRowFromElement","nextItem","prevItem","move","containment","allowCreate","_createRow","editRow","isCreateRow","resources","cancelAccessKey","submitAccessKey","fieldFocusSelector","addPosition","createPosition","addRow","errors","$create","_applyFocusCoordinator","getRows","removeRow","fetchInitialResources","entries","createRequest","afterElement","reverseOrder","hideLoading","responseData","parseJSON","responseText","showLoading","tableRows","hideGlobalLoading","renderRows","showNoEntriesMsg","autoFocus","$loading","loadingMsg","_renderRow","removeNoEntriesMsg","getModels","getTable","getTableBody","getCreateRow","staticFieldCount","$noEntries","noEntriesMsg","$rows","allowEdit","allowDelete","edit","isRowBeingEdited","isBeingEdited","hasFocusBound","Row","_removeEditRow","editView","_shiftFocusAfterEdit","_saveEditRowOnBlur","dismissEditRows","hasUpdates","isUpdateMode","focusUpdated","els","EntryModel","EditRow","ClassNames","CustomCreateView","CustomEditView","CustomReadView","DataKeys","mouse","addClasses","connectToSortable","cursorAt","grid","iframeFix","refreshPositions","revert","revertDuration","scrollSensitivity","scrollSpeed","snapMode","snapTolerance","drag","_setPositionRelative","_setHandleClassName","_removeHandleClassName","destroyOnClear","_getHandle","_blurActiveElement","_blockFrames","iframeBlocks","_unblockFrames","safeActiveElement","safeBlur","_createHelper","_cacheHelperProportions","ddmanager","_cacheMargins","cssPosition","hasFixedAncestor","positionAbs","_refreshOffsets","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","_setContainment","_clear","dropBehaviour","prepareOffsets","dragStart","margins","_getParentOffset","relative","_getRelativeOffset","noPropagation","_convertPositionTo","_uiHash","dropped","dragStop","handleElement","helperIsFunction","helperProportions","_isRootNode","po","scrollIsRootNode","isUserScrollable","relativeContainer","scrollWidth","mod","constrainPosition","co","cancelHelperRemoval","plugin","plugins","draggable","uiSortable","sortables","isOver","_storedCSS","_helper","innermostIntersecting","_intersectsWith","containerCache","_parent","currentItem","fromOutside","_revert","_cursor","_opacity","scrollParentNotHidden","overflowOffset","scrolled","snapElements","$o","bs","ls","rs","x1","x2","y1","y2","snapping","release","snapItem","makeArray","_zIndex","allowDisconnected","connectWith","dropOnEmpty","forcePlaceholderSize","forceHelperSize","tolerance","activate","beforeStop","deactivate","out","over","receive","_isOverAxis","_isFloating","overrideHandle","validHandle","reverting","_refreshItems","addBack","_removeCurrentsFromItems","noActivation","currentContainer","domPosition","_createPlaceholder","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","_preserveHelperProportions","containers","dragging","itemElement","lastPositionAbs","_intersectsWithPointer","direction","_intersectsWithSides","_rearrange","_contactContainers","animation","_noFinalSort","_getItemsAsjQuery","connected","expression","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","floating","verticalDirection","horizontalDirection","_getDragVerticalDirection","_getDragHorizontalDirection","isOverBottomHalf","isOverRightHalf","_connectWith","queries","addItems","_queries","queriesLength","fast","toleranceElement","custom","refreshContainers","_createTrPlaceholder","sourceTr","targetTr","dist","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","hardRefresh","delayedTriggers","delayEvent","_inst","sender","isFirefox","keyup","_modelClass","_submitStarted","_submitFinished","defaultColumnRenderer","aria-label","ariaLabel","renderDragHandle","_handleKeyUpEvent","_cancel","submitting","_focus","$focus","$error","$replacementSubmit","$submit","$placeholderSubmit","mapSubmitParams","serializeObject","renderErrors","renderError","renderData","contents","inputAriaLabel","createView","renderOperations","$operations","accesskey","oldError","_serverErrorHandler","syncModel","addExpand","ajaxOptions","click .aui-restfultable-editable","unfocus","_this2","$opsCell","$throbberCell","fieldName","readView","$editableRegion","emptyText","sidebarOffset","Sidebar","$wrapper","_previousScrollTop","_previousViewportHeight","_previousViewportWidth","_previousOffsetTop","submenus","SubmenuManager","collapsedTriggersSelector","constructSubmenu","lazilyInitializeSubmenus","hasTouch","_mediaQuery2","pendingReflow","onScrollResizeReflow","reflow","isAnimated","isViewportNarrow","toggleShortcutHandler","_isInput2","isNormalSquareBracket","isNormalTab","_remove","_removeAllTooltips","inlineDialogSelector","showTipsy","hideTipsy","toggleSelector","submenuInlineDialog","getSubmenuInlineDialog","$submenuInlineDialog","$inlineDialog","focusFirstItemOfInlineDialog","isShiftTab","$submenuDialog","isFirstSubmenuItem","isLastSubmenuItem","hideAllSubmenus","initializeHandlers","constructAllSubmenus","namespaceEvents","getAllSubmenuDialogs","inlineDialog","getSubmenu","inlineDialogId","allSubmenuDialogs","inlineDialog2","inlineDialogClass","didOtherLayerOpened","didNestedInlineDialogOpened","SUBMENU_INLINE_DIALOG_CONTENTS_HTML","$container","$clone","_clone2","_deduplicateIDs2","uid","cloneExpander","inlineDialogShowHandler","inlineDialogHideHandler","addHandlersToSubmenuInlineDialog","namespacedEvents","setHeight","viewportHeight","headerHeight","visibleHeaderHeight","setTopPosition","pageYOffset","setPosition","setLeftPosition","pageXOffset","setCollapsedState","viewportWidth","collapsed","expanded","narrow","wide","_expand","_collapse","collapseState","oldSize","startEvent","submenuTriggersSelector","tooltipSelector","responsiveReflow","isInitialPageLoad","offsetTop","isTouch","isTrackpadBounce","_previousScrollLeft","isFlyOut","submenu","sidebarSubmenuDeprecationLogger","submenuHeadingHeight","isShowing","isSubmenuVisible","showSubmenu","moveSubmenuToInlineDialog","restoreSubmenu","getVisibleSubmenus","tipsyOpts","durationStr","timeoutMs","DocumentTouch","isContentEditable","mq","matchMedia","testMediaQuery","uidFunction","replaceAttributeForID","setCorrespondingTriggersID","_dialog","isMac","platform","isSafari","multiCharRegex","triggerClickEvent","initMouseEvent","boundKeyCombos","executor","Callbacks","keypressHandler","fire","defaultPreventionHandler","bindKeys","keyCombo","keysArr","keyString","currModifiers","modifierMatch","multiCharMatch","keyComboArrayFromString","hasUnprintables","bindKeyCombo","appendKeyComboInstructions","isFirst","makeShortcut","addShortcutsToTitle","keyCombos","existingCombos","shortcutInstructions","originalTitle","existingCombo","removeShortcutsFromTitle","shortcuts","selectorsWithTitlesModified","makeMoveToFunction","getNewFocus","focusedClass","wrapAround","escToCancel","$focusedElem","moveToOptions","moveTo","moveToNextItem","moveToPrevItem","goTo","followLink","command","moveToAndClick","moveToAndFocus","$elem","or","fromJSON","switchCtrlToMetaOnMac","operation","shortcutList","shortcutString","newShortcut","load","TimedNumber","timer","keyHandler","handleObj","origHandler","combo","hotkeys","specialKeys","character","modif","possible","shiftNums","pressed","inc","8","9","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","91","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","144","145","188","190","191","224","219","221","keypressKeys","1","2","3","4","5","6","7","0","-","=",";",",",".","scrollTarget","scrollOffset","topOffset","animating","jQueryCache","_forms","createPopup","closeOnOutsideClick","keypressListener","highestZIndex","currentPopup","applySize","_applySize","z-index","blanket","focusDialog","popupBlanket","Dialog","Button","onclick","buttonpanel","addButtonPanel","_onclick","dialog","itemMove","leftOrRight","dtarget","curtab","itemRemove","moveUp","moveLeft","moveDown","moveRight","Panel","panelButtonId","panel","menu","onblur","onselect","ontabchange","setPadding","recalcSize","Page","curpage","buttonHeight","dialogComponentsHeight","addPanel","addHeader","addButton","addLink","gotoPanel","getCurrentPanel","addSubmit","addCancel","addPage","nextPage","prevPage","gotoPage","getPanel","pageorpanelId","panelId","pageid","getPage","pageorpanel","coll","selectorExp","queryRE","justtitle","name2","title2","id2","justtitle2","pages","updateHeight","maxDialogHeight","MIN_DIALOG_VERTICAL_BUFFER","isMaximised","getCurPanel","getCurPanelButton","alternatveName","inlineHelp","_skatejs2"],"mappings":"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AAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAEtBjgC,EAAAhsE,EAAAwH,UAEA2wE,EAAA,WAAyB,IAAAj+B,EAAA,EAAe,kBAAoB,OAAAA,KAA5D,GAuFA8xB,EAAA//D,GAAA,qBAAAtF,GACA2xE,EAAAhvD,EAAA3iB,EAAAwvC,MACAmiC,EAAAlU,EAAAz9D,EAAAyvC,QAmcA4hC,EAAAk0B,EAAA1tG,QAGAc,KAAA,SAAAujB,GACA,IAAAnZ,EAAAjJ,KACA,kBACAoiB,EAAA5hB,MAAAyI,EAAA/I,aAKA8/B,KAAA,SAAA30B,GACA,IAAAsf,EAAAw8C,EAGAnnE,KAAAqL,OAAArL,KAAA0rG,YAAArgG,GAEArL,KAAAgM,GAAAX,EAAAW,GAGAX,EAAAyM,QAAAgB,KAAA,aAAAjQ,GACA,OAAAwC,EAAAyM,QAAAgB,KAAA,YACAzN,EAAAyM,QAAAgB,KAAA,WAAA5H,UAGAlR,KAAAq4B,UAAAr4B,KAAA2rG,kBAEA3rG,KAAA4rG,YAAA,SAAAvgG,EAAAyM,QAAAnR,KAAA,iBAAA+wE,KACA13E,KAAA6rG,kBAAA,IAAA7rG,KAAA4rG,YAAAznG,QAAA,0CAAoE,QACpEnE,KAAAq4B,UAAA1xB,KAAA,KAAA3G,KAAA4rG,aAGA5rG,KAAAod,KAvbA,SAAA0uF,GACA,IACAxtG,EADAytG,GAAA,EAEA,kBAEA,OADA,IAAAA,IAAsCztG,EAAAwtG,IAAmBC,GAAA,GACzDztG,GAkbA0tG,CAAA,WAA0C,OAAA3gG,EAAAyM,QAAAqP,QAAA,UAE1C8kF,EAAAjsG,KAAAq4B,UAAAr4B,KAAAqL,KAAAyM,QAAA9X,KAAAqL,KAAA6gG,wBAEAlsG,KAAAq4B,UAAA1xB,KAAA,QAAA0E,EAAAyM,QAAAnR,KAAA,UACA3G,KAAAq4B,UAAA9vB,IAAAosB,EAAAtpB,EAAA8gG,eACAnsG,KAAAq4B,UAAA5U,SAAAkR,EAAAtpB,EAAA8rE,oBAEAn3E,KAAAosG,gBAAApsG,KAAAqL,KAAAyM,QAAAnR,KAAA,YAGA3G,KAAAqL,KAAAyM,QACAgB,KAAA,UAAA9Y,MACA2G,KAAA,iBACAiqB,OAAA5wB,KAAAq4B,WACA7sB,GAAA,gBAAA6gG,GAEArsG,KAAAq4B,UAAAvf,KAAA,UAAA9Y,MAEAA,KAAAw/C,SAAAx/C,KAAAq4B,UAAA7iB,KAAA,iBAEAy2F,EAAAjsG,KAAAw/C,SAAAx/C,KAAAqL,KAAAyM,QAAA9X,KAAAqL,KAAAihG,uBAEAtsG,KAAAw/C,SAAA/7B,SAAAkR,EAAAtpB,EAAA+rE,mBACAp3E,KAAAw/C,SAAA1mC,KAAA,UAAA9Y,MACAA,KAAAw/C,SAAAh0C,GAAA,QAAA6gG,GAEArsG,KAAA2qB,UAAA3qB,KAAAq4B,UAAA7iB,KA/CA,oBAgDAxV,KAAAmnE,SAAAnnE,KAAAq4B,UAAA7iB,KAAA,uBAEAxV,KAAAusG,WAAA,EACAvsG,KAAAwsG,YAAA,EACAxsG,KAAAgK,QAAA,KAGAhK,KAAAysG,gBAEAzsG,KAAAq4B,UAAA7sB,GAAA,QAAA6gG,GA/fA,SAAAv0F,GACAA,EAAAtM,GAAA,qBAAAtF,GACA,IAAAwmG,EAAA70B,EACA60B,IAAA7jG,GAAA6jG,EAAA7jF,IAAA3iB,EAAAwvC,OAAAg3D,EAAA/oC,IAAAz9D,EAAAyvC,OACAp2C,EAAA2G,EAAAsiB,QAAAjb,QAAA,qBAAArH,KA6fAymG,CAAA3sG,KAAA2qB,SACA3qB,KAAAw/C,SAAAh0C,GAAA,mDA5DA,mBA4DAxL,KAAAnB,KAAAmB,KAAA4sG,sBAtdA,SAAAC,EAAA/0F,GACA,IAAAg1F,EAAA38E,EAAA08E,EAAA,SAAA3mG,GAAuD4R,EAAAvK,QAAA,mBAAArH,KACvD4R,EAAAtM,GAAA,kBAAAtF,GACA5B,EAAA4B,EAAAsiB,OAAA1Q,EAAA5Z,QAAA,GAAA4uG,EAAA5mG,KAqdA6mG,CAAA,GAAA/sG,KAAA2qB,SACA3qB,KAAAw/C,SAAAh0C,GAAA,mBA/DA,mBA+DAxL,KAAAnB,KAAAmB,KAAAgtG,mBAGAztG,EAAAS,KAAAq4B,WAAA7sB,GAAA,mCAAAtF,GAA0EA,EAAA+mG,oBAC1E1tG,EAAAS,KAAAw/C,UAAAh0C,GAAA,mCAAAtF,GAAyEA,EAAA+mG,oBAGzE1tG,EAAAmG,GAAAwnG,YACAviF,EAAAuiF,WAAA,SAAAhnG,EAAAinG,EAAAC,EAAAC,GACA,IAAAzsF,EAAA+J,EAAAk2C,YACAwsC,EAAA,GAAAzsF,EAAAysF,GAAA,GACA1iF,EAAAk2C,UAAA,GACAwrC,EAAAnmG,IACqBmnG,EAAA,GAAA1iF,EAAAzsB,IAAA,GAAAovG,aAAA3iF,EAAAk2C,YAAAwsC,GAAA1iF,EAAArK,WACrBqK,EAAAk2C,UAAAl2C,EAAAzsB,IAAA,GAAAovG,aAAA3iF,EAAArK,UACA+rF,EAAAnmG,MAKAqnG,EAAApmC,GACAA,EAAA37D,GAAA,2BAAAxL,KAAAnB,KAAAmB,KAAAwtG,gBACArmC,EAAA37D,GAAA,mBAA4C27D,EAAA1jD,SAAA,qBAC5C0jD,EAAA37D,GAAA,kBAA2C27D,EAAAhoB,YAAA,qBAE3Cn/C,KAAAw/C,SAAAh0C,GAAA,UAxFA,mBAwFAxL,KAAAnB,KAAA,SAAAqH,GACA3G,EAAA2G,EAAAsiB,QAAArB,QAAA,8BAAAhnB,OAAA,IACAH,KAAA4sG,oBAAA1mG,GACAlG,KAAAytG,kBAAAvnG,OAOAlG,KAAAw/C,SAAAh0C,GAAA,mCAAAtF,GAAsEA,EAAA+mG,oBAEtE1tG,EAAAgL,WAAAvK,KAAAqL,KAAAqiG,iBAEA1tG,KAAA0tG,gBAIA1tG,KAAA2tG,iBAGA,OAAAtiG,EAAAuiG,oBACA5tG,KAAAmnE,OAAAxgE,KAAA,YAAA0E,EAAAuiG,oBAGA,IAAArqE,EAAAl4B,EAAAyM,QAAAjX,KAAA,YACA0iC,IAAA16B,IAAA06B,GAAA,GACAvjC,KAAAg9B,QAAAuG,GAEA,IAAAsqE,EAAAxiG,EAAAyM,QAAAjX,KAAA,YACAgtG,IAAAhlG,IAAAglG,GAAA,GACA7tG,KAAA6tG,YAGAj2B,KA1oBA,WACA,IAAAk2B,EAAAvuG,EAAA84E,GACAy1B,EAAA3oF,SAAA,QAEA,IAAAY,GACAhC,MAAA+pF,EAAA/pF,QAAA+pF,EAAA,GAAA9sC,YACA1gD,OAAAwtF,EAAAxtF,SAAAwtF,EAAA,GAAA7sC,cAIA,OAFA6sC,EAAAv7F,SAEAwT,EAgoBAgoF,GAEA/tG,KAAAguG,UAAA3iG,EAAAyM,QAAAjX,KAAA,aACAwK,EAAAyM,QAAAjX,KAAA,gBACAb,KAAAguG,WAAAhuG,KAAAs8B,QAEAt8B,KAAAiuG,eAAAplG,GAIAqI,QAAA,WACA,IAAA4G,EAAA9X,KAAAqL,KAAAyM,QAAA8+D,EAAA9+D,EAAAgB,KAAA,WAEA9Y,KAAA0d,QAEA1d,KAAAkuG,0BAAwCluG,KAAAkuG,iBAA8BluG,KAAAkuG,iBAAA,MAEtEt3B,IAAA/tE,IACA+tE,EAAAv+C,UAAA9lB,SACAqkE,EAAAp3B,SAAAjtC,SACAuF,EACAqnC,YAAA,qBACA3a,WAAA,WACA93B,IAAA,YACA7L,KAAA,YAAAb,KAAAguG,YAAA,GACAhuG,KAAAosG,gBACAt0F,EAAAnR,MAAkCiuE,SAAA50E,KAAAosG,kBAElCt0F,EAAA2sB,WAAA,YAEA3sB,EAAAkM,SAKAmqF,aAAA,SAAAr2F,GACA,OAAAA,EAAAoN,GAAA,WAEAlZ,GAAA8L,EAAAjX,KAAA,SACAw0B,KAAAvd,EAAAud,OACAvd,UAAA5Z,MACAqK,IAAAuP,EAAAnR,KAAA,SACA48B,SAAAzrB,EAAAjX,KAAA,YACAutG,OAAAC,EAAAv2F,EAAAnR,KAAA,qBAAA0nG,EAAAv2F,EAAAgB,KAAA,eAEahB,EAAAoN,GAAA,aAEbmQ,KAAAvd,EAAAnR,KAAA,SACAkwC,YACA/+B,UAAA5Z,MACAqK,IAAAuP,EAAAnR,KAAA,eALa,GAWb+kG,YAAA,SAAArgG,GACA,IAAAyM,EAAAnC,EAAA24F,EAAAC,EAAAtlG,EAAAjJ,KA4EA,GAxEA,YAFA8X,EAAAzM,EAAAyM,SAEA5Z,IAAA,GAAAuZ,QAAAmI,gBACA5f,KAAA2V,SAAAtK,EAAAyM,SAGAnC,GAEApW,EAAAsK,MAAA,8FACA,GAAA7J,QAAAqL,EACA,UAAAtH,MAAA,WAAA/D,KAAA,uEA2DA,mBAtDAqL,EAAA9L,EAAAgG,WACAipG,gBAAA,SAAAn2E,EAAA1N,EAAA8jF,GACA,IAAAC,EAAA1iG,EAAAhM,KAAAqL,KAAAW,IAEA0iG,EAAA,SAAA/jF,EAAA0N,EAAAs2E,GAEA,IAAAtxG,EAAAC,EAAAoR,EAAAkgG,EAAArrE,EAAAsrE,EAAA72E,EAAAsoB,EAAAwuD,EAAAC,EAIA,IAAA1xG,EAAA,EAAAC,GAFAqtB,EAAAtf,EAAA2jG,YAAArkF,EAAA0N,EAAAo2E,IAEAtuG,OAAuD9C,EAAAC,EAAOD,GAAA,EAK9DuxG,IADArrE,GAAA,KAFA70B,EAAAic,EAAAttB,IAEAkmC,WACAv3B,EAAA0C,KAAA7F,EAEAgmG,EAAAngG,EAAAmoC,UAAAnoC,EAAAmoC,SAAA12C,OAAA,GAEA63B,EAAAz4B,EAAA,cACAkkB,SAAA,wBAAAkrF,GACA32E,EAAAvU,SAAA,kBACAuU,EAAAvU,SAAAmrF,EAAA,2DACArrE,GAA2CvL,EAAAvU,SAAA,oBAC3CorF,GAA2C72E,EAAAvU,SAAA,gCAC3CuU,EAAAvU,SAAAxa,EAAAoC,KAAA4jG,qBAAAvgG,KAEA4xC,EAAA/gD,EAAAwH,SAAAyR,cAAA,SACAiL,SAAA,yBAEAsrF,EAAA1jG,EAAA6jG,aAAAxgG,EAAA4xC,EAAAmuD,EAAAxlG,EAAAoC,KAAA8jG,iBACAtmG,GACAy3C,EAAAxmB,KAAAi1E,GAGA/2E,EAAAie,OAAAqK,GAEAuuD,KAEAC,EAAAvvG,EAAA,cACAkkB,SAAA,sBACAirF,EAAAhgG,EAAAmoC,SAAAi4D,EAAAH,EAAA,GACA32E,EAAAie,OAAA64D,IAGA92E,EAAAlf,KAAA,eAAApK,GACA2pB,EAAA4d,OAAAje,KAIArN,EAAA0N,EAAA,KAEa94B,EAAAmG,GAAAkxE,QAAAnoE,SAAApD,IAEb,KACAijG,EAAAjjG,EAAAW,GACAX,EAAAW,GAAA,SAAA9F,GAAwC,OAAAA,EAAAooG,KAGxC/uG,EAAA0T,QAAA5H,EAAAyM,QAAAgB,KAAA,iBACA,YAAAzN,EACA,0FAAAA,EAAAyM,QAAAnR,KAAA,MAEA0E,EAAA+jG,KAAA/jG,EAAAyM,QAAAgB,KAAA,eA0EA,GAvEAnD,GACAtK,EAAAojG,MAAAzuG,KAAAnB,KAAA,SAAA4vG,GACA,IAEA53D,EAAAw4D,EAAAC,EAFAx2F,GAAgC6R,WAAA4kF,MAAA,GAChCC,EAAAf,EAAAe,KAGAF,EAAA,SAAAx3F,EAAAvJ,GACA,IAAA2d,EACApU,EAAAoN,GAAA,UACAupF,EAAA3jG,QAAA0kG,EAAA13F,EAAAud,OAAAvd,IACAvJ,EAAAhK,KAAA0E,EAAAklG,aAAAr2F,IAEyBA,EAAAoN,GAAA,cACzBgH,EAAAjjB,EAAAklG,aAAAr2F,GACAA,EAAA++B,WAAAwgC,MAAA,SAAAh6E,EAAAqsD,GAAuE4lD,EAAA5lD,EAAAx9B,EAAA2qB,YACvE3qB,EAAA2qB,SAAA12C,OAAA,GACAoO,EAAAhK,KAAA2nB,KAKA2qB,EAAA/+B,EAAA++B,WAGA72C,KAAAyvG,mBAAA5mG,GAAAguC,EAAA12C,OAAA,IACAkvG,EAAArvG,KAAA0vG,0BAEA74D,IAAAtR,IAAA8pE,IAIAx4D,EAAAwgC,MAAA,SAAAh6E,EAAAqsD,GAAqD4lD,EAAA5lD,EAAA5wC,EAAA6R,WAErD8jF,EAAArjG,SAAA0N,KAGAzN,EAAAW,GAAA,SAAA9F,GAAqC,OAAAA,EAAA8F,IACrCX,EAAA4jG,qBAAA,SAAAn2F,GAA4D,OAAAA,EAAAvQ,MAE5D,UAAA8C,IAEA,SAAAA,IACAkjG,EAAAljG,EAAAyM,QAAAgB,KAAA,cACAy1F,EAAApuG,OAAA,IACAkL,EAAAmO,KAAApI,IAAAm9F,GAEAljG,EAAAojG,MAAAj1F,EAAAhc,KAAA6N,EAAAyM,QAAAzM,EAAAmO,OACqB,SAAAnO,EACrBA,EAAAojG,MAAAkB,EAAAtkG,EAAAyN,MACqB,SAAAzN,IACrBA,EAAAojG,MAAAW,EAAA/jG,EAAA+jG,MACA/jG,EAAAukG,qBAAA/mG,IACAwC,EAAAukG,mBAAA,SAAAJ,GAAuE,OAASxjG,GAAAzM,EAAA0nE,KAAAuoC,GAAAn6E,KAAA91B,EAAA0nE,KAAAuoC,MAEhFnkG,EAAAqiG,gBAAA7kG,IACAwC,EAAAqiG,cAAA,SAAA51F,EAAA1M,GACA,IAAA0N,KACAvZ,EAAAswG,EAAA/3F,EAAAvR,MAAA8E,EAAAykG,YAAAjmG,KAAA,WACA,IAAAzD,GAA+C4F,GAAAhM,KAAAq1B,KAAAr1B,MAC/CovG,EAAA/jG,EAAA+jG,KACA7vG,EAAAgL,WAAA6kG,YACA7vG,EAAA6vG,GAAAvlG,KAAA,WAA6D,GAAAwkG,EAAAruG,KAAAgM,GAAA5F,EAAA4F,IAA0C,OAAZ5F,EAAApG,MAAY,IACvG8Y,EAAAvU,KAAA6B,KAGAgF,EAAA0N,OAMA,mBAAAzN,EAAA,MACA,+CAAAA,EAAAyM,QAAAnR,KAAA,MAGA,OAAA0E,GAOAsiG,cAAA,WACA,IAAA1+F,EAAA/H,EAAAc,EAAAhI,KAAAqL,KAAAyM,QAEA9P,EAAAwD,GAAA,iBAAAxL,KAAAnB,KAAA,SAAAqH,IACA,IAAAlG,KAAAqL,KAAAyM,QAAAgB,KAAA,6BACA9Y,KAAA0tG,mBAIAz+F,EAAAjP,KAAAnB,KAAA,WAGA,IAAA0kC,EAAAv7B,EAAAnH,KAAA,YACA0iC,IAAA16B,IAAA06B,GAAA,GACAvjC,KAAAg9B,QAAAuG,GAEA,IAAAsqE,EAAA7lG,EAAAnH,KAAA,YACAgtG,IAAAhlG,IAAAglG,GAAA,GACA7tG,KAAA6tG,YAEA5B,EAAAjsG,KAAAq4B,UAAAr4B,KAAAqL,KAAAyM,QAAA9X,KAAAqL,KAAA6gG,wBACAlsG,KAAAq4B,UAAA5U,SAAAkR,EAAA30B,KAAAqL,KAAA8rE,oBAEA80B,EAAAjsG,KAAAw/C,SAAAx/C,KAAAqL,KAAAyM,QAAA9X,KAAAqL,KAAAihG,uBACAtsG,KAAAw/C,SAAA/7B,SAAAkR,EAAA30B,KAAAqL,KAAA+rE,qBAKApvE,EAAAwD,GAAA,yBAAAyD,GAGAjP,KAAA+vG,mBAAAlnG,IACA7I,KAAA+vG,iBAAA,SAAA3oG,GACAA,EAAAC,QAAA4H,MAKA/H,EAAAlK,OAAAmK,kBAAAnK,OAAAgzG,wBAAAhzG,OAAAizG,uBACApnG,IACA7I,KAAAkuG,0BAA4CluG,KAAAkuG,iBAA8BluG,KAAAkuG,iBAAA,MAC1EluG,KAAAkuG,iBAAA,IAAAhnG,EAAAlH,KAAA+vG,kBACA/vG,KAAAkuG,iBAAAxmG,QAAAM,EAAA9J,IAAA,IAA0D6M,YAAA,EAAAnD,SAAA,MAK1DsoG,cAAA,SAAAp3F,GACA,IAAAgQ,EAAAvpB,EAAAujB,MAAA,qBAAoDvc,IAAAvG,KAAAgM,GAAA8M,GAAA/Z,OAAA+Z,IAEpD,OADA9Y,KAAAqL,KAAAyM,QAAAvK,QAAAub,IACAA,EAAAxF,sBAOA6sF,cAAA,SAAAC,GAEAA,QACAA,EAAA7wG,EAAAgG,UAAgC6qG,GAAYz3F,KAAA,SAAApS,IAAAvG,KAAAuG,QAE5CvG,KAAAqL,KAAAyM,QAAAgB,KAAA,+BACA9Y,KAAAqL,KAAAyM,QAAAvK,QAAA6iG,GACApwG,KAAAqL,KAAAyM,QAAAgB,KAAA,+BAIA9Y,KAAAqL,KAAAyM,QAAAkkB,QAIAh8B,KAAAqL,KAAAglG,cACArwG,KAAAqL,KAAAyM,QAAAykB,QAIA+zE,mBAAA,WAEA,WAAAtwG,KAAAuwG,kBAIAC,gBAAA,WACA,IAAAx/D,EAAAhxC,KAAAywG,WAAAzwG,KAAA0wG,UACAntE,GAAAyN,EAEA,OAAAA,IAAAhxC,KAAAuwG,mBAEAvwG,KAAAq4B,UAAAuN,YAAA,6BAAArC,GACAvjC,KAAA0d,QACA1d,KAAAuwG,iBAAAv/D,GAEA,IAIAhU,OAAA,SAAAgU,GACAA,IAAAnoC,IAAAmoC,GAAA,GACAhxC,KAAAywG,WAAAz/D,IACAhxC,KAAAywG,SAAAz/D,EAEAhxC,KAAAqL,KAAAyM,QAAAjX,KAAA,YAAAmwC,GACAhxC,KAAAwwG,oBAIAzzE,QAAA,WACA/8B,KAAAg9B,QAAA,IAIA6wE,SAAA,SAAA78D,GAEA,OADAA,IAAAnoC,IAAAmoC,GAAA,GACAhxC,KAAA0wG,YAAA1/D,IACAhxC,KAAA0wG,UAAA1/D,EAEAhxC,KAAAqL,KAAAyM,QAAAjX,KAAA,WAAAmwC,GACAhxC,KAAAwwG,mBACA,IAIAG,OAAA,WACA,OAAA3wG,KAAAq4B,UAAA2N,SAAA,0BAIA4qE,iBAAA,WACA,IAiBAC,EACAhtF,EACAitF,EACAvoG,EACAwoG,EArBAxvD,EAAAvhD,KAAAw/C,SACAhqB,EAAAx1B,KAAAq4B,UAAA7C,SACAlV,EAAAtgB,KAAAq4B,UAAA+zC,aAAA,GACAroD,EAAA/jB,KAAAq4B,UAAAi2B,YAAA,GACA0iD,EAAAzvD,EAAA6qB,aAAA,GACA3e,EAAAluD,EAAAvC,QACAi0G,EAAAxjD,EAAA1pC,QACAmtF,EAAAzjD,EAAAntC,SACA6wF,EAAA1jD,EAAAqT,aAAAmwC,EACAG,EAAA3jD,EAAAoT,YAAAqwC,EACAG,EAAA77E,EAAA5U,IAAAN,EACAgxF,EAAA97E,EAAAzJ,KACAwlF,EAAAF,EAAAL,GAAAI,EACAI,EAAAh8E,EAAA5U,IAAAowF,GAAAhxG,KAAAod,OAAAyjD,YACA4wC,EAAAlwD,EAAA+M,YAAA,GACAojD,EAAAJ,EAAAG,GAAAN,EACA5vD,EAAAvb,SAAA,uBASAniB,GAAA,GACA2tF,GAAAD,IACAT,GAAA,EACAjtF,GAAA,KAGAA,GAAA,GACA0tF,GAAAC,IACAV,GAAA,EACAjtF,GAAA,IAKAitF,IACAvvD,EAAAp9B,OACAqR,EAAAx1B,KAAAq4B,UAAA7C,SACAlV,EAAAtgB,KAAAq4B,UAAA+zC,aAAA,GACAroD,EAAA/jB,KAAAq4B,UAAAi2B,YAAA,GACA0iD,EAAAzvD,EAAA6qB,aAAA,GACA+kC,EAAA1jD,EAAAqT,aAAAmwC,EACAG,EAAA3jD,EAAAoT,YAAAqwC,EACAG,EAAA77E,EAAA5U,IAAAN,EAGAoxF,GAFAJ,EAAA97E,EAAAzJ,OACA0lF,EAAAlwD,EAAA+M,YAAA,KACA6iD,EACA5vD,EAAAv9B,QAGAhkB,KAAAqL,KAAAsmG,mBACAZ,EAAAxxG,EAAA,mBAAAgiD,GAAA,GACAA,EAAA99B,SAAA,2BACA89B,EAAAh5C,IAAA,aAEAkpG,EAAAlwD,EAAA+M,YAAA,IAAAyiD,EAAAzD,eAAAyD,EAAA9vC,aAAA,EAAA2W,EAAA7zD,QACAA,IAAA0tF,IAAA1tF,EACA2tF,EAAAJ,EAAAG,GAAAN,GAGAnxG,KAAAq4B,UAAA8mB,YAAA,2BAOA,WAAAn/C,KAAAod,OAAA7U,IAAA,cAEA8oG,IADAR,EAAA7wG,KAAAod,OAAAoY,UACA5U,IACA0wF,GAAAT,EAAA9kF,MAGA2lF,IACAJ,EAAA97E,EAAAzJ,KAAAhI,EAAA0tF,GAGAlpG,GACAwjB,KAAAulF,EACAvtF,SAGAF,GACAtb,EAAA4nC,OAAA+gE,EAAA17E,EAAA5U,IACArY,EAAAqY,IAAA,OACA5gB,KAAAq4B,UAAA5U,SAAA,sBACA89B,EAAA99B,SAAA,wBAGAlb,EAAAqY,IAAAywF,EACA9oG,EAAA4nC,OAAA,OACAnwC,KAAAq4B,UAAA8mB,YAAA,sBACAoC,EAAApC,YAAA,uBAEA52C,EAAAhJ,EAAAgG,OAAAgD,EAAAosB,EAAA30B,KAAAqL,KAAAumG,cAEArwD,EAAAh5C,QAIAspG,WAAA,WACA,IAAA78F,EAEA,OAAAhV,KAAA2wG,YAEA,IAAA3wG,KAAAywG,WAAA,IAAAzwG,KAAA0wG,YAEA17F,EAAAzV,EAAAujB,MAAA,mBACA9iB,KAAAqL,KAAAyM,QAAAvK,QAAAyH,IACAA,EAAAsO,wBAIAwuF,iCAAA,WAEA9xG,KAAAq4B,UAAA8mB,YAAA,sBACAn/C,KAAAw/C,SAAAL,YAAA,uBAUA1hC,KAAA,WAEA,QAAAzd,KAAA6xG,eAEA7xG,KAAA+xG,WAEA,IAOAA,QAAA,WACA,IAIAC,EAJA3jG,EAAArO,KAAA4rG,YACAqG,EAAA,UAAA5jG,EACA6jG,EAAA,UAAA7jG,EACA8jG,EAAA,qBAAA9jG,EAGArO,KAAAq4B,UAAA5U,SAAA,yBAAAA,SAAA,4BAEAzjB,KAAA8xG,mCAEA9xG,KAAAw/C,SAAA,KAAAx/C,KAAAod,OAAAy5B,WAAApgC,OAAA,IACAzW,KAAAw/C,SAAA2Q,SAAAhrC,SAAAnlB,KAAAod,QAKA,IADA40F,EAAAzyG,EAAA,uBACAY,UACA6xG,EAAAzyG,EAAAwH,SAAAyR,cAAA,SACA7R,KAAA,0BAAAA,KAAA,6BACAqrG,EAAA7tF,OACA6tF,EAAA7sF,SAAAnlB,KAAAod,QACA40F,EAAAxmG,GAAA,sCAAAtF,GACA,IAAA+C,EAAAu2C,EAAAjgD,EAAA,iBACAigD,EAAAr/C,OAAA,KACA8I,EAAAu2C,EAAA1mC,KAAA,YACAzN,KAAA+mG,cACAnpG,EAAAwkG,mBAAoD4E,SAAA,IAEpDppG,EAAAyU,OAAoC4e,OAAA,IACpCp2B,EAAAoiB,iBACApiB,EAAA+mG,sBAMAjtG,KAAAw/C,SAAA7vC,OAAA,KAAAqiG,EAAA,IACAhyG,KAAAw/C,SAAA5uB,OAAAohF,GAIAzyG,EAAA,iBAAAklC,WAAA,MACAzkC,KAAAw/C,SAAA74C,KAAA,qBAGAqrG,EAAAhuF,OAEAhkB,KAAA4wG,mBACA5wG,KAAAw/C,SAAAx7B,OACAhkB,KAAA4wG,mBAEA5wG,KAAAw/C,SAAA/7B,SAAA,uBAIA,IAAA4gB,EAAArkC,KACAA,KAAAq4B,UAAAutB,UAAAtzC,IAAAtV,QAAA6M,KAAA,WACAtK,EAAAS,MAAAwL,GAAA0mG,EAAA,IAAAD,EAAA,IAAAE,EAAA,SAAAjsG,GACAm+B,EAAAusE,wBAQAlzF,MAAA,WACA,GAAA1d,KAAA2wG,SAAA,CAEA,IAAAtiG,EAAArO,KAAA4rG,YACAqG,EAAA,UAAA5jG,EACA6jG,EAAA,UAAA7jG,EACA8jG,EAAA,qBAAA9jG,EAGArO,KAAAq4B,UAAAutB,UAAAtzC,IAAAtV,QAAA6M,KAAA,WAAmEtK,EAAAS,MAAA0M,IAAAulG,GAAAvlG,IAAAwlG,GAAAxlG,IAAAylG,KAEnEnyG,KAAA8xG,mCAEAvyG,EAAA,sBAAA4kB,OACAnkB,KAAAw/C,SAAA/a,WAAA,MACAzkC,KAAAw/C,SAAAr7B,OACAnkB,KAAAq4B,UAAA8mB,YAAA,yBAAAA,YAAA,4BACAn/C,KAAA2qB,QAAA2nF,QAGAtyG,KAAAuyG,cACAvyG,KAAAmnE,OAAAhoB,YAAA,kBACAn/C,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,oBAOA0vF,eAAA,SAAAhD,GACAxvG,KAAAyd,OACAzd,KAAAmnE,OAAA5gE,IAAAipG,GACAxvG,KAAAwtG,eAAA,IAIA+E,YAAA,aAKAE,wBAAA,WACA,OAAA99E,EAAA30B,KAAAqL,KAAAqnG,uBAIAC,uBAAA,WACA,IAAA97D,EAAA3iC,EAAAyK,EAAAi0F,EAAAC,EAAAlvC,EAAA4rC,EAAA5kF,EAAA3qB,KAAA2qB,SAEAzW,EAAAlU,KAAA8yG,aAEA,IAEA,GAAA5+F,GAUA2iC,EAAA72C,KAAA+yG,2BAAAv9F,KAAA,yBAIAo9F,GAFAj0F,EAAApf,EAAAs3C,EAAA3iC,KAEAshB,SAAA5U,IAAAjC,EAAAytD,aAAA,GAGAl4D,IAAA2iC,EAAA12C,OAAA,IACAovG,EAAA5kF,EAAAnV,KAAA,4BACArV,OAAA,IACAyyG,EAAArD,EAAA/5E,SAAA5U,IAAA2uF,EAAAnjC,aAAA,IAKAwmC,GADAC,EAAAloF,EAAA6K,SAAA5U,IAAA+J,EAAAyhD,aAAA,KAEAzhD,EAAAk2C,UAAAl2C,EAAAk2C,aAAA+xC,EAAAC,KAEAlvC,EAAAhlD,EAAA6W,SAAA5U,IAAA+J,EAAA6K,SAAA5U,KAGA,WAAAjC,EAAApW,IAAA,YACAoiB,EAAAk2C,UAAAl2C,EAAAk2C,YAAA8C,IA1BAh5C,EAAAk2C,UAAA,KA+BAkyC,yBAAA,WACA,OAAA/yG,KAAA2qB,QAAAnV,KAAA,yEAIAw9F,cAAA,SAAA7F,GAIA,IAHA,IAAA8F,EAAAjzG,KAAA+yG,2BACA7+F,EAAAlU,KAAA8yG,YAEA5+F,GAAA,GAAAA,EAAA++F,EAAA9yG,QAAA,CAEA,IAAA+yG,EAAA3zG,EAAA0zG,EADA/+F,GAAAi5F,IAEA,GAAA+F,EAAAltE,SAAA,+BAAAktE,EAAAltE,SAAA,sBAAAktE,EAAAltE,SAAA,qBACAhmC,KAAA8yG,UAAA5+F,GACA,SAMA4+F,UAAA,SAAA5+F,GACA,IACAg/F,EACAp6F,EAFAm6F,EAAAjzG,KAAA+yG,2BAIA,OAAA7yG,UAAAC,OACA,OAAAmE,EAAA2uG,EAAAv9F,OAAA,2BAAAu9F,EAAA/0G,OAGAgW,GAAA++F,EAAA9yG,SAAA+T,EAAA++F,EAAA9yG,OAAA,GACA+T,EAAA,IAAAA,EAAA,GAEAlU,KAAAmzG,mBAEAD,EAAA3zG,EAAA0zG,EAAA/+F,KACAuP,SAAA,uBAEAzjB,KAAA2yG,0BAEA75F,EAAAo6F,EAAAp6F,KAAA,kBAEA9Y,KAAAqL,KAAAyM,QAAAvK,SAA2CoL,KAAA,oBAAApS,IAAAvG,KAAAgM,GAAA8M,GAAAo6F,OAAAp6F,KAI3Cq6F,gBAAA,WACAnzG,KAAA2qB,QAAAnV,KAAA,wBAAA2pC,YAAA,wBAIAi0D,uBAAA,WACA,OAAApzG,KAAA+yG,2BAAA5yG,QAIAysG,oBAAA,SAAA53F,GACA,IAAAhN,EAAAzI,EAAAyV,EAAAwT,QAAArB,QAAA,8BACA,GAAAnf,EAAA7H,OAAA,IAAA6H,EAAAkd,GAAA,yBACA,IAAA+tF,EAAAjzG,KAAA+yG,2BACA/yG,KAAA8yG,UAAAG,EAAA/+F,MAAAlM,SACa,GAAAA,EAAA7H,QAEbH,KAAAmzG,mBAKAnG,iBAAA,WACA,IAAAriF,EAAA3qB,KAAA2qB,QACA4kF,EAAA5kF,EAAAnV,KAAA,2BAEA69F,EAAArzG,KAAAwsG,YAAA,EACAvjG,EAAAjJ,KACAwvG,EAAAxvG,KAAAmnE,OAAA5gE,MACAyD,EAAAhK,KAAAgK,QAEA,IAAAulG,EAAApvG,QACAovG,EAAA/5E,SAAA5U,IAAA+J,EAAA6K,SAAA5U,IAAA+J,EAAArK,UAEAtgB,KAAAqL,KAAAioG,kBACA/D,EAAA9rF,SAAA,kBACAzjB,KAAAqL,KAAAojG,OACA32F,QAAA9X,KAAAqL,KAAAyM,QACA03F,OACA6D,OACArpG,UACAc,QAAA9K,KAAAqL,KAAAP,QACAM,SAAApL,KAAAnB,KAAA,SAAAia,GAGA7P,EAAA0nG,WAGA1nG,EAAAoC,KAAAmjG,gBAAAhxG,KAAAwC,KAAA2qB,EAAA7R,EAAA6R,SAAqF6kF,OAAA6D,OAAArpG,YACrFf,EAAAsqG,mBAAAz6F,GAAA,OAEA,IAAAA,EAAAy2F,MACAA,EAAAp/C,SAAAhrC,SAAAwF,GAAA0K,KAAApsB,EAAAoC,KAAAmoG,eAAAH,EAAA,IACAr2G,OAAAyyB,WAAA,WAA0DxmB,EAAA+jG,oBAA2B,KAErFuC,EAAAh9F,SAEAtJ,EAAA2nG,mBACA3nG,EAAAujG,YAAA6G,EACApqG,EAAAe,QAAA8O,EAAA9O,QACAhK,KAAAqL,KAAAyM,QAAAvK,SAAmDoL,KAAA,iBAAAqnC,MAAAlnC,WAQnD26F,SAAA,aAQAjG,cAAA,SAAAl3F,GACA,IAGAwC,EAEA2T,EAIAinF,EATAvsC,EAAAnnE,KAAAmnE,OACAx8C,EAAA3qB,KAAA2qB,QACAtf,EAAArL,KAAAqL,KAEApC,EAAAjJ,KAEAwvG,EAAAroC,EAAA5gE,MACAotG,EAAAp0G,EAAAuZ,KAAA9Y,KAAAq4B,UAAA,qBAKA,SAAA/hB,IAAAq9F,IAAAtF,EAAAmB,EAAAmE,MAEAp0G,EAAAuZ,KAAA9Y,KAAAq4B,UAAA,oBAAAm3E,IAGA,IAAAl5F,IAAA,IAAAtW,KAAA4zG,iBAAA5zG,KAAA2wG,UAAA,CAcA+C,IAAA1zG,KAAAusG,WAEA,IAAAsH,EAAA7zG,KAAAyyG,0BACA,KAAAoB,GAAA,IACA/6F,EAAA9Y,KAAA8Y,OACAvZ,EAAA0T,QAAA6F,MAAA3Y,QAAA0zG,GAAAC,EAAAzoG,EAAA0oG,sBAAA,2BAMA,OAAA5sC,EAAA5gE,MAAApG,OAAAkL,EAAA2oG,oBACAF,EAAAzoG,EAAA4oG,oBAAA,uBACAt8F,EAAA,kCAAAtM,EAAA4oG,oBAAA9sC,EAAA5gE,MAAA8E,EAAA2oG,oBAAA,SAEAr8F,EAAA,SAEArB,GAAAtW,KAAAk0G,YAAAl0G,KAAAk0G,YAAA,UAIA7oG,EAAAuiG,oBAAAzmC,EAAA5gE,MAAApG,OAAAkL,EAAAuiG,mBACAkG,EAAAzoG,EAAA8oG,mBAAA,sBACAx8F,EAAA,kCAAAtM,EAAA8oG,mBAAAhtC,EAAA5gE,MAAA8E,EAAAuiG,oBAAA,SAEAj2F,EAAA,KAKAtM,EAAA+oG,iBAAA,IAAAp0G,KAAA+yG,2BAAA5yG,QACAwX,EAAA,iCAAAtM,EAAA+oG,kBAAA,SAGAjtC,EAAA1jD,SAAA,kBAEAzjB,KAAAmzG,mBAGA1mF,EAAAzsB,KAAAyzG,aACA5qG,GAAA,MAAA4jB,GACA06C,EAAA5gE,IAAAkmB,GAGAzsB,KAAAwsG,YAAA,EAEAnhG,EAAAojG,OACA32F,QAAAzM,EAAAyM,QACA03F,KAAAroC,EAAA5gE,MACA8sG,KAAArzG,KAAAwsG,YACAxiG,QAAA,KACAc,QAAAO,EAAAP,QACAM,SAAApL,KAAAnB,KAAA,SAAAia,GACA,IAAAylC,EAGAm1D,GAAA1zG,KAAAusG,aAKAvsG,KAAA2wG,UAMA3wG,KAAAgK,QAAA8O,EAAA9O,UAAAnB,EAAA,KAAAiQ,EAAA9O,QAEAhK,KAAAqL,KAAAukG,oBAAA,KAAAzoC,EAAA5gE,QACAg4C,EAAAv+C,KAAAqL,KAAAukG,mBAAApyG,KAAAyL,EAAAk+D,EAAA5gE,MAAAuS,EAAA6R,YACA9hB,GAAA,OAAA01C,GAAAt1C,EAAA+C,GAAAuyC,KAAA11C,GAAA,OAAAI,EAAA+C,GAAAuyC,IAIiC,IAHjCh/C,EAAAuZ,EAAA6R,SAAAjV,OACA,WACA,OAAA24F,EAAAplG,EAAA+C,GAAAhM,MAAAiJ,EAAA+C,GAAAuyC,MACiCp+C,QACjC2Y,EAAA6R,QAAAvgB,QAAAm0C,GAKA,IAAAzlC,EAAA6R,QAAAxqB,QAAA2zG,EAAAzoG,EAAAgpG,gBAAA,mBACA18F,EAAA,kCAAAtM,EAAAgpG,gBAAAltC,EAAA5gE,OAAA,UAIAokB,EAAA2nF,QACArpG,EAAAoC,KAAAmjG,gBAAAhxG,KAAAwC,KAAA2qB,EAAA7R,EAAA6R,SAAiF6kF,KAAAroC,EAAA5gE,MAAA8sG,KAAArzG,KAAAwsG,YAAAxiG,QAAA,QAEjF,IAAA8O,EAAAy2F,MAAAuE,EAAAzoG,EAAAmoG,eAAA,oBACA7oF,EAAAsrB,OAAA,oCAAAhtC,EAAAoC,KAAA8jG,aAAA9jG,EAAAmoG,eAAAxzG,KAAAwsG,cAAA,SACAxvG,OAAAyyB,WAAA,WAAsDxmB,EAAA+jG,oBAA2B,KAGjFhtG,KAAAuzG,mBAAAz6F,EAAAxC,GAEAg+F,IAEAt0G,KAAAqL,KAAAyM,QAAAvK,SAA+CoL,KAAA,iBAAAqnC,MAAAlnC,MApC/C9Y,KAAAmnE,OAAAhoB,YAAA,yBAxDAxnC,EAAA,uCAAAtM,EAAA0oG,sBAAAF,GAAA,SAhBA,SAAAS,IACAntC,EAAAhoB,YAAA,kBACAl2C,EAAA2nG,mBAGA,SAAAj5F,EAAAmiB,GACAnP,EAAAmP,QACAw6E,MA0GApkF,OAAA,WACAlwB,KAAA0d,SAIA6e,KAAA,WAEAv8B,KAAAqL,KAAA+mG,cACApyG,KAAAytG,mBAAwC4E,SAAA,IAExCryG,KAAA0d,QACA1d,KAAAq4B,UAAA8mB,YAAA,4BAEAn/C,KAAAmnE,OAAA,KAAApgE,SAAA01B,eAA4Dz8B,KAAAmnE,OAAA5qC,OAC5Dv8B,KAAAuyG,cACAvyG,KAAAu0G,UAAA/+F,KAAA,gCAAA2pC,YAAA,gCAIAq1D,YAAA,YA56CA,SAAA98F,GACAA,EAAA,KAAA3Q,SAAA01B,eAKAz/B,OAAAyyB,WAAA,WACA,IAAArB,EAAApmB,EAAA0P,EAAA,GAAA86D,EAAA96D,EAAAnR,MAAApG,OAEAuX,EAAA4kB,QAIA5kB,EAAAwN,GAAA,aAAAld,IAAAjB,SAAA01B,gBAIAz0B,EAAAysG,kBAEAzsG,EAAAysG,kBAAAjiC,KAEAxqE,EAAA0sG,mBACAtmF,EAAApmB,EAAA0sG,mBACAtqD,UAAA,GACAh8B,EAAAzY,YAGS,GAk5CT2mB,CAAAt8B,KAAAmnE,SAIAsmC,kBAAA,SAAA/pG,GACA,IAAAwQ,EAAAlU,KAAA8yG,YAEAh6F,EADA9Y,KAAA2qB,QAAAnV,KAAA,wBACA2R,QAAA,mBAAArO,KAAA,gBAEAA,GACA9Y,KAAA8yG,UAAA5+F,GACAlU,KAAA20G,SAAA77F,EAAApV,IACaA,KAAA2uG,SACbryG,KAAA0d,SAKA+xF,eAAA,WACA,IAAAJ,EACA,OAAArvG,KAAAqL,KAAAyM,QAAAnR,KAAA,gBACA3G,KAAAqL,KAAAyM,QAAAnR,KAAA,qBACA3G,KAAAqL,KAAAyM,QAAAgB,KAAA,gBACA9Y,KAAAqL,KAAA4jB,eACAogF,EAAArvG,KAAA0vG,0BAAA7mG,EAAAwmG,EAAAh6E,OAAAxsB,IAIA6mG,qBAAA,WACA,GAAA1vG,KAAA2V,OAAA,CACA,IAAAi/F,EAAA50G,KAAA2V,OAAAkhC,SAAA,UAAAniC,QACA,GAAA1U,KAAAqL,KAAAgkG,oBAAAxmG,EAEA,gBAAA7I,KAAAqL,KAAAgkG,mBAAAuF,GACA,mBAAA50G,KAAAqL,KAAAgkG,mBAAArvG,KAAAqL,KAAAgkG,kBAAArvG,KAAA2V,QACiB,QAAAi/F,EAAAv/E,QAAA,KAAAu/E,EAAAruG,MAEjB,OAAAquG,IAYAC,mBAAA,WAuCA,IAAA9wF,EAtCA,WACA,IAAA9G,EAAApS,EAAA/D,EAAAzJ,EAAAC,EAEA,WAAA0C,KAAAqL,KAAA0Y,MACA,YACiB,eAAA/jB,KAAAqL,KAAA0Y,MACjB,WAAA/jB,KAAAqL,KAAAyM,QAAAw2C,YAAA,UAAAtuD,KAAAqL,KAAAyM,QAAAw2C,YAAA,QACiB,YAAAtuD,KAAAqL,KAAA0Y,OAAA,YAAA/jB,KAAAqL,KAAA0Y,MAAA,CAGjB,IADA9G,EAAAjd,KAAAqL,KAAAyM,QAAAnR,KAAA,YACAkC,EAEA,IAAAxL,EAAA,EAAAC,GADAuN,EAAAoS,EAAA7Y,MAAA,MACAjE,OAAqD9C,EAAAC,EAAOD,GAAA,EAG5D,WADAyJ,EADA+D,EAAAxN,GAAA8G,QAAA,UACA+T,MAAA,mEACApR,EAAA3G,QAAA,EACA,OAAA2G,EAAA,GAIA,kBAAA9G,KAAAqL,KAAA0Y,OAGA9G,EAAAjd,KAAAqL,KAAAyM,QAAAvP,IAAA,UACAjE,QAAA,OAAA2Y,EAGA,IAAAjd,KAAAqL,KAAAyM,QAAAw2C,YAAA,UAAAtuD,KAAAqL,KAAAyM,QAAAw2C,YAAA,QAGA,KACiB,OAAA/uD,EAAAgL,WAAAvK,KAAAqL,KAAA0Y,OACjB/jB,KAAAqL,KAAA0Y,QAEA/jB,KAAAqL,KAAA0Y,OAIAvmB,KAAAwC,MACA,OAAA+jB,GACA/jB,KAAAq4B,UAAA9vB,IAAA,QAAAwb,MAKAyzD,EAAAi0B,EAAAl0B,GAIAo0B,gBAAA,WAgBA,OAfApsG,EAAAwH,SAAAyR,cAAA,QAAA7R,MACAgkD,MAAA,sBACa7wB,MACb,qEACA,iGACA,gDACA,OACA,kEACA,kDACA,kCACA,iIACA,YACA,kCACA,WACA,UAAA5F,KAAA,MAKAs8E,gBAAA,WACAxwG,KAAA4e,OAAA4xF,gBAAAhwG,MAAAR,KAAAE,YACAF,KAAA80G,SAAAj0G,KAAA,YAAAb,KAAAswG,uBAKAyB,QAAA,WACA,IAAA/pG,EAAAomB,EAAArB,EAEA/sB,KAAAqL,KAAA0pG,yBAAA,GACA/0G,KAAAk0G,YAAA,GAGAl0G,KAAA4e,OAAAmzF,QAAAvxG,MAAAR,KAAAE,YAEA,IAAAF,KAAA4zG,iBAIA5zG,KAAAmnE,OAAA5gE,IAAAvG,KAAA80G,SAAAvuG,OAEAvG,KAAAmnE,OAAA7qC,SAGAt0B,EAAAhI,KAAAmnE,OAAAjpE,IAAA,IACAw2G,kBACAtmF,EAAApmB,EAAA0sG,mBACAtqD,UAAA,GACAh8B,EAAAzY,UACa3N,EAAAysG,oBACb1nF,EAAA/sB,KAAAmnE,OAAA5gE,MAAApG,OACA6H,EAAAysG,kBAAA1nF,MAKA,KAAA/sB,KAAAmnE,OAAA5gE,OACAvG,KAAAiuG,gBAAAplG,IACA7I,KAAAmnE,OAAA5gE,IAAAvG,KAAAiuG,gBACAjuG,KAAAmnE,OAAAxxD,UAIA3V,KAAA80G,SAAAj0G,KAAA,eAAA0F,IAAA,IACAvG,KAAAwtG,eAAA,GACAxtG,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,kBAIApF,MAAA,SAAAtd,GACAJ,KAAA2wG,WACA3wG,KAAA4e,OAAAlB,MAAAld,MAAAR,KAAAE,WAEAE,MAAgCk8B,OAAA,GAChCt8B,KAAA80G,SAAArwE,WAAA,YAEArkC,EAAAk8B,OACAt8B,KAAA80G,SAAAx4E,UAKAA,MAAA,WACAt8B,KAAA2wG,SACA3wG,KAAA0d,SAEA1d,KAAA80G,SAAArwE,WAAA,YACAzkC,KAAA80G,SAAAx4E,UAKA+4C,UAAA,WACA,OAAAr1E,KAAAq4B,UAAA2N,SAAA,6BAIA9V,OAAA,WACAlwB,KAAA4e,OAAAsR,OAAA1vB,MAAAR,KAAAE,WACAF,KAAA80G,SAAArwE,WAAA,YACAzkC,KAAA80G,SAAAx4E,SAIAprB,QAAA,WACA3R,EAAA,cAAAS,KAAA80G,SAAAnuG,KAAA,YACAA,KAAA,MAAA3G,KAAAqL,KAAAyM,QAAAnR,KAAA,OACA3G,KAAA4e,OAAA1N,QAAA1Q,MAAAR,KAAAE,YAIAusG,cAAA,WAEA,IAAA8H,EACAl8E,EAAAr4B,KAAAq4B,UACAmnB,EAAAx/C,KAAAw/C,SAEAx/C,KAAAqL,KAAA0pG,wBAAA,EACA/0G,KAAAk0G,YAAA,GAEAl0G,KAAAk0G,YAAA,GAGAl0G,KAAAu0G,YAAAl8E,EAAA7iB,KAAA,mBAEAxV,KAAA80G,SAAAz8E,EAAA7iB,KAAA,qBAGAxV,KAAA80G,SAAAnuG,KAAA,oBAAA+wE,KAEAn4E,EAAA,cAAAS,KAAAqL,KAAAyM,QAAAnR,KAAA,YACAA,KAAA,MAAA3G,KAAA80G,SAAAnuG,KAAA,OAEA3G,KAAA80G,SAAAnuG,KAAA,WAAA3G,KAAAosG,iBAEApsG,KAAAmnE,OAAA37D,GAAA,UAAAxL,KAAAnB,KAAA,SAAAqH,GACA,GAAAlG,KAAAswG,qBAEA,GAAApqG,EAAA02B,QAAAk7C,EAAAj1E,SAAAqD,EAAA02B,QAAAk7C,EAAAl1E,UAMA,OAAAsD,EAAA02B,OACA,KAAAk7C,EAAA30E,GACA,KAAA20E,EAAAh2E,KAGA,OAFA9B,KAAAgzG,cAAA9sG,EAAA02B,QAAAk7C,EAAA30E,IAAA,UACAkpG,EAAAnmG,GAEA,KAAA4xE,EAAA91E,MAGA,OAFAhC,KAAAytG,yBACApB,EAAAnmG,GAEA,KAAA4xE,EAAA50E,IAEA,YADAlD,KAAAytG,mBAAgD4E,SAAA,IAEhD,KAAAv6B,EAAAC,IAGA,OAFA/3E,KAAAkwB,OAAAhqB,QACAmmG,EAAAnmG,QAnBAmmG,EAAAnmG,MAwBAlG,KAAAmnE,OAAA37D,GAAA,OAAAxL,KAAAnB,KAAA,SAAAqH,GAGAa,SAAA01B,gBAAAz8B,KAAAod,OAAAlf,IAAA,IACAlB,OAAAyyB,WAAAzvB,KAAAnB,KAAA,WACAmB,KAAAmnE,OAAA7qC,UACqB,MAIrBt8B,KAAA80G,SAAAtpG,GAAA,UAAAxL,KAAAnB,KAAA,SAAAqH,GACA,GAAAlG,KAAAswG,sBAEApqG,EAAA02B,QAAAk7C,EAAA50E,MAAA40E,EAAAK,UAAAjyE,KAAA4xE,EAAAM,cAAAlyE,MAAA02B,QAAAk7C,EAAAC,IAAA,CAIA,QAAA/3E,KAAAqL,KAAA2pG,aAAA9uG,EAAA02B,QAAAk7C,EAAA91E,MAAA,CAKA,GAAAkE,EAAA02B,OAAAk7C,EAAAh2E,MAAAoE,EAAA02B,OAAAk7C,EAAA30E,IACA+C,EAAA02B,OAAAk7C,EAAA91E,OAAAhC,KAAAqL,KAAA2pG,YAAA,CAEA,GAAA9uG,EAAAgvC,QAAAhvC,EAAAivC,SAAAjvC,EAAAmvC,UAAAnvC,EAAAkvC,QAAA,OAIA,OAFAp1C,KAAAyd,YACA4uF,EAAAnmG,GAIA,OAAAA,EAAA02B,OAAAk7C,EAAAj2E,QAAAqE,EAAA02B,OAAAk7C,EAAAz2E,WACArB,KAAAqL,KAAA4pG,YACAj1G,KAAA8P,aAEAu8F,EAAAnmG,SAJA,EAdAmmG,EAAAnmG,OAwBAqnG,EAAAvtG,KAAA80G,UACA90G,KAAA80G,SAAAtpG,GAAA,qBAAAxL,KAAAnB,KAAA,SAAAqH,GACA,GAAAlG,KAAAqL,KAAA0pG,yBAAA,GAEA,GADA7uG,EAAA+mG,kBACAjtG,KAAA2wG,SAAA,OACA3wG,KAAAyd,WAIA82F,EAAA/oG,GAAA,mBAAAxL,KAAAnB,KAAA,SAAAqH,GACAlG,KAAAswG,uBACAtwG,KAAA8P,QAvrDA,SAAAkF,GACAA,EAAAsT,iBACAtT,EAAA++B,2BAsrDAmhE,CAAAhvG,GACAlG,KAAA0d,QACA1d,KAAAu0G,UAAAj4E,YAGAi4E,EAAA/oG,GAAA,YAAAxL,KAAAnB,KAAA,SAAAqH,GAEAlG,KAAAq4B,UAAA2N,SAAA,6BACAhmC,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,kBAGA9iB,KAAA2wG,SACA3wG,KAAA0d,QACiB1d,KAAAswG,sBACjBtwG,KAAAyd,OAGA4uF,EAAAnmG,MAGAs5C,EAAAh0C,GAAA,YAAAxL,KAAAnB,KAAA,WAA2DmB,KAAAmnE,OAAA7qC,WAE3Di4E,EAAA/oG,GAAA,QAAAxL,KAAAnB,KAAA,SAAAqH,GACAmmG,EAAAnmG,MAGAlG,KAAA80G,SAAAtpG,GAAA,QAAAxL,KAAAnB,KAAA,WACAmB,KAAAq4B,UAAA2N,SAAA,6BACAhmC,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,kBAEA9iB,KAAAq4B,UAAA5U,SAAA,+BACiBjY,GAAA,OAAAxL,KAAAnB,KAAA,WACjBmB,KAAA2wG,WACA3wG,KAAAq4B,UAAA8mB,YAAA,4BACAn/C,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,qBAGA9iB,KAAAmnE,OAAA37D,GAAA,QAAAxL,KAAAnB,KAAA,WACAmB,KAAAq4B,UAAA2N,SAAA,6BACAhmC,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,kBAEA9iB,KAAAq4B,UAAA5U,SAAA,+BAGAzjB,KAAA60G,qBACA70G,KAAAqL,KAAAyM,QAAA2L,SAAA,qBACAzjB,KAAAm1G,kBAKArlG,MAAA,SAAAqgG,GACA,IAAAr3F,EAAA9Y,KAAAu0G,UAAAz7F,KAAA,gBACA,GAAAA,EAAA,CACA,IAAAgQ,EAAAvpB,EAAAujB,MAAA,oBAEA,GADA9iB,KAAAqL,KAAAyM,QAAAvK,QAAAub,GACAA,EAAAxF,qBACA,OAEA,IAAA+rF,EAAArvG,KAAA0vG,uBACA1vG,KAAAqL,KAAAyM,QAAAvR,IAAA8oG,IAAA9oG,MAAA,IACAvG,KAAAu0G,UAAA/+F,KAAA,mBAAA88F,QACAtyG,KAAAu0G,UAAA/vE,WAAA,gBACAxkC,KAAAm1G,kBAEA,IAAAhF,IACAnwG,KAAAqL,KAAAyM,QAAAvK,SAA+CoL,KAAA,kBAAApS,IAAAvG,KAAAgM,GAAA8M,GAAAo6F,OAAAp6F,IAC/C9Y,KAAAmwG,eAAwCj9F,QAAA4F,OASxC40F,cAAA,WAEA,GAAA1tG,KAAAo1G,8BACAp1G,KAAAq1G,gBAAA,MACAr1G,KAAA0d,QACA1d,KAAAm1G,qBACa,CACb,IAAAlsG,EAAAjJ,KACAA,KAAAqL,KAAAqiG,cAAAlwG,KAAA,KAAAwC,KAAAqL,KAAAyM,QAAA,SAAAisC,GACAA,IAAAl7C,GAAA,OAAAk7C,IACA96C,EAAAosG,gBAAAtxD,GACA96C,EAAAyU,QACAzU,EAAAksG,sBAMAC,4BAAA,WACA,IAAA/F,EACA,QAAArvG,KAAAyvG,oBACAJ,EAAArvG,KAAA0vG,0BAAA7mG,GAAAwmG,EAAAxuG,KAAA,aACA,KAAAb,KAAAqL,KAAAyM,QAAAvR,OACAvG,KAAAqL,KAAAyM,QAAAvR,QAAAsC,GACA,OAAA7I,KAAAqL,KAAAyM,QAAAvR,QAIAmlG,YAAA,WACA,IAAArgG,EAAArL,KAAA4e,OAAA8sF,YAAAlrG,MAAAR,KAAAE,WACA+I,EAAAjJ,KA8BA,MA5BA,WAAAqL,EAAAyM,QAAA5Z,IAAA,GAAAuZ,QAAAmI,cAEAvU,EAAAqiG,cAAA,SAAA51F,EAAA1M,GACA,IAAA24C,EAAAjsC,EAAAtC,KAAA,UAAAE,OAAA,WAA6E,OAAA1V,KAAA+jD,WAE7E34C,EAAAnC,EAAAklG,aAAApqD,KAEa,SAAA14C,IAEbA,EAAAqiG,cAAAriG,EAAAqiG,eAAA,SAAA51F,EAAA1M,GACA,IAAAY,EAAA8L,EAAAvR,MAEA2R,EAAA,KACA7M,EAAAojG,OACA3jG,QAAA,SAAA0kG,EAAAn6E,EAAArtB,GACA,IAAAstG,EAAAjH,EAAAriG,EAAAX,EAAAW,GAAAhE,IAIA,OAHAstG,IACAp9F,EAAAlQ,GAEAstG,GAEAlqG,SAAA7L,EAAAgL,WAAAa,GAAA,WACAA,EAAA8M,IADA3Y,EAAA4zB,SAOA9nB,GAIAokG,eAAA,WAEA,OAAAzvG,KAAA2V,QACA3V,KAAA0vG,yBAAA7mG,EACAA,EAIA7I,KAAA4e,OAAA6wF,eAAAjvG,MAAAR,KAAAE,YAIAi1G,eAAA,WACA,IAAAlmF,EAAAjvB,KAAAyvG,iBAEA,GAAAzvG,KAAAo1G,+BAAAnmF,IAAApmB,EAAA,CAGA,GAAA7I,KAAA2V,QAAA3V,KAAA0vG,yBAAA7mG,EAAA,OAEA7I,KAAAu0G,UAAA/+F,KAAA,mBAAAskB,KAAA95B,KAAAqL,KAAA8jG,aAAAlgF,IAEAjvB,KAAAu0G,UAAA9wF,SAAA,mBAEAzjB,KAAAq4B,UAAA8mB,YAAA,wBAKAo0D,mBAAA,SAAAz6F,EAAAxC,EAAAi/F,GACA,IAAAxxD,EAAA,EAAA96C,EAAAjJ,KAsBA,GAlBAA,KAAA+yG,2BAAA17B,MAAA,SAAAh6E,EAAAqsD,GACA,GAAA2kD,EAAAplG,EAAA+C,GAAA09C,EAAA5wC,KAAA,iBAAA7P,EAAAoC,KAAAyM,QAAAvR,OAEA,OADAw9C,EAAA1mD,GACA,KAKA,IAAAk4G,KACA,IAAAj/F,GAAAytC,GAAA,EACA/jD,KAAA8yG,UAAA/uD,GAEA/jD,KAAA8yG,UAAA,KAMA,IAAAx8F,EAAA,CACA,IAAAxD,EAAA9S,KAAAqL,KAAA0pG,wBACAjiG,GAAA,GACA9S,KAAAk0G,WAvnDA,SAAAsB,EAAA7qF,GACA,IAAAne,EAAA,EAQA,OAPAjN,EAAAsK,KAAA8gB,EAAA,SAAAttB,EAAAumB,GACAA,EAAAizB,SACArqC,GAAAgpG,EAAA5xF,EAAAizB,UAEArqC,MAGAA,EA8mDAgpG,CAAA18F,EAAA6R,UAAA7X,KAMAohG,WAAA,SAAAN,GACA5zG,KAAA4zG,sBAEA5zG,KAAA4zG,kBAEA5zG,KAAAw/C,SAAAhqC,KAAA,mBAAAowB,YAAA,yBAAAguE,GACA5zG,KAAAw/C,SAAAhqC,KAAA,mBAAAowB,YAAA,qBAAAguE,GAEAr0G,EAAAS,KAAAw/C,SAAAx/C,KAAAq4B,WAAAuN,YAAA,yBAAAguE,KAIAe,SAAA,SAAA77F,EAAApV,GAEA,GAAA1D,KAAAkwG,cAAAp3F,GAAA,CAEA,IAAA3I,EAAAnQ,KAAAqL,KAAAyM,QAAAvR,MACAkvG,EAAAz1G,KAAA8Y,OAEA9Y,KAAAqL,KAAAyM,QAAAvR,IAAAvG,KAAAgM,GAAA8M,IACA9Y,KAAAq1G,gBAAAv8F,GAEA9Y,KAAAqL,KAAAyM,QAAAvK,SAAuCoL,KAAA,mBAAApS,IAAAvG,KAAAgM,GAAA8M,GAAAo6F,OAAAp6F,IAEvC9Y,KAAAiuG,eAAAjuG,KAAAqL,KAAA4iG,eAAAn1F,EAAA9Y,KAAAmnE,OAAA5gE,OACAvG,KAAA0d,QAEAha,KAAA2uG,SACAryG,KAAA80G,SAAAx4E,QAEA+xE,EAAAl+F,EAAAnQ,KAAAgM,GAAA8M,KAA6C9Y,KAAAmwG,eAAqB/8F,MAAA0F,EAAA5F,QAAAuiG,MAIlEJ,gBAAA,SAAAv8F,GAEA,IAAAi2F,EAAA2G,EAAAr9E,EAAAr4B,KAAAu0G,UAAA/+F,KAAA,mBAEAxV,KAAAu0G,UAAAz7F,KAAA,eAAAA,GAEAuf,EAAAi6E,QACA,OAAAx5F,IACAi2F,EAAA/uG,KAAAqL,KAAAsqG,gBAAA78F,EAAAuf,EAAAr4B,KAAAqL,KAAA8jG,eAEAJ,IAAAlmG,GACAwvB,EAAA4d,OAAA84D,IAEA2G,EAAA11G,KAAAqL,KAAAuqG,wBAAA98F,EAAAuf,MACAxvB,GACAwvB,EAAA5U,SAAAiyF,GAGA11G,KAAAu0G,UAAAp1D,YAAA,mBAEAn/C,KAAAqL,KAAA4pG,YAAAj1G,KAAAyvG,mBAAA5mG,GACA7I,KAAAq4B,UAAA5U,SAAA,uBAKAld,IAAA,WACA,IAAAA,EACA4pG,GAAA,EACAr3F,EAAA,KACA7P,EAAAjJ,KACAy1G,EAAAz1G,KAAA8Y,OAEA,OAAA5Y,UAAAC,OACA,OAAAH,KAAAqL,KAAAyM,QAAAvR,MASA,GANAA,EAAArG,UAAA,GAEAA,UAAAC,OAAA,IACAgwG,EAAAjwG,UAAA,IAGAF,KAAA2V,OACA3V,KAAA2V,OACApP,OACAiP,KAAA,UAAAE,OAAA,WAAuD,OAAA1V,KAAA+jD,WAAuBszB,MAAA,SAAAh6E,EAAAqsD,GAE9E,OADA5wC,EAAA7P,EAAAklG,aAAAzkD,IACA,IAEA1pD,KAAAq1G,gBAAAv8F,GACA9Y,KAAAm1G,iBACAhF,GACAnwG,KAAAmwG,eAAwC/8F,MAAA0F,EAAA5F,QAAAuiG,QAE3B,CAEb,IAAAlvG,GAAA,IAAAA,EAEA,YADAvG,KAAA8P,MAAAqgG,GAGA,GAAAnwG,KAAAqL,KAAAqiG,gBAAA7kG,EACA,UAAA9E,MAAA,uDAEA/D,KAAAqL,KAAAyM,QAAAvR,OACAvG,KAAAqL,KAAAqiG,cAAA1tG,KAAAqL,KAAAyM,QAAA,SAAAgB,GACA7P,EAAAoC,KAAAyM,QAAAvR,IAAAuS,EAAA7P,EAAA+C,GAAA8M,GAAA,IACA7P,EAAAosG,gBAAAv8F,GACA7P,EAAAksG,iBACAhF,GACAlnG,EAAAknG,eAA4C/8F,MAAA0F,EAAA5F,QAAAuiG,QAO5ClD,YAAA,WACAvyG,KAAAmnE,OAAA5gE,IAAA,IACAvG,KAAA80G,SAAAvuG,IAAA,KAIAuS,KAAA,SAAAxa,GACA,IAAAwa,EACAq3F,GAAA,EAEA,OAAAjwG,UAAAC,OAGA,OAFA2Y,EAAA9Y,KAAAu0G,UAAAz7F,KAAA,kBACAjQ,IAAAiQ,EAAA,MACAA,EAEA5Y,UAAAC,OAAA,IACAgwG,EAAAjwG,UAAA,IAEA5B,GAGAwa,EAAA9Y,KAAA8Y,OACA9Y,KAAAqL,KAAAyM,QAAAvR,IAAAjI,EAAA0B,KAAAgM,GAAA1N,GAAA,IACA0B,KAAAq1G,gBAAA/2G,GACA6xG,GACAnwG,KAAAmwG,eAA4C/8F,MAAA9U,EAAA4U,QAAA4F,KAN5C9Y,KAAA8P,MAAAqgG,MAaA14B,EAAAg0B,EAAAl0B,GAGAo0B,gBAAA,WAaA,OAZApsG,EAAAwH,SAAAyR,cAAA,QAAA7R,MACAgkD,MAAA,8CACa7wB,MACb,+BACA,sCACA,6HACA,UACA,QACA,qEACA,kCACA,WACA,UAAA5F,KAAA,MAKAw3E,YAAA,WACA,IAAArgG,EAAArL,KAAA4e,OAAA8sF,YAAAlrG,MAAAR,KAAAE,WACA+I,EAAAjJ,KAoDA,MAhDA,WAAAqL,EAAAyM,QAAA5Z,IAAA,GAAAuZ,QAAAmI,cAEAvU,EAAAqiG,cAAA,SAAA51F,EAAA1M,GAEA,IAAA0N,KAEAhB,EAAAtC,KAAA,UAAAE,OAAA,WAA8D,OAAA1V,KAAA+jD,WAAuBszB,MAAA,SAAAh6E,EAAAqsD,GACrF5wC,EAAAvU,KAAA0E,EAAAklG,aAAAzkD,MAEAt+C,EAAA0N,IAEa,SAAAzN,IAEbA,EAAAqiG,cAAAriG,EAAAqiG,eAAA,SAAA51F,EAAA1M,GACA,IAAAyB,EAAAgjG,EAAA/3F,EAAAvR,MAAA8E,EAAAykG,WAEAhpG,KACAuE,EAAAojG,OACA3jG,QAAA,SAAA0kG,EAAAn6E,EAAArtB,GACA,IAAAstG,EAAA/1G,EAAAs2G,KAAAhpG,EAAA,SAAAb,GACA,OAAAqiG,EAAAriG,EAAAX,EAAAW,GAAAhE,MAC6B7H,OAI7B,OAHAm1G,GACAxuG,EAAAvC,KAAAyD,GAEAstG,GAEAlqG,SAAA7L,EAAAgL,WAAAa,GAAA,WAIA,IADA,IAAA0qG,KACAz4G,EAAA,EAA2CA,EAAAwP,EAAA1M,OAAgB9C,IAE3D,IADA,IAAA2O,EAAAa,EAAAxP,GACA0P,EAAA,EAA+CA,EAAAjG,EAAA3G,OAAoB4M,IAAA,CACnE,IAAAmL,EAAApR,EAAAiG,GACA,GAAAshG,EAAAriG,EAAAX,EAAAW,GAAAkM,IAAA,CACA49F,EAAAvxG,KAAA2T,GACApR,EAAA4L,OAAA3F,EAAA,GACA,OAIA3B,EAAA0qG,IAfAv2G,EAAA4zB,SAqBA9nB,GAIA0qG,aAAA,SAAA7C,GAEA,IAAAnvD,EAAA/jD,KAAAq4B,UAAA7iB,KAAA,gCACAuuC,EAAA5jD,QAAA+yG,KAAA,IAAAnvD,EAAA,KAGAA,EAAA5jD,QACAH,KAAAqL,KAAAyM,QAAAvK,QAAA,oBAAAw2C,GAEAA,EAAA5E,YAAA,+BACA+zD,KAAA/yG,SACAH,KAAA0d,QACAw1F,EAAAzvF,SAAA,+BACAzjB,KAAAqL,KAAAyM,QAAAvK,QAAA,kBAAA2lG,MAMAhiG,QAAA,WACA3R,EAAA,cAAAS,KAAAmnE,OAAAxgE,KAAA,YACAA,KAAA,MAAA3G,KAAAqL,KAAAyM,QAAAnR,KAAA,OACA3G,KAAA4e,OAAA1N,QAAA1Q,MAAAR,KAAAE,YAIAusG,cAAA,WAEA,IAAA8H,EAAA/uG,EAAA,mBAEAxF,KAAAg2G,gBAAAh2G,KAAAq4B,UAAA7iB,KAAA,yBACAxV,KAAAu0G,YAAAv0G,KAAAq4B,UAAA7iB,KAAAhQ,GAEA,IAAAylE,EAAAjrE,KACAA,KAAAu0G,UAAA/oG,GAAA,+DAAAtF,GAEA+kE,EAAA9D,OAAA,GAAA7qC,QACA2uC,EAAA8qC,aAAAx2G,EAAAS,SAIAA,KAAAmnE,OAAAxgE,KAAA,oBAAA+wE,KACAn4E,EAAA,cAAAS,KAAAqL,KAAAyM,QAAAnR,KAAA,YACAA,KAAA,MAAA3G,KAAAmnE,OAAAxgE,KAAA,OAEA3G,KAAAmnE,OAAA37D,GAAA,cAAAxL,KAAAnB,KAAA,WACAmB,KAAAswG,uBACAtwG,KAAA2wG,UACA3wG,KAAAyd,WAIAzd,KAAAmnE,OAAAxgE,KAAA,WAAA3G,KAAAosG,iBAEApsG,KAAAi2G,SAAA,EACAj2G,KAAAmnE,OAAA37D,GAAA,UAAAxL,KAAAnB,KAAA,SAAAqH,GACA,GAAAlG,KAAAswG,qBAAA,GAEAtwG,KAAAi2G,SACA,IAAAlyD,EAAAwwD,EAAA/+F,KAAA,gCACA7F,EAAAo0C,EAAAp0C,KAAA,+CACAw3B,EAAA4c,EAAA5c,KAAA,+CACAqrC,EAjrEA,SAAAxqE,GAEA,IAAAwtB,EAAA,EACAr1B,EAAA,EACA,sBAHA6H,EAAAzI,EAAAyI,GAAA,IAIAwtB,EAAAxtB,EAAAkuG,eACA/1G,EAAA6H,EAAAmuG,aAAA3gF,OACS,iBAAAzuB,SAAA,CACTiB,EAAAs0B,QACA,IAAA85E,EAAArvG,SAAAwtG,UAAAr1C,cACA/+D,EAAA4G,SAAAwtG,UAAAr1C,cAAA7pC,KAAAl1B,OACAi2G,EAAAC,UAAA,aAAAruG,EAAA1J,MAAA6B,QACAq1B,EAAA4gF,EAAA/gF,KAAAl1B,SAEA,OAAgBq1B,SAAAr1B,UAmqEhBm2G,CAAAt2G,KAAAmnE,QAEA,GAAApjB,EAAA5jD,SACA+F,EAAA02B,OAAAk7C,EAAA11E,MAAA8D,EAAA02B,OAAAk7C,EAAA/0E,OAAAmD,EAAA02B,OAAAk7C,EAAAz2E,WAAA6E,EAAA02B,OAAAk7C,EAAAj2E,QAAAqE,EAAA02B,OAAAk7C,EAAA91E,OAAA,CACA,IAAAu0G,EAAAxyD,EAwBA,OAvBA79C,EAAA02B,OAAAk7C,EAAA11E,MAAAuN,EAAAxP,OACAo2G,EAAA5mG,EAEAzJ,EAAA02B,OAAAk7C,EAAA/0E,MACAwzG,EAAApvE,EAAAhnC,OAAAgnC,EAAA,KAEAjhC,EAAA02B,QAAAk7C,EAAAz2E,WACArB,KAAAw2G,SAAAzyD,EAAArvC,SACA1U,KAAAmnE,OAAApjD,MAAA,IACAwyF,EAAA5mG,EAAAxP,OAAAwP,EAAAw3B,GACqBjhC,EAAA02B,OAAAk7C,EAAAj2E,QACrB7B,KAAAw2G,SAAAzyD,EAAArvC,SACA1U,KAAAmnE,OAAApjD,MAAA,IACAwyF,EAAApvE,EAAAhnC,OAAAgnC,EAAA,MACqBjhC,EAAA02B,OAAAk7C,EAAA91E,QACrBu0G,EAAA,MAGAv2G,KAAA+1G,aAAAQ,GACAlK,EAAAnmG,QACAqwG,KAAAp2G,QACAH,KAAAyd,QAGiB,IAAAvX,EAAA02B,QAAAk7C,EAAAz2E,WAAA,GAAArB,KAAAi2G,UACjB/vG,EAAA02B,OAAAk7C,EAAA11E,OAAA,GAAAowE,EAAAh9C,SAAAg9C,EAAAryE,OAIA,OAFAH,KAAA+1G,aAAAxB,EAAA/+F,KAAA,+CAAAiB,aACA41F,EAAAnmG,GAMA,GAHAlG,KAAA+1G,aAAA,MAGA/1G,KAAA2wG,SACA,OAAAzqG,EAAA02B,OACA,KAAAk7C,EAAA30E,GACA,KAAA20E,EAAAh2E,KAGA,OAFA9B,KAAAgzG,cAAA9sG,EAAA02B,QAAAk7C,EAAA30E,IAAA,UACAkpG,EAAAnmG,GAEA,KAAA4xE,EAAA91E,MAGA,OAFAhC,KAAAytG,yBACApB,EAAAnmG,GAEA,KAAA4xE,EAAA50E,IAGA,OAFAlD,KAAAytG,mBAAoD4E,SAAA,SACpDryG,KAAA0d,QAEA,KAAAo6D,EAAAC,IAGA,OAFA/3E,KAAAkwB,OAAAhqB,QACAmmG,EAAAnmG,GAKA,GAAAA,EAAA02B,QAAAk7C,EAAA50E,MAAA40E,EAAAK,UAAAjyE,KAAA4xE,EAAAM,cAAAlyE,IACAA,EAAA02B,QAAAk7C,EAAAz2E,WAAA6E,EAAA02B,QAAAk7C,EAAAC,IADA,CAKA,GAAA7xE,EAAA02B,QAAAk7C,EAAA91E,MAAA,CACA,QAAAhC,KAAAqL,KAAA2pG,YACA,OACqB,GAAA9uG,EAAAgvC,QAAAhvC,EAAAivC,SAAAjvC,EAAAmvC,UAAAnvC,EAAAkvC,QACrB,OAIAp1C,KAAAyd,OAEAvX,EAAA02B,QAAAk7C,EAAAj1E,SAAAqD,EAAA02B,QAAAk7C,EAAAl1E,WAEAypG,EAAAnmG,GAGAA,EAAA02B,QAAAk7C,EAAA91E,OAEAqqG,EAAAnmG,QAKAlG,KAAAmnE,OAAA37D,GAAA,QAAAxL,KAAAnB,KAAA,SAAAqH,GACAlG,KAAAi2G,SAAA,EACAj2G,KAAAy2G,kBAIAz2G,KAAAmnE,OAAA37D,GAAA,OAAAxL,KAAAnB,KAAA,SAAAqH,GACAlG,KAAAq4B,UAAA8mB,YAAA,4BACAn/C,KAAAmnE,OAAAhoB,YAAA,mBACAn/C,KAAA+1G,aAAA,MACA/1G,KAAA2wG,UAAA3wG,KAAAuyG,cACArsG,EAAA6tC,2BACA/zC,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,oBAGA9iB,KAAAq4B,UAAA7sB,GAAA,QAAAhG,EAAAxF,KAAAnB,KAAA,SAAAqH,GACAlG,KAAAswG,uBACA/wG,EAAA2G,EAAAsiB,QAAArB,QAAA,0BAAAhnB,OAAA,IAIAH,KAAA+1G,aAAA,MACA/1G,KAAA02G,mBACA12G,KAAAq4B,UAAA2N,SAAA,6BACAhmC,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,kBAEA9iB,KAAAyd,OACAzd,KAAAw0G,cACAtuG,EAAAoiB,sBAGAtoB,KAAAq4B,UAAA7sB,GAAA,QAAAhG,EAAAxF,KAAAnB,KAAA,WACAmB,KAAAswG,uBACAtwG,KAAAq4B,UAAA2N,SAAA,6BACAhmC,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,kBAEA9iB,KAAAq4B,UAAA5U,SAAA,4BACAzjB,KAAAw/C,SAAA/7B,SAAA,uBACAzjB,KAAA02G,uBAGA12G,KAAA60G,qBACA70G,KAAAqL,KAAAyM,QAAA2L,SAAA,qBAGAzjB,KAAAuyG,eAIA/B,gBAAA,WACAxwG,KAAA4e,OAAA4xF,gBAAAhwG,MAAAR,KAAAE,YACAF,KAAAmnE,OAAAtmE,KAAA,YAAAb,KAAAswG,uBAKA5C,cAAA,WAQA,GANA,KAAA1tG,KAAAqL,KAAAyM,QAAAvR,OAAA,KAAAvG,KAAAqL,KAAAyM,QAAAud,SACAr1B,KAAAq1G,oBACAr1G,KAAA0d,QAEA1d,KAAAuyG,eAEAvyG,KAAA2V,QAAA,KAAA3V,KAAAqL,KAAAyM,QAAAvR,MAAA,CACA,IAAA0C,EAAAjJ,KACAA,KAAAqL,KAAAqiG,cAAAlwG,KAAA,KAAAwC,KAAAqL,KAAAyM,QAAA,SAAAgB,GACAA,IAAAjQ,GAAA,OAAAiQ,IACA7P,EAAAosG,gBAAAv8F,GACA7P,EAAAyU,QAEAzU,EAAAspG,mBAOAA,YAAA,WACA,IAAAtjF,EAAAjvB,KAAAyvG,iBACAkH,EAAA32G,KAAA42G,oBAEA3nF,IAAApmB,GAAA,IAAA7I,KAAA62G,SAAA12G,SAAA,IAAAH,KAAAmnE,OAAAnhC,SAAA,oBACAhmC,KAAAmnE,OAAA5gE,IAAA0oB,GAAAxL,SAAA,mBAGAzjB,KAAAmnE,OAAApjD,MAAA4yF,EAAA,EAAAA,EAAA32G,KAAAq4B,UAAA9vB,IAAA,WAEAvI,KAAAmnE,OAAA5gE,IAAA,IAAAwd,MAAA,KAKA2yF,iBAAA,WACA12G,KAAAmnE,OAAAnhC,SAAA,oBACAhmC,KAAAmnE,OAAA5gE,IAAA,IAAA44C,YAAA,oBAKA4yD,QAAA,WACA/xG,KAAA02G,mBACA12G,KAAAy2G,eAEAz2G,KAAA4e,OAAAmzF,QAAAvxG,MAAAR,KAAAE,WAEAF,KAAAw0G,cAEAx0G,KAAAwtG,eAAA,GACAxtG,KAAAmnE,OAAA7qC,QACAt8B,KAAAqL,KAAAyM,QAAAvK,QAAAhO,EAAAujB,MAAA,kBAIApF,MAAA,WACA1d,KAAA2wG,UACA3wG,KAAA4e,OAAAlB,MAAAld,MAAAR,KAAAE,YAIAo8B,MAAA,WACAt8B,KAAA0d,QACA1d,KAAAmnE,OAAA7qC,SAIA+4C,UAAA,WACA,OAAAr1E,KAAAmnE,OAAAnhC,SAAA,oBAIAqvE,gBAAA,SAAAv8F,GACA,IAAAjM,KAAAkrB,KAAA9uB,EAAAjJ,KAGAT,EAAAuZ,GAAAjP,KAAA,WACAvF,EAAA2E,EAAA+C,GAAAhM,MAAA6M,GAAA,IACAA,EAAAtI,KAAA0E,EAAA+C,GAAAhM,OACA+3B,EAAAxzB,KAAAvE,SAGA8Y,EAAAif,EAEA/3B,KAAAu0G,UAAA/+F,KAAA,0BAAAjD,SACAhT,EAAAuZ,GAAAjP,KAAA,WACAZ,EAAA6tG,kBAAA92G,QAEAiJ,EAAAsqG,sBAIAE,SAAA,WACA,IAAAhnF,EAAAzsB,KAAAmnE,OAAA5gE,MAEA,OADAkmB,EAAAzsB,KAAAqL,KAAA0rG,UAAAv5G,KAAAwC,KAAAysB,EAAAzsB,KAAA8Y,OAAA9Y,KAAAnB,KAAAmB,KAAA20G,UAAA30G,KAAAqL,QACAohB,GAAA5jB,IACA7I,KAAAmnE,OAAA5gE,IAAAkmB,GACAA,EAAAtsB,OAAA,GACAH,KAAAyd,SAOAk3F,SAAA,SAAA77F,EAAApV,GAEA1D,KAAAkwG,cAAAp3F,KAEA9Y,KAAA82G,kBAAAh+F,GAEA9Y,KAAAqL,KAAAyM,QAAAvK,SAAuCoL,KAAA,WAAApS,IAAAvG,KAAAgM,GAAA8M,GAAAo6F,OAAAp6F,KAEvC9Y,KAAA2V,QAAA3V,KAAAqL,KAAA2rG,eAAAh3G,KAAAuzG,mBAAAz6F,GAAA,OAAA9Y,KAAAqL,KAAA2rG,eAEAh3G,KAAAqL,KAAA2rG,eACAh3G,KAAA0d,QACA1d,KAAAmnE,OAAApjD,MAAA,KAEA/jB,KAAAozG,yBAAA,GACApzG,KAAAmnE,OAAApjD,MAAA,IACA/jB,KAAAy2G,eACAz2G,KAAAyyG,0BAAA,GAAAzyG,KAAAuG,MAAApG,QAAAH,KAAAyyG,2BAGAzyG,KAAAwtG,eAAA,GAEAxtG,KAAA4wG,qBAGA5wG,KAAA0d,QACA1d,KAAAmnE,OAAApjD,MAAA,KAMA/jB,KAAAmwG,eAAgC/8F,MAAA0F,IAEhCpV,KAAA2uG,SACAryG,KAAAw0G,gBAIAtkF,OAAA,WACAlwB,KAAA0d,QACA1d,KAAAw0G,eAGAsC,kBAAA,SAAAh+F,GACA,IAaAi2F,EACA2G,EAdAuB,GAAAn+F,EAAAs1F,OACA8I,EAAA33G,EACA,gIAIA43G,EAAA53G,EACA,qEAGA2zG,EAAA+D,EAAAC,EAAAC,EACAnrG,EAAAhM,KAAAgM,GAAA8M,GACAvS,EAAAvG,KAAA62G,UAIA9H,EAAA/uG,KAAAqL,KAAAsqG,gBAAA78F,EAAAo6F,EAAA19F,KAAA,OAAAxV,KAAAqL,KAAA8jG,gBACAtmG,GACAqqG,EAAA19F,KAAA,OAAA4hG,YAAA,QAAArI,EAAA,WAEA2G,EAAA11G,KAAAqL,KAAAuqG,wBAAA98F,EAAAo6F,EAAA19F,KAAA,UACA3M,GACAqqG,EAAAzvF,SAAAiyF,GAGAuB,GACA/D,EAAA19F,KAAA,gCACAhK,GAAA,YAAA6gG,GACA7gG,GAAA,iBAAAxL,KAAAnB,KAAA,SAAAqH,GACAlG,KAAAswG,uBAEA/wG,EAAA2G,EAAAsiB,QAAArB,QAAA,0BAAAqnD,QAAA,OAAAxuE,KAAAnB,KAAA,WACAmB,KAAAw2G,SAAAj3G,EAAA2G,EAAAsiB,SACAxoB,KAAAu0G,UAAA/+F,KAAA,gCAAA2pC,YAAA,+BACAn/C,KAAA0d,QACA1d,KAAAw0G,iBACyB6C,UACzBhL,EAAAnmG,OACqBsF,GAAA,QAAAxL,KAAAnB,KAAA,WACrBmB,KAAAswG,uBACAtwG,KAAAq4B,UAAA5U,SAAA,4BACAzjB,KAAAw/C,SAAA/7B,SAAA,2BAIAyvF,EAAAp6F,KAAA,eAAAA,GACAo6F,EAAA51F,aAAAtd,KAAAg2G,iBAEAzvG,EAAAhC,KAAAyH,GACAhM,KAAAs3G,OAAA/wG,IAIAiwG,SAAA,SAAAzyD,GACA,IACAjrC,EACA5E,EAFA3N,EAAAvG,KAAA62G,SAKA,QAFA9yD,IAAA58B,QAAA,2BAEAhnB,OACA,0BAAA4jD,EAAA,mCAKA,GAFAjrC,EAAAirC,EAAAjrC,KAAA,gBAEA,CAMA,MAAA5E,EAAA5P,EAAAtE,KAAAgM,GAAA8M,GAAAvS,KAAA,GACAA,EAAAmM,OAAAwB,EAAA,GACAlU,KAAAs3G,OAAA/wG,GACAvG,KAAA2V,QAAA3V,KAAAuzG,qBAGA,IAAAzqF,EAAAvpB,EAAAujB,MAAA,oBACAgG,EAAAviB,IAAAvG,KAAAgM,GAAA8M,GACAgQ,EAAAoqF,OAAAp6F,EACA9Y,KAAAqL,KAAAyM,QAAAvK,QAAAub,GAEAA,EAAAxF,uBAIAygC,EAAAxxC,SAEAvS,KAAAqL,KAAAyM,QAAAvK,SAAuCoL,KAAA,kBAAApS,IAAAvG,KAAAgM,GAAA8M,GAAAo6F,OAAAp6F,IACvC9Y,KAAAmwG,eAAgCj9F,QAAA4F,OAIhCy6F,mBAAA,SAAAz6F,EAAAxC,EAAAi/F,GACA,IAAAhvG,EAAAvG,KAAA62G,SACA5D,EAAAjzG,KAAA2qB,QAAAnV,KAAA,mBACAq5F,EAAA7uG,KAAA2qB,QAAAnV,KAAA,iCACAvM,EAAAjJ,KAEAizG,EAAA57B,MAAA,SAAAh6E,EAAA61G,GAEA5uG,EADA2E,EAAA+C,GAAAknG,EAAAp6F,KAAA,iBACAvS,IAAA,IACA2sG,EAAAzvF,SAAA,oBAEAyvF,EAAA19F,KAAA,8BAAAiO,SAAA,uBAIAorF,EAAAx3B,MAAA,SAAAh6E,EAAA61G,GAEAA,EAAAhuF,GAAA,+BACA,IAAAguF,EAAA19F,KAAA,qDAAArV,QACA+yG,EAAAzvF,SAAA,uBAIA,GAAAzjB,KAAA8yG,cAAA,IAAAyC,GACAtsG,EAAA6pG,UAAA,IAIA9yG,KAAAqL,KAAAukG,qBAAAqD,EAAAv9F,OAAA,0CAAAvV,OAAA,KACA2Y,SAAAy2F,MAAA,IAAAvvG,KAAA2qB,QAAAnV,KAAA,uBAAArV,SACA2zG,EAAA7qG,EAAAoC,KAAAgpG,gBAAA,oBACAr0G,KAAA2qB,QAAAsrB,OAAA,kCAAAhtC,EAAAoC,KAAAgpG,gBAAAprG,EAAAk+D,OAAA5gE,OAAA,UAQAqwG,kBAAA,WACA,OAAA52G,KAAAu0G,UAAAxwF,QAAAwzF,EAAAv3G,KAAAmnE,SAIAsvC,aAAA,WACA,IAAAe,EAAAzrF,EAAA4qF,EAAAc,EACAC,EAAAH,EAAAv3G,KAAAmnE,QAEAqwC,EA7kFA,SAAAtxG,GACA,IAAAyxE,EAAA,CACA,IAAA16D,EAAA/W,EAAA,GAAAyxG,cAAA36G,OAAAslB,iBAAApc,EAAA,UACAyxE,EAAAp4E,EAAAwH,SAAAyR,cAAA,QAAAjQ,KACA2mB,SAAA,WACAnD,KAAA,WACAnL,IAAA,WACA1D,QAAA,OACA06F,SAAA36F,EAAA26F,SACAC,WAAA56F,EAAA46F,WACAC,UAAA76F,EAAA66F,UACAC,WAAA96F,EAAA86F,WACAC,cAAA/6F,EAAA+6F,cACAC,cAAAh7F,EAAAg7F,cACAC,WAAA,YAEAvxG,KAAA,yBACApH,EAAA,QAAA02C,OAAA0hC,GAGA,OADAA,EAAAtiD,KAAAnvB,EAAAK,OACAoxE,EAAA5zD,QAyjFAo0F,CAAAn4G,KAAAmnE,QAAA,GAEAp7C,EAAA/rB,KAAAmnE,OAAA3xC,SAAAzJ,MAKA0rF,GAHAd,EAAA32G,KAAAu0G,UAAAxwF,UAGAgI,EAFA/rB,KAAAu0G,UAAA/+E,SAAAzJ,MAEA2rF,GAEAF,IACAC,EAAAd,EAAAe,GAGAD,EAAA,KACAA,EAAAd,EAAAe,GAGAD,GAAA,IACAA,EAAAD,GAGAx3G,KAAAmnE,OAAApjD,MAAAvW,KAAAygB,MAAAwpF,KAIAZ,OAAA,WACA,IAAAtwG,EACA,OAAAvG,KAAA2V,OAEA,QADApP,EAAAvG,KAAA2V,OAAApP,UACAA,EAGAspG,EADAtpG,EAAAvG,KAAAqL,KAAAyM,QAAAvR,MACAvG,KAAAqL,KAAAykG,YAKAwH,OAAA,SAAA/wG,GACA,IAAA2mB,EACAltB,KAAA2V,OACA3V,KAAA2V,OAAApP,QAEA2mB,KAEA3tB,EAAAgH,GAAAsD,KAAA,WACAvF,EAAAtE,KAAAktB,GAAA,GAAAA,EAAA3oB,KAAAvE,QAEAA,KAAAqL,KAAAyM,QAAAvR,IAAA,IAAA2mB,EAAA/sB,OAAA,GAAA+sB,EAAAgH,KAAAl0B,KAAAqL,KAAAykG,cAKAsI,mBAAA,SAAAjoG,EAAAT,GACAA,IAAArG,MAAA,GACA8G,IAAA9G,MAAA,GAGA,IAJA,IAIAhM,EAAA,EAA2BA,EAAAqS,EAAAvP,OAAoB9C,IAC/C,QAAA0P,EAAA,EAA+BA,EAAAoD,EAAAhQ,OAAgB4M,IAC/CshG,EAAAruG,KAAAqL,KAAAW,GAAA0D,EAAArS,IAAA2C,KAAAqL,KAAAW,GAAAmE,EAAApD,OACA2C,EAAAgD,OAAArV,EAAA,GACAA,EAAA,GACAA,IAEA8S,EAAAuC,OAAA3F,EAAA,GACAA,KAKA,OAAoBqG,MAAA1D,EAAAwD,QAAA/C,IAKpB5J,IAAA,SAAAA,EAAA4pG,GACA,IAAAsF,EAAAxsG,EAAAjJ,KAEA,OAAAE,UAAAC,OACA,OAAAH,KAAA62G,SAOA,IAJApB,EAAAz1G,KAAA8Y,QACA3Y,SAAAs1G,OAGAlvG,GAAA,IAAAA,EAOA,OANAvG,KAAAqL,KAAAyM,QAAAvR,IAAA,IACAvG,KAAAq1G,oBACAr1G,KAAAuyG,mBACApC,GACAnwG,KAAAmwG,eAAwC/8F,MAAApT,KAAA8Y,OAAA5F,QAAAuiG,KAQxC,GAFAz1G,KAAAs3G,OAAA/wG,GAEAvG,KAAA2V,OACA3V,KAAAqL,KAAAqiG,cAAA1tG,KAAA2V,OAAA3V,KAAAnB,KAAAmB,KAAAq1G,kBACAlF,GACAnwG,KAAAmwG,cAAAnwG,KAAAo4G,mBAAA3C,EAAAz1G,KAAA8Y,aAEa,CACb,GAAA9Y,KAAAqL,KAAAqiG,gBAAA7kG,EACA,UAAA9E,MAAA,4DAGA/D,KAAAqL,KAAAqiG,cAAA1tG,KAAAqL,KAAAyM,QAAA,SAAAgB,GACA,IAAAjM,EAAAtN,EAAA8N,IAAAyL,EAAA7P,EAAA+C,IACA/C,EAAAquG,OAAAzqG,GACA5D,EAAAosG,gBAAAv8F,GACA7P,EAAAspG,cACApC,GACAlnG,EAAAknG,cAAAlnG,EAAAmvG,mBAAA3C,EAAAxsG,EAAA6P,WAIA9Y,KAAAuyG,eAIA8F,YAAA,WACA,GAAAr4G,KAAA2V,OACA,UAAA5R,MAAA,6GAIA/D,KAAAmnE,OAAApjD,MAAA,GAEA/jB,KAAAg2G,gBAAA7xF,QAIAm0F,UAAA,WAEA,IAAA/xG,KAAA0C,EAAAjJ,KAGAA,KAAAg2G,gBAAAhyF,OAEAhkB,KAAAg2G,gBAAA7wF,SAAAnlB,KAAAg2G,gBAAAp3F,UAEA5e,KAAAy2G,eAGAz2G,KAAAu0G,UAAA/+F,KAAA,0BAAA3L,KAAA,WACAtD,EAAAhC,KAAA0E,EAAAoC,KAAAW,GAAAzM,EAAAS,MAAA8Y,KAAA,oBAEA9Y,KAAAs3G,OAAA/wG,GACAvG,KAAAmwG,iBAIAr3F,KAAA,SAAApH,EAAAy+F,GACA,IAAAtjG,EAAAsD,EAAAlH,EAAAjJ,KACA,OAAAE,UAAAC,OACA,OAAAH,KAAAu0G,UACA/+F,KAAA,0BACAnI,IAAA,WAAqC,OAAA9N,EAAAS,MAAA8Y,KAAA,kBACrC5a,MAEAiS,EAAAnQ,KAAA8Y,OACApH,IAA8BA,MAC9B7E,EAAAtN,EAAA8N,IAAAqE,EAAA,SAAAxL,GAAiD,OAAA+C,EAAAoC,KAAAW,GAAA9F,KACjDlG,KAAAs3G,OAAAzqG,GACA7M,KAAAq1G,gBAAA3jG,GACA1R,KAAAuyG,cACApC,GACAnwG,KAAAmwG,cAAAnwG,KAAAo4G,mBAAAjoG,EAAAnQ,KAAA8Y,YAMAvZ,EAAAmG,GAAAkxE,QAAA,WAEA,IACAvrE,EACAurE,EACA9sE,EAAAxL,EAAAsxE,EAHAzlE,EAAA9J,MAAApB,UAAAoK,MAAA7L,KAAA0C,UAAA,GAIAq4G,GAAA,+KACAC,GAAA,6CACAC,GAAA,cACAC,GAA0BvxC,OAAA,kBA6C1B,OA3CAnnE,KAAA6J,KAAA,WACA,OAAAM,EAAAhK,QAAA,iBAAAgK,EAAA,IACAkB,EAAA,IAAAlB,EAAAhK,UAA6CZ,EAAAgG,UAAc4E,EAAA,KAC3D2N,QAAAvY,EAAAS,MAEA,WAAAqL,EAAAyM,QAAA5Z,IAAA,GAAAuZ,QAAAmI,cACAgwD,EAAAvkE,EAAAyM,QAAAjX,KAAA,aAEA+uE,EAAAvkE,EAAAukE,WAAA,EACA,SAAAvkE,IAAyCA,EAAAukE,YAAA,KAGzCgH,EAAAhH,EAAA,IAAA6H,EAAA,IAAAD,GACAx3C,KAAA30B,OACa,qBAAAlB,EAAA,GA0Bb,6CAAAA,EAxBA,GAAA7F,EAAA6F,EAAA,GAAAouG,GAAA,EACA,wBAAApuG,EAAA,GAKA,GAFA7L,EAAAuK,GACA+tE,EAAAr3E,EAAAS,MAAA8Y,KAAA,cACAjQ,EAAA,OAaA,GATA,eAFAiB,EAAAK,EAAA,IAGA7L,EAAAs4E,EAAAv+C,UACiB,aAAAvuB,EACjBxL,EAAAs4E,EAAAp3B,UAEAk5D,EAAA5uG,OAAA4uG,EAAA5uG,IAEAxL,EAAAs4E,EAAA9sE,GAAAtJ,MAAAo2E,EAAAzsE,EAAAd,MAAA,KAEA/E,EAAA6F,EAAA,GAAAquG,IAAA,GACAl0G,EAAA6F,EAAA,GAAAsuG,IAAA,GAAAtuG,EAAAhK,OACA,YAMA7B,IAAAuK,EAAA7I,KAAA1B,GAIAiB,EAAAmG,GAAAkxE,QAAAnoE,UACAsV,MAAA,OACAuvF,gBAAA,EACA0D,eAAA,EACAhC,aAAA,EACA7I,gBACAyF,eACAz6B,kBAAA,GACAC,iBAAA,GACA83B,aAAA,SAAAxgG,EAAA2pB,EAAAo2E,EAAAU,GACA,IAAAwJ,KAEA,OADAC,EAAAlqG,EAAA2mB,KAAAo5E,EAAAe,KAAAmJ,EAAAxJ,GACAwJ,EAAAzkF,KAAA,KAEAyhF,gBAAA,SAAA78F,EAAAuf,EAAA82E,GACA,OAAAr2F,EAAAq2F,EAAAr2F,EAAAuc,MAAAxsB,GAEAmmG,YAAA,SAAArkF,EAAA0N,EAAAo2E,GACA,OAAA9jF,GAEAskF,qBAAA,SAAAn2F,GAA8C,OAAAjQ,GAC9C+sG,wBAAA,SAAA98F,EAAAuf,GAA4D,OAAAxvB,GAC5DwrG,gBAAA,WAAsC,0BACtCJ,oBAAA,SAAAxnF,EAAA3Z,GAAoD,IAAAhU,EAAAgU,EAAA2Z,EAAAtsB,OAA4B,sBAAArB,EAAA,sBAAAA,EAAA,SAChFq1G,mBAAA,SAAA1nF,EAAAhf,GAAmD,IAAA3O,EAAA2tB,EAAAtsB,OAAAsN,EAA4B,uBAAA3O,EAAA,iBAAAA,EAAA,SAC/Ei1G,sBAAA,SAAAzpD,GAAiD,6BAAAA,EAAA,YAAAA,EAAA,SACjDkpD,eAAA,SAAAqF,GAA+C,iCAC/CzE,gBAAA,WAAsC,sBACtCW,wBAAA,EACAf,mBAAA,EACApG,mBAAA,KACA8E,qBAAA,EACA1mG,GAAA,SAAA9F,GAA0B,OAAAA,EAAA8F,IAC1BlB,QAAA,SAAA0kG,EAAAn6E,GACA,OAAAyjF,EAAA,GAAAzjF,GAAAzwB,cAAAN,QAAAw0G,EAAA,GAAAtJ,GAAA5qG,gBAAA,GAEAkrG,UAAA,IACAiJ,mBACAhC,UAvkFA,SAAAtqF,EAAA8nF,EAAAyE,EAAA3tG,GACA,IAEA4tG,EACA/kG,EACA7W,EAAAC,EACAwyG,EALAnyD,EAAAlxB,EACAysF,GAAA,EAMA,IAAA7tG,EAAAukG,qBAAAvkG,EAAA0tG,iBAAA1tG,EAAA0tG,gBAAA54G,OAAA,SAAA0I,EAEA,QAGA,IAFAqL,GAAA,EAEA7W,EAAA,EAAAC,EAAA+N,EAAA0tG,gBAAA54G,OAAwD9C,EAAAC,IACxDwyG,EAAAzkG,EAAA0tG,gBAAA17G,MACA6W,EAAAuY,EAAAnoB,QAAAwrG,KACA,IAH+DzyG,KAM/D,GAAA6W,EAAA,QAKA,GAHA+kG,EAAAxsF,EAAA5nB,UAAA,EAAAqP,GACAuY,IAAA5nB,UAAAqP,EAAA47F,EAAA3vG,QAEA84G,EAAA94G,OAAA,IACA84G,EAAA5tG,EAAAukG,mBAAApyG,KAAAwC,KAAAi5G,EAAA1E,MACA1rG,GAAA,OAAAowG,GAAA5tG,EAAAW,GAAAitG,KAAApwG,GAAA,OAAAwC,EAAAW,GAAAitG,GAAA,CAEA,IADAC,GAAA,EACA77G,EAAA,EAAAC,EAAAi3G,EAAAp0G,OAAqD9C,EAAAC,EAAOD,IAC5D,GAAAgxG,EAAAhjG,EAAAW,GAAAitG,GAAA5tG,EAAAW,GAAAuoG,EAAAl3G,KAAA,CACA67G,GAAA,EAAwC,MAIxCA,GAAAF,EAAAC,IAKA,OAAAt7D,IAAAlxB,SAAA,GAiiFA0iF,aAAAgK,EACA9I,cAAA,EACA+B,cAAA,EACAlG,uBAAA,SAAAxuG,GAA6C,OAAAA,GAC7C4uG,sBAAA,SAAA5uG,GAA4C,aAC5CuwG,eAAA,SAAAmL,EAAAC,GAAqE,OAAAxwG,IAGrEtJ,EAAAmG,GAAAkxE,QAAA0iC,cACAC,UAAAh6G,EAAAia,KACApZ,QACAuY,KAAA,MACA2W,OAAA,EACAzW,SAAA,SAKA7b,OAAAs6E,SACAm3B,OACAj1F,OACAm2F,QACAP,QACSoK,MACTrpF,WACAyoF,YACAzJ,aAAAgK,EACAL,mBACSnuD,OACT8uD,SAAAliC,EACAmiC,OAAAliC,EACAmiC,MAAAliC,IAvkGA,SAAAqhC,EAAAp0G,GACA,IAAAk1G,EAAAv8G,EAAAC,EAAAI,EAEA,IAAAgH,KAAAvE,OAAA,SAAAuE,EAGA,IADAk1G,EAAA,GACAv8G,EAAA,EAAAC,EAAAoH,EAAAvE,OAAmC9C,EAAAC,EAAOD,IAC1CK,EAAAgH,EAAAC,OAAAtH,GACAu8G,GAAAthC,EAAA56E,MAEA,OAAAk8G,EAGA,SAAAt1G,EAAAhG,EAAAqU,GAEA,IADA,IAAAtV,EAAA,EAAAC,EAAAqV,EAAAxS,OACc9C,EAAAC,EAAOD,GAAA,EACrB,GAAAgxG,EAAA/vG,EAAAqU,EAAAtV,IAAA,OAAAA,EAEA,SAqBA,SAAAgxG,EAAAjoF,EAAA6F,GACA,OAAA7F,IAAA6F,GACA7F,IAAAvd,GAAAojB,IAAApjB,IACA,OAAAud,GAAA,OAAA6F,IAGA7F,EAAA5U,cAAAqgB,OAAAzL,EAAA,IAAA6F,EAAA,GACAA,EAAAza,cAAAqgB,QAAA5F,EAAA,IAAA7F,EAAA,KAUA,SAAAypF,EAAAx7E,EAAAy7E,GACA,IAAAvpG,EAAAlJ,EAAAC,EACA,UAAA+2B,KAAAl0B,OAAA,WAEA,IAAA9C,EAAA,EAAAC,GADAiJ,EAAA8tB,EAAAjwB,MAAA0rG,IACA3vG,OAAmC9C,EAAAC,EAAOD,GAAA,EAAAkJ,EAAAlJ,GAAAkC,EAAA0nE,KAAA1gE,EAAAlJ,IAC1C,OAAAkJ,EAGA,SAAAgxG,EAAAz/F,GACA,OAAAA,EAAAw2C,YAAA,GAAAx2C,EAAAiM,QAGA,SAAAwpF,EAAAz1F,GACA,IAAAlZ,EAAA,qBACAkZ,EAAAtM,GAAA,qBACAjM,EAAAuZ,KAAAhB,EAAAlZ,KAAAiK,GACAtJ,EAAAuZ,KAAAhB,EAAAlZ,EAAAkZ,EAAAvR,SAGAuR,EAAAtM,GAAA,mBACA,IAAAjF,EAAAhH,EAAAuZ,KAAAhB,EAAAlZ,GACA2H,IAAAsC,GAAAiP,EAAAvR,YACAhH,EAAAilC,WAAA1sB,EAAAlZ,GACAkZ,EAAAvK,QAAA,mBAkCA,SAAA4iB,EAAA0pF,EAAAn0G,EAAAmG,GAEA,IAAA8jB,EACA,OAFA9jB,KAAAhD,EAEA,WACA,IAAAsB,EAAAjK,UACAlD,OAAAgzB,aAAAL,GACAA,EAAA3yB,OAAAyyB,WAAA,WACA/pB,EAAAlF,MAAAqL,EAAA1B,IACa0vG,IAwEb,SAAAxN,EAAAr3F,GACAA,EAAAsT,iBACAtT,EAAAi4F,kBA8BA,SAAAhB,EAAA6N,EAAA98F,EAAA+8F,GACA,IAAAz2E,EAAA02E,EAAAC,MAEA32E,EAAAw2E,EAAAnzG,KAAA,WAGApH,GADA+jC,EAAA,GAAAA,GACAl/B,MAAA,MAAAizE,MAAA,WACA,IAAAr3E,KAAAsE,QAAA,aACA21G,EAAA11G,KAAAvE,SAIAsjC,EAAAtmB,EAAArW,KAAA,WAGApH,GADA+jC,EAAA,GAAAA,GACAl/B,MAAA,MAAAizE,MAAA,WACA,IAAAr3E,KAAAsE,QAAA,cACA01G,EAAAD,EAAA/5G,QAEAi6G,EAAA11G,KAAAy1G,KAKAF,EAAAnzG,KAAA,QAAAszG,EAAA/lF,KAAA,MAIA,SAAA0kF,EAAAvjF,EAAAm6E,EAAAmJ,EAAAxJ,GACA,IAAAj3F,EAAA4gG,EAAAzjF,EAAAzwB,eAAAN,QAAAw0G,EAAAtJ,EAAA5qG,gBACAs1G,EAAA1K,EAAArvG,OAEA+X,EAAA,EACAygG,EAAAp0G,KAAA4qG,EAAA95E,KAIAsjF,EAAAp0G,KAAA4qG,EAAA95E,EAAAxwB,UAAA,EAAAqT,KACAygG,EAAAp0G,KAAA,gCACAo0G,EAAAp0G,KAAA4qG,EAAA95E,EAAAxwB,UAAAqT,IAAAgiG,KACAvB,EAAAp0G,KAAA,WACAo0G,EAAAp0G,KAAA4qG,EAAA95E,EAAAxwB,UAAAqT,EAAAgiG,EAAA7kF,EAAAl1B,WAGA,SAAAg5G,EAAAR,GACA,IAAAwB,GACAplF,KAAA,QACAtB,IAAA,QACAC,IAAA,OACAC,IAAA,OACAC,IAAA,SACAC,IAAA,QACAumF,IAAA,SAGA,OAAAvoF,OAAA8mF,GAAAx0G,QAAA,wBAAA+T,GACA,OAAAiiG,EAAAjiG,KAoBA,SAAAsB,EAAA9V,GACA,IAAAisB,EACA3iB,EAAA,KACA6sG,EAAAn2G,EAAAm2G,aAAA,IACAtL,EAAA7qG,EAAA0N,IACAnI,EAAAjJ,KAEA,gBAAAyuG,GACAzxG,OAAAgzB,aAAAL,GACAA,EAAA3yB,OAAAyyB,WAAA,WACA,IAAA3W,EAAApV,EAAAoV,KACA1H,EAAAm9F,EACAgL,EAAA71G,EAAA61G,WAAAh6G,EAAAmG,GAAAkxE,QAAA0iC,aAAAC,UAEAc,GACA1hG,KAAAjV,EAAAiV,MAAA,MACA2W,MAAA5rB,EAAA4rB,QAAA,EACAgrF,cAAA52G,EAAA42G,eAAAzxG,EACAgQ,SAAAnV,EAAAmV,UAAA,QAEAzY,EAAAb,EAAAgG,UAAwChG,EAAAmG,GAAAkxE,QAAA0iC,aAAAl5G,OAAAi6G,GAExCvhG,MAAAtb,KAAAyL,EAAAwlG,EAAAe,KAAAf,EAAA4E,KAAA5E,EAAAzkG,SAAA,KACAoH,EAAA,mBAAAA,IAAA5T,KAAAyL,EAAAwlG,EAAAe,KAAAf,EAAA4E,KAAA5E,EAAAzkG,SAAAoH,EAEApE,GAA8BA,EAAAutG,QAE9B72G,EAAAtD,SACAb,EAAAgL,WAAA7G,EAAAtD,QACAb,EAAAgG,OAAAnF,EAAAsD,EAAAtD,OAAA5C,KAAAyL,IAEA1J,EAAAgG,OAAAnF,EAAAsD,EAAAtD,SAIAb,EAAAgG,OAAAnF,GACAgR,MACAyH,SAAAnV,EAAAmV,SACAC,OACAtI,QAAA,SAAAsI,GAEA,IAAA6R,EAAAjnB,EAAAinB,QAAA7R,EAAA21F,EAAA4E,MACA5E,EAAArjG,SAAAuf,MAGA3d,EAAAusG,EAAA/7G,KAAAyL,EAAA7I,IACay5G,IAkBb,SAAAlK,EAAAjsG,GACA,IACA82G,EACAC,EAFA3hG,EAAApV,EAGA2xB,EAAA,SAAAzR,GAAoC,SAAAA,EAAAyR,MAEpC91B,EAAA0T,QAAA6F,KAEAA,GAAoB6R,QADpB8vF,EAAA3hG,KAIA,IAAAvZ,EAAAgL,WAAAuO,KACA2hG,EAAA3hG,EACAA,EAAA,WAA+B,OAAA2hG,IAG/B,IAAAC,EAAA5hG,IAUA,OATA4hG,EAAArlF,OACAA,EAAAqlF,EAAArlF,KAEA91B,EAAAgL,WAAA8qB,KACAmlF,EAAAE,EAAArlF,KACAA,EAAA,SAAAzR,GAAwC,OAAAA,EAAA42F,MAIxC,SAAA/L,GACA,IAA0Da,EAA1D/wG,EAAAkwG,EAAAe,KAAAz3E,GAA4CpN,YAC5C,KAAApsB,GAKA+wG,EAAA,SAAAqL,EAAApsG,GACA,IAAA2d,EAAAvlB,EAEA,IADAg0G,IAAA,IACA9jE,SAAA,CAEA,IAAAlwC,KADAulB,KACAyuF,EACAA,EAAAz7G,eAAAyH,KAAAulB,EAAAvlB,GAAAg0G,EAAAh0G,IAEAulB,EAAA2qB,YACAt3C,EAAAo7G,EAAA9jE,UAAAwgC,MAAA,SAAAh6E,EAAAu9G,GAAqEtL,EAAAsL,EAAA1uF,EAAA2qB,aACrE3qB,EAAA2qB,SAAA12C,QAAAsuG,EAAA3jG,QAAAvM,EAAA82B,EAAAnJ,GAAAyuF,KACApsG,EAAAhK,KAAA2nB,QAGAuiF,EAAA3jG,QAAAvM,EAAA82B,EAAAslF,OACApsG,EAAAhK,KAAAo2G,IAKAp7G,EAAAuZ,IAAA6R,SAAA0sD,MAAA,SAAAh6E,EAAAs9G,GAAwDrL,EAAAqL,EAAA5iF,EAAApN,WACxD8jF,EAAArjG,SAAA2sB,IAzBA02E,EAAArjG,SAAA0N,MA8BA,SAAAs2F,EAAAt2F,GACA,IAAA+hG,EAAAt7G,EAAAgL,WAAAuO,GACA,gBAAA21F,GACA,IAAAlwG,EAAAkwG,EAAAe,KAAAz3E,GAA4CpN,YAC5CprB,EAAAs7G,EAAA/hG,OAAAjP,KAAA,WACA,IAAAW,EAAAxK,KAAAq1B,OAAAxsB,EACAwsB,EAAA7qB,EAAAxK,KAAAq1B,KAAAr1B,MACA,KAAAzB,GAAAkwG,EAAA3jG,QAAAvM,EAAA82B,KACA0C,EAAApN,QAAApmB,KAAAiG,EAAAxK,MAA6DgM,GAAAhM,KAAAq1B,KAAAr1B,SAG7DyuG,EAAArjG,SAAA2sB,IAYA,SAAA+7E,EAAAgH,EAAAC,GACA,GAAAx7G,EAAAgL,WAAAuwG,GAAA,SACA,IAAAA,EAAA,SACA,UAAA/2G,MAAAg3G,EAAA,wCAGA,SAAApmF,EAAApuB,GACA,OAAAhH,EAAAgL,WAAAhE,SA0EA,SAAAklG,EAAAuP,EAAArxG,GACA,IAAA6H,EAAA,aAKA,OAJAA,EAAAvS,UAAA,IAAA+7G,GACAxpG,cACAA,EAAAvS,UAAA2f,OAAAo8F,EAAA/7G,UACAuS,EAAAvS,UAAAM,EAAAgG,OAAAiM,EAAAvS,UAAA0K,GACA6H,GAzlBA,CA8oGCnS,mPCrrGQsB,WAFTxD,EAAA,IACAA,EAAA,sFCwRgB89G,sBAzRhB,QAAA99G,EAAA,IACAA,EAAA,IACAA,EAAA,IACA,QAAAA,EAAA,QACAA,EAAA,UACAA,EAAA,SACAA,EAAA,SACAA,EAAA,QACAA,EAAA,QACAA,EAAA,UACAA,EAAA,QACAA,EAAA,SACAA,EAAA,UACAA,EAAA,UACAA,EAAA,UACAA,EAAA,UACAA,EAAA,KACA6gC,EAAA7gC,EAAA,IACA4hD,EAAA5hD,EAAA,uDAEA,IAAI+9G,GAAc,EACdC,GAAgB,EAChBC,EAAsB,GAY1B,SAASC,EAASvjG,GACdA,EAAQwjG,QAAQC,cAAgBL,EANpC,SAA2BpjG,GACvBA,EAAQ0jG,OAAO/5F,gBAAgB,UAC/B,EAAAS,EAAAvhB,SAAEmX,EAAQ0jG,QAAQr8D,YAAY,+BAK9Bs8D,CAAkB3jG,GAGtB,SAAS4jG,EAAW5jG,GAChB,OAAOA,EAAQ6jG,iBAAiBC,qBAGpC,SAASC,EAAkBzwG,GACvBqkB,WAAWrkB,EAAU,IAiBzB,SAAS0wG,EAAalxG,EAAO6jG,GAEzB,OAA8C,IADlC7jG,EAAM1M,IAAI,SAAS0hB,cAClBtb,QAAQmqG,EAAM7uF,eAG/B,SAASm8F,EAAcjkG,GACnBA,EAAQkkG,iBAAiB73F,OACzBrM,EAAQ0jG,OAAOr7F,aAAa,gBAAiB,SAGjD,SAAS87F,EAAuBnkG,GAC5B,IAAIokG,EAAyBR,EAAW5jG,GAAW,EAAIqjG,EAEvDrjG,EAAQ6jG,iBAAiB7I,UAAUoJ,GAEnCH,EAAajkG,GAQjB,SAASqkG,EAASrkG,EAASskG,EAAe3N,GACtC32F,EAAQukG,eAAiBD,OAEXvzG,IAAV4lG,IACAA,EAAQ32F,EAAQ0jG,OAAOl9G,OAG3BwZ,EAAQwkG,oBAAoB7N,MAAMA,GAGtC,SAAS8N,EAAsCzkG,GAC3C,IAAI0kG,EAAe1kG,EAAQ6jG,iBAAiBc,eAAiB3kG,EAAQ6jG,iBAAiBc,cAAcv+G,IAAI,WACpGs+G,GAjBR,SAA0B1kG,EAAS0kG,IAC/B,EAAAt6F,EAAAvhB,SAAEmX,EAAQ0jG,QAAQ/3F,SAAS,+BAC3B3L,EAAQ0jG,OAAOr7F,aAAa,QAAS,yBAA2Bq8F,EAAc,KAgB1EE,CAAgB5kG,EAAS0kG,GAIjC,SAASG,EAA6B7kG,EAASlN,GAC3C,GAAKA,EAAL,CAIA,IAAIu4B,EAASp8B,SAASyR,cAAc,UAChC7C,EAASmC,EAAQwjG,QACjBh9G,EAAQsM,EAAM1M,IAAI,UAAY0M,EAAM1M,IAAI,SACxCoiD,EArFR,SAA4B7zB,GAExB,OADU,IAAImwF,WAAYC,gBAAgBpwF,EAAO,aACtCif,gBAAgBhT,YAmFfokF,CAAmBlyG,EAAM2rE,YAErCpzC,EAAOhjB,aAAa,WAAY,IAChCgjB,EAAOhjB,aAAa,QAAS7hB,GAC7B6kC,EAAOzK,YAAc4nB,EAGrBxoC,EAAQ0jG,OAAOl9G,MAAQgiD,EAEvB3qC,EAAOwL,UAAY,GACnBxL,EAAOjS,QAAQ4O,IAAI6wB,GACnBxtB,EAAO0N,cAAc,IAAIJ,UAAY,UAAWC,SAAS,MAQ7D,SAAS65F,EAA6BjlG,GAClC6kG,EAA4B7kG,EAASA,EAAQ6jG,iBAAiBc,eAC9DF,EAAqCzkG,GACrCmkG,EAAsBnkG,GAG1B,SAASklG,EAAsB75E,GAC3B,OAAO,IAAI85E,UAAgB95E,EAAO+5E,aAGtC,SAASC,EAAwBrlG,GAG7B,IAFA,IAAI7F,KAEK5U,EAAI,EAAGA,EAAIya,EAAQslG,UAAUvmE,SAAS12C,OAAQ9C,IAAK,CACxD,IAAI8lC,EAASrrB,EAAQslG,UAAUvmE,SAASx5C,GACxC4U,EAAO1N,KAAKy4G,EAAqB75E,IAGrC,OAAOlxB,EAQX,SAASorG,EAAa1nG,GAClB,IAAIs/D,EAASt/D,EAAOy3B,UAAUntB,cAAc,sBAC5C,OAAOg1D,GAAUA,EAAOjpE,GAG5B,SAASsxG,EAAmBtxG,EAAI2e,GAK5B,OAJiBprB,UAAE8N,IAAIsd,EAAS,SAAUjc,GACtC,OAAOA,EAAO1C,KAGA1H,QAAQ0H,GAW9B,SAASuxG,EAA8BzlG,GACnCA,EAAQwkG,oBAAsB,IAAInqD,UAAmBgrD,EAAuBrlG,IACxElN,MAAOqyG,UACPnyG,QAASgxG,EACT0B,cAAe1lG,EAAQ2lG,eACvBC,WAAYtC,IAGhBtjG,EAAQ6lG,SAAW7lG,EAAQ2lG,eAK3B3lG,EAAQwkG,oBAAoB9wG,GAAG,WAAY,WACnCsM,EAAQwkG,oBAAoBsB,mBAAqB9lG,EAAQ6lG,UA9IrE,SAAuB7lG,GACdA,EAAQ+lG,QAAQp/D,WACjB3mC,EAAQ+lG,QAAQl/D,OAChB7mC,EAAQ0jG,OAAOr7F,aAAa,YAAa,QACzCrI,EAAQs1B,UAAUjtB,aAAa,YAAa,SA2IxC29F,CAAahmG,IACb,EAAA0jB,EAAA76B,SAAMmX,GAAS9R,IAAI,+BAA+B,MAxI9D,SAAuB8R,GACnBA,EAAQ+lG,QAAQj/D,OAChB9mC,EAAQ0jG,OAAOr7F,aAAa,YAAa,SACzCrI,EAAQs1B,UAAUjtB,aAAa,YAAa,SAuIpC49F,CAAajmG,IACb,EAAA0jB,EAAA76B,SAAMmX,GAAS9R,IAAI,+BAA+B,MAW1D8R,EAAQwkG,oBAAoB9wG,GAAG,UAAW,SAAUsN,GAChD,IAAIklG,EAIJ,IAAIllG,EAAK21F,OAAU32F,EAAQ0jG,OAAOl9G,MAIlC,IAAI,EAAAk9B,EAAA76B,SAAMmX,GAAS5Z,IAAI,0BACd4Z,EAAQwkG,oBAAoBsB,mBAC7B,EAAApiF,EAAA76B,SAAMmX,GAAS9R,IAAI,0BAA0B,OAFrD,CAQK8S,EAAK21F,QACN31F,EAAK6R,QAAUwyF,EAAuBrlG,IAG1C,IAAImmG,GAA+E,IAA3DX,EAAkBxlG,EAAQ0jG,OAAOl9G,MAAOwa,EAAK6R,SACjEuzF,GAAgBpmG,EAAQ0jG,OAAOl9G,MAMnC,IAJIwZ,EAAQ6M,aAAa,sBAAyBs5F,GAAsBC,GACpEplG,EAAK6R,QAAQpmB,KA/DzB,SAA8BuT,GAC1B,IAAIqrB,EAAS,IAAIg7E,UACjBh7E,EAAOhjB,aAAa,QAASrI,EAAQ0jG,OAAOl9G,OAC5C,IAAI8/G,EAA0BpB,EAAqB75E,GAEnD,OADAi7E,EAAwBp4G,IAAI,aAAa,GAClCo4G,EA0DmBC,CAAoBvmG,MAGrC,EAAA0jB,EAAA76B,SAAMmX,GAAS5Z,IAAI,2BAA4B,CAChD,IAAIogH,EAAwBhB,EAAkBxlG,EAAQxZ,MAAOwa,EAAK6R,SAE9D2zF,GAAyB,GACzBxlG,EAAK6R,QAAQjY,OAAO4rG,EAAuB,IAxF3D,SAAsBxmG,EAASgB,GAC3BhB,EAAQ6jG,iBAAiB31G,MACzB8R,EAAQ6jG,iBAAiB31G,IAAI8S,EAAK6R,SA0F9B4zF,CAAYzmG,EAASgB,GACrBklG,EAAoBlmG,EAAQ6jG,iBAAiBc,eAAiB3jG,EAAK6R,QAAQ,GAEvE7S,EAAQukG,iBACRvkG,EAAQ6jG,iBAAiB6C,eAAeR,GACxCnC,EAAiB,WACb/jG,EAAQ0jG,OAAOr7F,aAAa,wBAAyBk9F,EAAYvlG,OAIzEA,EAAQ0jG,OAAOr7F,aAAa,gBAAiB,SAGxCrI,EAAQ6lG,SAAW7lG,EAAQkkG,iBAAiByC,cAAe,EAAAjjF,EAAA76B,SAAMmX,GAAS5Z,IAAI,iCAC/E4Z,EAAQmI,cAAc,sBAAsBkB,UAAYthB,UAAKE,QAAQ,+BAGzE+X,EAAQkkG,iBAAiBh4F,OAErBlM,EAAQukG,gBACRR,EAAiB,WACb/jG,EAAQ0jG,OAAOr7F,aAAa,wBAAyBk9F,EAAYvlG,SAmB1E,SAASmjG,EAAqBnjG,GACjC,IAAI4mG,GAA+B,GAEnC,EAAAx8F,EAAAvhB,SAAEoG,UAAUyE,GAAG,gDAAiD,SAAAtF,GACxDw4G,IACAx4G,EAAEoiB,iBACFo2F,GAA+B,MAIvC,EAAAx8F,EAAAvhB,SAAEmX,EAAQs1B,WAAW5hC,GAAG,YAAa,KAAM,SAAUtF,GACjD,IAAIw1G,EAAW5jG,GAYX,OAAO,EAXPA,EAAQ6jG,iBAAiB7I,WAAU,EAAA5wF,EAAAvhB,SAAEuF,EAAEsiB,QAAQtU,SAC/C6oG,EAA4BjlG,GAE5BA,EAAQkkG,iBAAiB73F,QAErB,EAAAjC,EAAAvhB,SAAEmX,GAASqP,QAAQ,cAAchnB,OAAS,IAC1Cu+G,GAA+B,GAGnC5mG,EAAQ0jG,OAAO/5F,gBAAgB,2BAmB3C,SAASk9F,EAAgB7mG,GAGrB,IAAI8mG,EAAc9mG,EAAQxZ,MAAQ,GAAKwZ,EAAQ0jG,OAAOl9G,MAClD4/G,EAAwC,KAAzBpmG,EAAQ0jG,OAAOl9G,OAClC,EAAAk9B,EAAA76B,SAAMmX,GAAS9R,IAAI,0BAA2Bk4G,GAC9C/B,EAAQrkG,GAAS,EAAM8mG,GAG3B,SAASC,EAAyB/mG,IAblC,SAA4BA,GACxB,OAAOA,EAAQwkG,oBAAoBsB,iBAAmB,GAalDkB,CAAkBhnG,KAClB,EAAA0jB,EAAA76B,SAAMmX,GAAS9R,IAAI,0BAA0B,GAIrD,SAAS+4G,EAAiBjnG,GACtB,GAAIA,EAAQwjG,QAAQC,eAAiB,EACjC,OAAOzjG,EAAQwjG,QAAQ53G,QAAQoU,EAAQwjG,QAAQC,eAAe7iF,YA6BtE,SAASsmF,EAAiBlnG,GACtB+mG,EAAwB/mG,GA1B5B,SAAuCA,GACnC,IAAImnG,GAAoBnnG,EAAQ6M,aAAa,mBACzCu6F,GAAoBpnG,EAAQ0jG,OAAOl9G,MACnC6gH,EAAoBrnG,EAAQ0jG,OAAOl9G,QAAUygH,EAAiBjnG,GAGlE,GAFwBonG,GAAoBC,EAGxC,GAAIF,EACA5D,EAASvjG,OACN,CACH,IAAIy8F,EAAYwK,EAAiBjnG,QACR,IAAdy8F,EACP8G,EAASvjG,GAETA,EAAQ0jG,OAAOl9G,MAAQi2G,GAanC6K,CAA6BtnG,GAPjC,SAAmCA,GAE/BA,EAAQ6jG,iBAAiB7I,UAAUqI,GAMnCkE,CAA0BvnG,GAC1BikG,EAAajkG,GAUjB,IAAMwnG,GAAW,EAAAr+F,EAAAtgB,SAAM,cACnBugB,SAAUA,UACVG,QAAS,SAAUvJ,GACfA,EAAQynG,SAAU,EAAApuC,EAAAxwE,WAClBmX,EAAQ0jG,OAAS1jG,EAAQmI,cAAc,SACvCnI,EAAQwjG,QAAUxjG,EAAQmI,cAAc,UACxCnI,EAAQs1B,UAAYt1B,EAAQmI,cAAc,gBAC1CnI,EAAQslG,UAAYtlG,EAAQmI,cAAc,YAC1CnI,EAAQ+lG,QAAU/lG,EAAQmI,cAAc,UACxCnI,EAAQkkG,iBAAmB,IAAIwD,UAAgB1nG,EAAQs1B,UAAWt1B,EAAQ0jG,QAC1E1jG,EAAQ6jG,iBAAmB,IAAI8D,UAE/B3nG,EAAQ6jG,iBAAiB+D,SAAW,SAAUC,GAC1C,IAAIC,KAEJ9nG,EAAQ6jG,iBAAiBkE,aAAax4G,QAAQ,SAAUy4G,GACtCH,EAAe1rG,KAAK,SAAU8rG,GACxC,OAAOD,EAAc9zG,KAAO+zG,EAAc/zG,MAI1C4zG,EAAiBr7G,KAAKu7G,KAI9BhoG,EAAQkkG,iBAAiBrkG,OAAOioG,EAAkBD,EAAex/G,OAAQ2X,EAAQynG,UAGrFznG,EAAQ6jG,iBAAiBqE,kBAAoB,WACzC,IAAI/qC,EAASn9D,EAAQ6jG,iBAAiBsE,mBACtCnoG,EAAQkkG,iBAAiBkE,UAAUjrC,GACnCn9D,EAAQ0jG,OAAOr7F,aAAa,wBAAyBk9F,EAAYvlG,MAIzEsJ,SAAU,SAAUtJ,GAChBnY,UAAMqgC,KAAKloB,GACXylG,EAA6BzlG,GAtJrC,SAAsCA,GAClCA,EAAQs1B,UAAUphC,GAAK8L,EAAQynG,QAC/BznG,EAAQmI,cAAc,UAAUE,aAAa,gBAAiBrI,EAAQynG,SAqJlEY,CAA4BroG,GAC5BA,EAAQ0jG,OAAOr7F,aAAa,gBAAiBrI,EAAQynG,SACrDznG,EAAQqI,aAAa,WAAY,MApJzC,SAAiCrI,IAC7B,EAAAoK,EAAAvhB,SAAEmX,EAAQs1B,WAAW5hC,GAAG,YAAa,KAAM,SAAUtF,GAC7Cw1G,EAAW5jG,IACXA,EAAQ6jG,iBAAiB7I,WAAU,EAAA5wF,EAAAvhB,SAAEuF,EAAEsiB,QAAQtU,WAkJnDksG,CAAuBtoG,GACvBmjG,EAAoBnjG,GAlH5B,SAA0BA,GACtB,IAAIqrB,EAASrrB,EAAQslG,UAAUn9F,cAAc,wBAEzCkjB,GACAw5E,EAA4B7kG,EAASklG,EAAqB75E,IA+G1Dk9E,CAAgBvoG,GAChBmkG,EAAsBnkG,GACtBykG,EAAqCzkG,IAGzCu0B,SAAU,SAAUv0B,IAChB,EAAAoK,EAAAvhB,SAAEoG,UAAU2F,IAAI,oCAChB,EAAAqyC,EAAAnM,QAAO96B,GAASwtC,KAAK,WACjBy2D,EAAajkG,GACbA,EAAQkkG,iBAAiB9qG,aAIjCnG,YACIiB,GADQ,SACL8L,EAASgB,GACJhB,EAAQ9L,KACR8L,EAAQmI,cAAc,SAASjU,GAAK8M,EAAKwI,SAAWoyB,iBAI5D91C,KAPQ,SAOHka,EAASgB,GACVhB,EAAQmI,cAAc,UAAUE,aAAa,OAAQrH,EAAKwI,WAG9D2N,YAXQ,SAWInX,EAASgB,GACjBhB,EAAQmI,cAAc,SAASE,aAAa,cAAerH,EAAKwI,WAGpEtE,IAfQ,SAeJlF,EAASgB,GACThB,EAAQ2lG,eAAiB3kG,EAAKwI,WAItCnW,QACIm1G,aAAc,SAAUxoG,GACpBknG,EAAgBlnG,IAGpByoG,mBAAoB,SAAUzoG,GACtB/Q,SAAS01B,gBAAkB3kB,EAAQ0jG,QAA4D,UAAlD1jG,EAAQs1B,UAAUnU,aAAa,iBAC5E,EAAAuC,EAAA76B,SAAMmX,GAAS9R,IAAI,gCAAgC,IAI3Dw6G,cAAe,SAAU1oG,GACrB6mG,EAAe7mG,IAGnB2oG,eAAgB,SAAU3oG,GACtB,IAAIgB,GAAO,EAAA0iB,EAAA76B,SAAMmX,GAEbgB,EAAK5a,IAAI,gCACT4a,EAAK9S,IAAI,gCAAgC,KAEzC,EAAAw1B,EAAA76B,SAAMmX,GAAS9R,IAAI,wCAAwC,GAC3D8R,EAAQwkB,UAIhB7P,MAAO,SAAU3U,GACRA,EAAQ0jG,OAAOl9G,QAOhB,EAAAk9B,EAAA76B,SAAMmX,GAAS9R,IAAI,2BAA2B,GAC9Cm2G,EAAQrkG,GAAS,KAPb,EAAA0jB,EAAA76B,SAAMmX,GAAS5Z,IAAI,yCACnB,EAAAs9B,EAAA76B,SAAMmX,GAAS9R,IAAI,wCAAwC,GAE3D+1G,EAAajkG,IAQzB4oG,gBAAiB,SAAU5oG,EAAS5R,GAChC,IAAIy6G,EAAe7oG,EAAQ0jG,OAAOl9G,MAC9BsiH,GAAU,EAEd,GAAI16G,EAAE/E,UAAYA,UAAQc,OAGtB,OAFA48G,EAAwB/mG,QACxBikG,EAAajkG,GAIaA,EAAQkkG,iBAAiB/3F,aAExBy3F,EAAW5jG,GAClC5R,EAAE/E,UAAYA,UAAQa,OACtB68G,EAAwB/mG,GACxBilG,EAA4BjlG,GAC5B5R,EAAEoiB,kBACKpiB,EAAE/E,UAAYA,UAAQ+B,MA3IjD,SAAuB4U,GACWA,EAAQkkG,iBAAiB/3F,aAEnD84F,EAA4BjlG,GAyIhB+oG,CAAa/oG,GACb8oG,GAAU,GACH16G,EAAE/E,UAAYA,UAAQgC,IAC7B2U,EAAQ6jG,iBAAiBmF,oBACzB56G,EAAEoiB,kBACKpiB,EAAE/E,UAAYA,UAAQW,OAC7BgW,EAAQ6jG,iBAAiBoF,gBACzB76G,EAAEoiB,kBAECpiB,EAAE/E,UAAYA,UAAQgC,IAAM+C,EAAE/E,UAAYA,UAAQW,OACzD68G,EAAe7mG,GACf5R,EAAEoiB,kBAGNs4F,EAAUA,GAAW16G,EAAEqd,iBACvBkM,WAAW,WACH3X,EAAQ0jG,OAAOl9G,QAAUqiH,GAAiBC,GAC1C9oG,EAAQuL,cAAc,IAAIJ,UAAY,SAAUC,SAAS,MAE9D,KAIXjkB,WACIX,YACI,IAAIylD,EAAW/jD,KAAKs7G,QAAQ53G,QAAQ1D,KAAKs7G,QAAQC,eACjD,OAAOx3D,EAAWA,EAASzlD,MAAQ,IAGvCA,UAAWA,GACP,GAAc,KAAVA,GArahB,SAAqBwZ,GACjBA,EAAQ0jG,OAAOl9G,MAAQ,GACvBwZ,EAAQwjG,QAAQn6F,UAAY,GAoahB6/F,CAAWhhH,WACR,GAAI1B,EAAO,CACd,IAAIwa,EAAO9Y,KAAKs8G,oBACZ1xG,EAAQkO,EAAKnE,WAAYrW,WAAYwa,EAAKnE,WAAY2rC,MAAOhiD,KAG5DsM,GAAS5K,KAAK2kB,aAAa,uBAC5B/Z,EAAQ,IAAIqyG,WAAiB3+G,MAAOA,EAAOgiD,MAAOhiD,KAGtDq+G,EAA4B38G,KAAM4K,GAEtC,OAAO5K,MAGXihH,mBACI,OAAOjhH,KAAKw7G,OAAOl9G,OAGvBi+B,KAAM,WAGF,OAFAv8B,KAAKw7G,OAAOj/E,OACZyiF,EAAgBh/G,MACTA,MAGXs8B,MAAO,WAGH,OAFAt8B,KAAKw7G,OAAOl/E,QACZqiF,EAAe3+G,MACRA,UAKnB,EAAAi9B,EAAAt8B,SAAO,aAAc2+G,IACrB,EAAA5+G,EAAAC,SAAU,SAAU2+G,aACLA,iFCpkBf,QAAAniH,EAAA,QACAA,EAAA,mEAEe,EAAA8jB,EAAAtgB,SAAM,cACjB0gB,QAAS,SAAUvJ,GACf/Z,OAAOC,eAAe8Z,EAAS,SAC3B5Z,IAAK,WACD,OAAO4Z,EAAQmhB,aAAa,WAAY,EAAA2zC,EAAAjsE,SAAWX,KAAK04B,cAE5D1yB,IAAK,SAAU1H,GACXwZ,EAAQqI,aAAa,QAAS7hB,OAI1CW,WACIi+G,UAAW,WACP,IAAIt9D,KAOJ,OANI5/C,KAAK2kB,aAAa,aAClBi7B,EAAK,YAAa,EAAAgtB,EAAAjsE,SAAWX,KAAKi5B,aAAa,aAEnD2mB,EAAKthD,MAAQ0B,KAAK1B,MAClBshD,EAAKU,OAAQ,EAAAssB,EAAAjsE,SAAWX,KAAK04B,aAEtBknB,yGCvBnB,IAAA7gC,EAAA5hB,EAAA,QACAA,EAAA,SACAA,EAAA,uDAOA,IAAIg1D,EAAqBhpD,UAAS6I,WAAWzM,QAyBzCqJ,WAAY,SAAUqD,EAAQvO,GAC1BA,IAAYA,MACRA,EAAQoH,UACR9K,KAAK8K,QAAUpH,EAAQoH,SAEvBpH,EAAQkH,QACR5K,KAAK4K,MAAQlH,EAAQkH,OAEzB5K,KAAKkhH,cAAgB,IAAIlhH,KAAK4K,OAASkE,YACvC9O,KAAKmhH,YAAcz9G,EAAQg6G,YAAc,EACzC19G,KAAKohH,WAAa19G,EAAQ29G,cAC1BrhH,KAAKshH,eAAiB59G,EAAQ69G,eAAiB,IAC/CvhH,KAAKy9G,eAAiB/5G,EAAQ85G,eAAiB,GAC/Cx9G,KAAK1B,MAAQ,KACb0B,KAAKwhH,cACLxhH,KAAK49G,iBAAmB,GACxB,EAAA7+F,EAAAoQ,SAAQnvB,KAAM,QAAS,YAG3BoR,IAAK,WACD,OAAOpR,KAAKy9G,gBAUhBhP,MAAO,SAAUA,GAAO,IAChBgT,EACA92F,EAFgBsgD,EAAAjrE,KAIpBA,KAAK1B,MAAQmwG,EACb9jF,EAAU3qB,KAAK0hH,mBAAmBjT,GAClCzuG,KAAK2hH,QAAQlT,EAAO9jF,GAEf8jF,GAAUzuG,KAAKy9G,iBAAkBz9G,KAAK4hH,cAAcnT,IAAWzuG,KAAK6hH,qBAAqBl3F,KAI9F82F,EAASzhH,KAAKuQ,MAAMk+F,GAEpBzuG,KAAK49G,mBACL59G,KAAKuN,QAAQ,YAAau0G,UAAU,IAEpCL,EAAO/gE,OAAO,WACVuqB,EAAK2yC,mBACL3yC,EAAK19D,QAAQ,YAAau0G,WAAY72C,EAAK2yC,qBAG/C6D,EAAO9hE,KAAK,SAAClvC,EAAMsxG,EAAM9wG,GACrBg6D,EAAK+2C,cAAcvT,EAAOh+F,EAAMQ,KAEpCwwG,EAAO9hE,KAAK,WACR8uD,EAAQxjC,EAAK3sE,MACbqsB,EAAUsgD,EAAKy2C,mBAAmBjT,GAClCxjC,EAAK02C,QAAQlT,EAAO9jF,OAU5Bs3F,aAAc,SAAUxT,GACpB,IAAIruG,GAAS,EAAA2e,EAAAxU,YAAWvK,KAAKohH,YAAcphH,KAAKohH,WAAW3S,GAASzuG,KAAKohH,WACrEtoG,GAAO,EAAAiG,EAAAxZ,WAAWnF,GAEtB,OADA0Y,EAAK9Y,KAAKshH,gBAAkB7S,EACrB31F,GASXvI,MAAO,SAAUk+F,GACb,IAGIruG,GAAUkS,KAAK,EAAMmH,QAAQ,EAAMlH,QAAQ,EAAOuG,KAH3C9Y,KAAKiiH,aAAaxT,IAK7B,OADatlG,UAAS6I,WAAW/S,UAAUsR,MAAM/S,KAAKwC,KAAMI,IAYhEuhH,QAAS,SAAUlT,EAAO9jF,GAKtB,OAJA3qB,KAAKuN,QAAQ,WACTkhG,MAAOA,EACP9jF,QAASA,IAENA,GAeX7f,QAAS,SAAU8Y,EAAM6qF,KAWzBiT,mBAAoB,SAAUjT,GAC1B,IAAI9jF,KACJ,OAAK8jF,GAGL9jF,EAAU3qB,KAAK0V,OAAO,SAAUkO,GAC5B,QAAS5jB,KAAK8K,QAAQ8Y,EAAM6qF,IAC7BzuG,MACCA,KAAKmhH,cACLx2F,GAAU,EAAA5L,EAAArK,OAAMiW,EAAS3qB,KAAKmhH,cAE3Bx2F,GARIA,GAmBfq3F,cAAe,SAAUvT,EAAOyT,EAAUjxG,GACtC,IAAIqe,EAAQtvB,KAAKwhH,WACb72F,EAAU3qB,KAAKwO,MAAM0zG,EAAUjxG,GACnCqe,EAAMm/E,IAAS,EAAA1vF,EAAAlK,OAAM8V,EAAS3qB,KAAKkhH,eASvCU,cAAe,SAAUnT,GACrB,OAAOzuG,KAAKwhH,WAAWtiH,eAAeuvG,IAS1C0T,eAAgB,SAAU1T,GACtB,OAAOzuG,KAAKwhH,WAAW/S,IAS3BoT,qBAAsB,SAAUl3F,GAC5B,OAAOA,EAAQxqB,OAASH,KAAKmhH,aAQjCiB,cAAe,SAAUC,GACrBriH,KAAKmhH,YAAckB,EACnBriH,KAAK1B,OAAS0B,KAAK2hH,QAAQ3hH,KAAK1B,MAAO0B,KAAK0hH,mBAAmB1hH,KAAK1B,YAI5E,EAAAoC,EAAAC,SAAU,qBAAsBwxD,aAEjBA,qGC1Of,wDAAAh1D,EAAA,eAEegM,UAASiF,MAAM7I,QAC1BuJ,YAAa,QACbynE,SAAU,WACN,OAAOv2E,KAAK9B,IAAI,UAAY8B,KAAK9B,IAAI,8DCJ7C,SAASuhH,IACLz/G,KAAK6/G,gBACL7/G,KAAKsiH,cAAgB,mDAGzB7C,EAAiBxgH,WACbygH,SAAU,aAEVM,kBAAmB,aAEnB9hH,IAAK,SAAUgW,GACX,OAAOlU,KAAK6/G,aAAa3rG,IAG7BlO,IAAK,SAAUu8G,GACX,IAAI5C,EAAiB3/G,KAAK6/G,aAG1B,OAFA7/G,KAAK6/G,aAAe0C,MACpBviH,KAAK0/G,SAASC,GACP3/G,MAGX47G,mBAAoB,WAChB,OAAO57G,KAAK6/G,aAAa1/G,QAG7Bq+G,eAAgB,SAAUgE,GACtB,GAAIA,EACA,IAAK,IAAInlH,EAAI,EAAGA,EAAI2C,KAAK6/G,aAAa1/G,OAAQ9C,IACtC2C,KAAK6/G,aAAaxiH,GAAG2O,KAAOw2G,EAAYx2G,IACxChM,KAAK8yG,UAAUz1G,GAK3B,OAAO2C,MAGX8yG,UAAW,SAAU5+F,GAGjB,OAFAlU,KAAKsiH,aAAepuG,EACpBlU,KAAKggH,oBACEhgH,MAGX8gH,kBAAmB,WACf,IAAIpxG,EAAU1P,KAAKsiH,aACfG,EAAmC,IAAZ/yG,EAAiBA,EAAWA,EAAU,EAEjE,OADA1P,KAAK8yG,UAAU2P,GACRziH,MAGX+gH,cAAe,WACX,IAAIrxG,EAAU1P,KAAKsiH,aACfI,EAAmBhzG,IAAY1P,KAAK6/G,aAAa1/G,OAAS,EAAKuP,EAAWA,EAAU,EAExF,OADA1P,KAAK8yG,UAAU4P,GACR1iH,MAGXy8G,YAAa,WACT,OAAOz8G,KAAK9B,IAAI8B,KAAKsiH,eAGzBrC,iBAAkB,WACd,OAAOjgH,KAAKsiH,yBAIL7C,qGCnEf,QAAAtiH,EAAA,QACAA,EAAA,QACAA,EAAA,SACAA,EAAA,wDAEA,SAASwlH,EAAoBC,EAAQ1uG,GACjC,OAAO0uG,EAAS,IAAM1uG,EAuC1B,SAASsrG,EAAiB1nG,EAAS+sC,GAC/B7kD,KAAKgI,GAAK8P,EACV9X,KAAK6kD,OAASA,EAGlB,SAASg+D,EAAa/qG,IAClB,EAAAoK,EAAAvhB,SAAEmX,GAAStC,KAAK,sBAAsB2pC,YAAY,qBAGtDqgE,EAAgBvgH,WACZ0Y,OAAQ,SAAU4qG,EAAaO,EAAeF,GAC1C5iH,KAAK+iH,WAAaH,EAClB,IAAI9oF,EAAO,GAGX,GAAIyoF,EAAYpiH,OAAQ,CACpB,IAAI9C,EAAIylH,EACRP,EAAYl7G,QAAQ,SAAU27G,GAC1B,IAAI1iE,EAAQ0iE,EAAKzsC,WACb0sC,EAAWD,EAAK9kH,IAAI,WACpBglH,EAAQD,eAAwBA,EAAxB,MAAwC,GAChDE,EAAeH,EAAK9kH,IAAI,aAAT,SAAiC2B,UAAKE,QAAQ,wBAA9C,SAAgF,GACnG+5B,0DAA+D6oF,EAAmBC,EAAQvlH,GAA1F,KAAiG6lH,EAAQ5iE,EAAQ6iE,EAAjH,QACA9lH,MAIAylH,EACA9iH,KAAKgI,GAAGiY,cAAc,MAAMkB,WAAa2Y,EAEzC95B,KAAKgI,GAAGiY,cAAc,MAAMkB,UAAY2Y,OAEpCgpF,IACR9iH,KAAKgI,GAAGiY,cAAc,MAAMkB,UAA5B,uDAA+FthB,UAAKE,QAAQ,6BAA5G,SAGJ,OAAOC,MAEXkgH,UAAW,SAAUjrC,GACjB4tC,EAAY7iH,KAAKgI,KACjB,EAAAka,EAAAvhB,SAAEX,KAAKgI,IAAIwN,KAAK,IAAMmtG,EAAmB3iH,KAAK+iH,WAAY9tC,IAASxxD,SAAS,sBAEhFg7F,UAAW,WACP,OAAOz+G,KAAKgI,GAAGiY,cAAc,uBAEjC+D,KAAM,YAjDV,SAAqBo/F,IACjB,EAAAlhG,EAAAvhB,SAAEyiH,EAAKp7G,IAAIO,IAAI,aAAa,EAAA2Z,EAAAvhB,SAAEyiH,EAAKv+D,QAAQyJ,cAiDvC+0D,CAAWrjH,OACX,EAAAmiD,EAAAxhD,SAAMX,KAAKgI,IAAIgc,OA/EvB,SAA0Bo/F,GAClBA,EAAKv+D,SAAWu+D,EAAKjiE,gBACrBiiE,EAAKjiE,cAAgB,IAAI/Q,UAAUgzE,EAAKp7G,GAAIo7G,EAAKv+D,QAC7C3T,cAAe,eACfU,eAAe,EACfT,iBAAiB,KAIrBiyE,EAAKjiE,gBACLiiE,EAAKjiE,cAAcnkB,SACnBomF,EAAKjiE,cAAc1O,kBAqEnBkV,CAAgB3nD,OAEpBmkB,KAAM,WACF0+F,EAAY7iH,KAAKgI,KACjB,EAAAm6C,EAAAxhD,SAAMX,KAAKgI,IAAImc,OArEvB,SAA2Bi/F,GACnBA,EAAKjiE,eACLiiE,EAAKjiE,cAAcpkB,UAoEnBurB,CAAiBtoD,OAErBkR,QAAS,WACLlR,KAAKmkB,OAnEb,SAA2Bi/F,GACnBA,EAAKjiE,gBACLiiE,EAAKjiE,cAAcjwC,iBACZkyG,EAAKjiE,eAiEZD,CAAiBlhD,aACVA,KAAK+iH,YAEhB9+F,UAAW,WACP,OAAO,EAAA/B,EAAAvhB,SAAEX,KAAKgI,IAAIkd,GAAG,wBAIds6F,qGC9Gf,wDAAAriH,EAAA,gBAEe,EAAAqnD,EAAA7jD,SAAA,g1BCCNA,WAHTxD,EAAA,IACAA,EAAA,IACAA,EAAA,oFCFAA,EAAA,IACAA,EAAA,IACA,QAAAA,EAAA,IACAmmH,EAAAnmH,EAAA,IACA2hD,EAAA3hD,EAAA,QACAA,EAAA,SACAA,EAAA,QACAA,EAAA,SACAA,EAAA,IACA6gC,EAAA7gC,EAAA,QACAA,EAAA,KACAqhD,EAAArhD,EAAA,eACAA,EAAA,uDAEA,SAASomH,EAAgBzrG,GACjBA,EAAQ0rG,mBACR1rG,EAAQuL,cAAc,IAAIJ,UAAY,UAAYC,SAAS,KAInE,SAASugG,EAAU3rG,GACf,OAAOA,EAAQ0jG,SAAW1jG,EAAQ0jG,OAAS1jG,EAAQmI,cAAc,UAGrE,SAASyjG,EAAY5rG,GACjB,OAAOA,EAAQ0mC,WAAa1mC,EAAQ0mC,SAAW,IAAIx9B,WAGvD,SAAS2iG,EAAwBvwE,EAAet7B,GAC5C2rG,EAAS3rG,GAAS2J,gBAAgB2xB,GAGtC,SAASwwE,EAAyBxwE,EAAet7B,EAASwsC,GACtDm/D,EAAS3rG,GAASqI,aAAaizB,EAAekR,EAAOhjC,UAGzD,SAASuiG,EAAqBzwE,GAC1B,OACIlgC,QAASywG,EAAwB9kH,KAAKmB,KAAMozC,GAC5C7e,SAAUqvF,EAAyB/kH,KAAKmB,KAAMozC,IAItD,IAAM0wE,GACF5wG,QAAS,SAAU4E,GACf6rG,EAAwBnmH,KAAKwC,KAAM,OAAQ8X,GAC3CA,EAAQisG,QAAU,MAEtBxvF,SAAU,SAAUzc,EAASwsC,GACzBs/D,EAAyBpmH,KAAKwC,KAAM,OAAQ8X,EAASwsC,GACrDxsC,EAAQisG,QAAUz/D,EAAOhjC,WAI7B0iG,GACA9wG,QAASywG,EAAwB9kH,UAAxBgK,EAAmC,MAC5C0rB,SAAU,SAAUzc,EAASwsC,GACzB,IAAM/9C,KAAS+9C,EAAOhjC,SAAWoyB,eACjC+vE,EAAS3rG,GAASqI,aAAa,KAAM5Z,KAIzC09G,GACA/wG,QAAS,SAAS4E,GACd6rG,EAAwBnmH,KAAKwC,KAAM,QAAS8X,GAG5C2rG,EAAS3rG,GAASxZ,MAAQ,MAE9Bi2B,SAAU,SAAUzc,EAASwsC,GACzBs/D,EAAyBpmH,KAAKwC,KAAM,QAAS8X,EAASwsC,KAI1DH,GACAjxC,QAAS,SAAU4E,GACf2rG,EAAS3rG,GAASktC,SAAU,EAC5Bu+D,EAAgBzrG,IAEpByc,SAAU,SAAUzc,GAChB2rG,EAAS3rG,GAASktC,SAAU,EAC5Bu+D,EAAgBzrG,KAIpBosG,GACAhxG,QAAS,SAAU4E,GACf2rG,EAAS3rG,GAAS2J,gBAAgB,eAEtC8S,SAAU,SAAUzc,EAASwsC,GACzBm/D,EAAS3rG,GAASqI,aAAa,aAAcmkC,EAAOhjC,YAgD5D,IAAM6iG,GAAW,EAAAljG,EAAAtgB,SAAM,cAInBugB,UAAU,EAAAsjC,EAAA7jD,SACN,6DACA,iCACA,qFACA,2FACA,WAEJ0gB,QAAS,SAAUvJ,GACf2rG,EAAS3rG,GACT4rG,EAAW5rG,GAASqI,aAAa,OAAQnB,OAAKC,MAAMrhB,OAEpD,EAAAskB,EAAAvhB,SAAE8iH,EAAS3rG,IAAUgoB,SACjBxhB,MAAO,WACH,OAAOte,KAAKglD,QAAUhlD,KAAKi5B,aAAa,cAAgBj5B,KAAKi5B,aAAa,gBAE9E25C,QAAS,IACT/xC,WAAW,IAzCvB,SAA2B/oB,GACvB2rG,EAAS3rG,GAAS8F,iBAAiB,UAAW,SAAU1X,GAChD4R,EAAQ6mC,MAAQz4C,EAAE/E,UAAYA,UAAQ8B,OACtCiD,EAAEoiB,mBAIN+lB,UAAUC,UAAU1uB,cAActb,QAAQ,YAAc,GACxDm/G,EAAS3rG,GAAS8F,iBAAiB,QAAS,SAAU1X,GAC9C4R,EAAQ6mC,MACRz4C,EAAEoiB,oBAKT,EAAAw2B,EAAA5Q,yBACDp2B,EAAQ0jG,OAAO59F,iBAAiB,QAAS,kBAAM9F,EAAQ25B,UAAUn/B,IAAI,YACrEwF,EAAQ0jG,OAAO59F,iBAAiB,OAAQ,kBAAM9F,EAAQ25B,UAAUl/B,OAAO,aA0BvE6xG,CAAkBtsG,GACdA,EAAQ6M,aAAa,YACrB8+F,EAAS3rG,GAASqI,aAAa,UAAW,IAE9CrI,EAAQ0rG,mBAAoB,GAEhCpiG,SAAU,SAAUtJ,IAChB,EAAAyxC,EAAA5oD,SAAQmX,GAASq7B,gBAAgB,UAErChoC,QACI6wB,MA5ER,SAAsBlkB,EAAS5R,GAC3B,IAAIumB,EAAQg3F,EAAS3rG,GAChBA,EAAQyrB,UAAazrB,EAAQ6mC,MAAQz4C,EAAEsiB,SAAWiE,IACnDA,EAAMu4B,SAAWv4B,EAAMu4B,UAG3B,EAAAs+D,EAAAz8D,qBAAoB/uC,EAAS,UAAW2U,EAAMu4B,WAwE9Cj6C,YACIiB,GAAIg4G,EACJh/D,QAASb,EACT5gB,SAAUsgF,EAAoB,YAC9BntC,KAAMotC,EACNlmH,KAAMimH,EAAoB,QAC1BvlH,MAAO2lH,EACPI,cACI/lH,MAAOszD,UAAK7xD,QAAQ,iBACpBw0B,SAAU,SAAUzc,EAASwsC,GACzBm/D,EAAS3rG,GAASqI,aAAa,aAAcmkC,EAAOhjC,UAAYswC,UAAK7xD,QAAQ,oBAGrFukH,eACIhmH,MAAOszD,UAAK7xD,QAAQ,kBACpBw0B,SAAU,SAAUzc,EAASwsC,GACzBm/D,EAAS3rG,GAASqI,aAAa,cAAemkC,EAAOhjC,UAAYswC,UAAK7xD,QAAQ,qBAGtFugD,MAAO4jE,GAEXjlH,WACIq9B,MAAO,WAEH,OADAmnF,EAASzjH,MAAMs8B,QACRt8B,MAEXglD,cACI,OAAOy+D,EAASzjH,MAAMglD,SAE1BA,YAAa1mD,GAILmlH,EAASzjH,MAAMglD,UAAY1mD,IAC3BmlH,EAASzjH,MAAMglD,QAAU1mD,GACzB,EAAAglH,EAAAz8D,qBAAoB7mD,KAAM,UAAW1B,KAG7CilC,eAII,OAAOkgF,EAASzjH,MAAMujC,UAE1BA,aAAcjlC,GACV,OAAO,EAAAglH,EAAAz8D,qBAAoB7mD,KAAM,WAAY1B,IAEjDo4E,WACI,OAAO3vE,SAAS0f,eAAezmB,KAAK+jH,UAExCrtC,SAAUp4E,GAEN,OADAwlH,EAAqBvvF,SAAS/2B,KAAKwC,KAAMA,MAAQshB,SAAUhjB,GAAS,OAC7D0B,KAAK02E,MAEhB94E,WACI,OAAO6lH,EAASzjH,MAAMpC,MAE1BA,SAAUU,GAEN,OADA0B,KAAKmgB,aAAa,OAAQ7hB,GACnBA,GAEXA,YACI,OAAOmlH,EAASzjH,MAAM1B,OAE1BA,UAAWA,GACP,IAAIimH,EAAmB,OAAVjmH,EAAiB,GAAKA,EAEnC,OADA0B,KAAKmgB,aAAa,QAASokG,GACpBA,GAEX5lE,WACI,MAAoD,SAA7C8kE,EAASzjH,MAAMi5B,aAAa,cAEvC0lB,SAAUrgD,GACN,IAAMmuB,EAAQg3F,EAASzjH,MACjBk2C,EAAUwtE,EAAW1jH,MAsB3B,OApBA,EAAAsjH,EAAAz8D,qBAAoB7mD,KAAM,OAAQ1B,GAE9BA,GACAmuB,EAAMtM,aAAa,YAAa,QAChCsM,EAAM+3F,eAAgB,EAClBxkH,KAAKglD,SACLv4B,EAAMglB,UAAUn/B,IAAI,0BACpB,EAAA4P,EAAAvhB,SAAEX,KAAKigB,cAAc,qBAAqBg2B,OAAOC,KAEjD,EAAAh0B,EAAAvhB,SAAEX,KAAKigB,cAAc,sBAAsBg2B,OAAOC,KAGtDzpB,EAAMglB,UAAUl/B,OAAO,yBACvBka,EAAM+3F,eAAgB,EACtB/3F,EAAMhL,gBAAgB,aAClBy0B,EAAQ31B,YACR21B,EAAQ31B,WAAWnC,YAAYpe,KAAKw+C,WAjKxD,SAA8B1mC,EAASyrB,GAC9BzrB,EAAQ9L,IAGb3L,MAAMpB,UAAUoI,QAAQ7J,KAAKuJ,SAASC,iBAAT,kBAA4C8Q,EAAQ9L,GAApD,MAA6D,SAAUhE,GAChGA,EAAGu7B,SAAWA,IA+JVkhF,CAAqBzkH,OAAQ1B,GACtBA,gBAKJ6lH,iWC9QNxjH,0FAAyB+jH,iBAHlCvnH,EAAA,GACAA,EAAA,GACAA,EAAA,2GCFA,QAAAA,EAAA,IACA4hB,EAAA5hB,EAAA,QACAA,EAAA,IACAu5C,EAAAv5C,EAAA,IACYkwC,0JAAZlwC,EAAA,SACAA,EAAA,uDAEA,IAAMwnH,EAAuB,sCACvBC,EAAwB,uCACxBC,EAAgB,oCA4CtB,SAASC,EAAmBC,EAAaC,EAAzCllG,GAA2F,IAA1BmlG,EAA0BnlG,EAA1BmlG,gBAAiB3mH,EAASwhB,EAATxhB,MACxE4mH,GAAe,EAAAhjG,EAAAvhB,SAAEokH,GACjBI,GAAwB,EAAAjjG,EAAAvhB,SAAEqkH,GAEX,iBAAV1mH,GAAsBA,GAAS,GAAKA,GAAS,IACpD6mH,EAAsB53G,QAAQq3G,GAAwBK,EAAiB3mH,IAGvE4mH,EAAaE,IAAIP,EAAe,WAC5BM,EAAsB53G,QAAQo3G,GAAuBM,EAAiB3mH,MAlDlF,SAAwB4mH,EAAcC,EAAuBE,IACzD,EAAA3uE,EAAAjZ,gBAAeynF,GACfA,EAAa38G,IAAI,QAAyB,IAAhB88G,EAAsB,KAChDF,EAAsBx+G,KAAK,aAAc0+G,GAiDrCC,CAAeJ,EAAcC,EAAuB7mH,IAI5D,SAASinH,EAAkCztG,GACvC,IAAIqtG,GAAwB,EAAAjjG,EAAAvhB,SAAEmX,GAASpD,QACnCwwG,EAAeC,EAAsBtuE,SAAS,iCAElDsuE,EAAsB1gF,WAAW,eACjC,EAAAiS,EAAAjZ,gBAAe0nF,GACfD,EAAa38G,IAAI,QAAS,IAG9B,IAAM+W,GACFklG,eAAe,EACf/2G,IAAK,EACLlH,IAAK,GAGT,SAASi/G,EAAaj/G,GAClB,OAAO,EAAAwY,EAAAgU,UAASxsB,KAAQ,EAAAwY,EAAA6T,UAASrsB,MAAS,EAAAwY,EAAA+H,OAAMvgB,GAGpD,SAASk/G,EAAal/G,GAAqB,IAAhB2D,EAAgBhK,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAAH,EAC9BwlH,EAAM5yF,WAAWvsB,GACvB,OAAOi/G,EAAaE,GAAOA,EAAMC,OAAOz7G,GAG5C,SAAS07G,EAAaF,GAAoB,IAAfG,EAAe3lH,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAAH,EACnC,OAAOylH,OAAO7yF,WAAW4yF,GAAKI,QAAQD,IAe1C,SAASE,EAAKjtG,GAAM,IACRvS,EAAauS,EAAbvS,IACFy/G,EAVV,SAAiBv4G,GACb,OAAOA,EAAM,EAAIA,EAAM6R,EAAS7R,IASdw4G,CADGntG,EAARrL,KAEPy4G,EAfV,SAAmB3/G,EAAKkH,GACpB,OAAOD,KAAKC,IAAI,EAAGD,KAAKsF,IAAIvM,EAAKkH,IAcf04G,CAAU5/G,EAAKy/G,GAC3BI,EAAgBR,EAAaM,EAAYF,EAAW,GAE1D,OAAQv4G,IAAKu4G,EAAWz/G,IAAK2/G,EAAWE,gBAAeC,aADlCT,EAA6B,IAAhBQ,EAAqB,IAI3D,SAASvmG,EAAQ7X,GAAI,IAAAs+G,EACiBP,EAAK/9G,EAAG+X,OAAnCxZ,EADU+/G,EACV//G,IAAK6/G,EADKE,EACLF,cAAe34G,EADV64G,EACU74G,IACrB84G,EAAMv+G,EAAGiY,cAAc,2BACvB3Z,EAASigH,EAAIttF,aAAa,cAE5BjxB,EAAGw8G,eACH+B,EAAI9kG,gBAAgB,iBACpB8jG,EAAkCgB,KAElCA,EAAIpmG,aAAa,gBAAiB5Z,GAClCggH,EAAIpmG,aAAa,gBAAiB1S,GAClCq3G,EAAmByB,EAAItmG,cAAc,iCAAkCsmG,GACnEtB,gBAAiB3+G,EACjBhI,MAAO8nH,KAKnB,SAASI,EAASx+G,EAAI8Q,GAClB9Q,EAAG+X,MAAMxZ,IAAMk/G,EAAa3sG,EAAKwI,SAAUxI,EAAKqzB,UAAY7sB,EAAS/Y,KACrEsZ,EAAQ7X,GAGZ,SAASy+G,EAAOz+G,EAAI8Q,GAChB9Q,EAAG+X,MAAMtS,IAAMg4G,EAAa3sG,EAAKwI,SAAUxI,EAAKqzB,UAAY7sB,EAAS7R,KACrEoS,EAAQ7X,GAGZ,IAAM08G,GAAgB,EAAAzjG,EAAAtgB,SAAM,mBACxBugB,SAD2C,SAClClZ,GAGLA,EAAG+X,MAAMtS,IAAMg4G,EAAaz9G,EAAGixB,aAAa,OAAQ3Z,EAAS7R,KAC7DzF,EAAG+X,MAAMxZ,IAAMk/G,EAAaz9G,EAAGixB,aAAa,SAAU3Z,EAAS/Y,KAC/DyB,EAAG+X,MAAMykG,cAAgBx8G,EAAG2c,aAAa,iBALhC,IAAA+hG,EAMuCX,EAAK/9G,EAAG+X,OAAjDxZ,EANEmgH,EAMFngH,IAAKkH,EANHi5G,EAMGj5G,IAAK24G,EANRM,EAMQN,cAAeC,EANvBK,EAMuBL,aAE1BM,EAAc3+G,EAAG+X,MAAMykG,cAAgB,GAAzB,eAA6C4B,EAA7C,IAEpBp+G,EAAGmZ,UAAH,iDACGwlG,EADH,sFAIkBpgH,EAJlB,8BAKkBkH,EALlB,sGAQ2D44G,EAR3D,0BAYJjlG,SAvB2C,SAuBlCpZ,GACL6X,EAAQ7X,IAGZ+C,YACIy5G,eACInjG,QAAS,SAASrZ,GACdA,EAAGw8G,eAAgB,GAEvBtxG,QAAS,SAASlL,GACdA,EAAGw8G,eAAgB,IAG3BlmH,OACIA,MAAOghB,EAAS/Y,IAChBguB,SAAU,SAAUvsB,EAAI8Q,GACpB,GAAI9Q,EAAG4+G,UAAY,OAAO,EAC1BJ,EAASx+G,EAAI8Q,KAGrBrL,KACInP,MAAOghB,EAAS7R,IAChB8mB,SAAU,SAAUvsB,EAAI8Q,GACpB,GAAI9Q,EAAG4+G,UAAY,OAAO,EAC1BH,EAAOz+G,EAAI8Q,MAKvB7Z,WACI8gB,YACI,OAAO/f,KAAKuhB,SAAWvhB,KAAK+f,OAAQ,EAAAhB,EAAAtQ,aAAa6Q,KAErDS,UAAUpiB,GACN,OAAOqC,KAAKuhB,OAAS5jB,GAEzB6mH,oBACI,OAAOxkH,KAAK+f,MAAMykG,eAEtBA,kBAAkBj+G,GACdvG,KAAK+f,MAAMykG,gBAAkBj+G,EAC7BsZ,EAAQ7f,OAEZ1B,YAEI,OADgBynH,EAAK/lH,KAAK+f,OAAlBxZ,KAGZjI,UAAUonH,GACN,IAAKF,EAAaE,GAAO,OAAO,EAChC,IAAM5sG,GAASwI,SAAUskG,EAAaF,EAAK,IAC3C1lH,KAAK4mH,WAAY,EAEjB5mH,KAAKmgB,aAAa,QAASrH,EAAKwI,UAChCthB,KAAK4mH,WAAY,EACjBJ,EAASxmH,KAAM8Y,IAEnBrL,UAEI,OADgBs4G,EAAK/lH,KAAK+f,OAAlBtS,KAGZA,QAAQi4G,GACJ,IAAKF,EAAaE,GAAO,OAAO,EAChC,IAAM5sG,GAASwI,SAAUskG,EAAaF,EAAK,IAC3C1lH,KAAK4mH,WAAY,EAEjB5mH,KAAKmgB,aAAa,MAAOrH,EAAKwI,UAC9BthB,KAAK4mH,WAAY,EACjBH,EAAOzmH,KAAM8Y,OAKnB+tG,GACFptG,OAAQ4zB,EAAU3nC,GA9NtB,SAA+BoS,EAASxZ,GACpC,GAAuB,iBAAZwZ,EAAsB,CAC7B,IAAI9P,EAAKjB,SAAS0f,eAAe3O,GAC7B9P,IACA8P,EAAU9P,GAGlB,IAAIm9G,GAAwB,EAAAjjG,EAAAvhB,SAAEmX,GAASpD,QACnCwwG,EAAeC,EAAsBtuE,SAAS,iCAC9CiwE,EAAiB3B,EAAsBx+G,KAAK,cAC5CogH,GAAmBD,EACnB7B,EAAkBnyF,WAAWg0F,IAAmB,EAChDE,EAAuBF,GAAkB7B,IAAoB3mH,EAQjE,GALI0oH,IAEAA,EAAuB/B,IAAgD,KADtCnyF,WAAWoyF,EAAahnH,IAAI,GAAG+e,MAAM8G,QAAU,KAIhFijG,EAWJ,OANID,GACA7B,EAAa38G,IAAI,QAAS,GAG9Bu8G,EAAmBI,EAAcC,GAAyBF,kBAAiB3mH,UAEpE6mH,GA+LqC,2BACxCpgH,aAAc,QACdC,gBAAiB,QACjBE,UAAW,oDAEf+hH,iBAAkB55E,EAAU3nC,GAAG6/G,EAAmC,qCAC9DxgH,aAAc,QACdC,gBAAiB,QACjBE,UAAW,sDAInB,EAAAxE,EAAAC,SAAU,eAAgBkmH,aAEXA,IAEXnC,iHCjQJvnH,EAAA,IACAA,EAAA,KACAA,EAAA,wHCFA,QAAAA,EAAA,IACAA,EAAA,KACA,QAAAA,EAAA,uDAEA,IAAI+pH,GACAC,iBAAkB,GAClBC,WACAC,OAAO,EACPlqG,UAAU,GAGd,SAASmqG,EAAUC,GACf,IAAI7jH,EAAUwjH,EACdK,EAAO/xG,KAAK,MAAM3L,KAAK,SAAUqK,EAAOo8C,GAEpC,IAAIjC,GAAU,EAAAnsC,EAAAvhB,SAAE2vD,GAChB5sD,EAAQ0jH,QAAQlzG,MACZm6C,EAAQroB,SAAS,+BACjBtiC,EAAQ0jH,QAAQlzG,GAAOszG,QAAS,GAEhCn5D,EAAQ1nD,KAAK,WAAY,KACzB0nD,EAAQo5D,UAAU,4CACdp5D,EAAQroB,SAAS,gCACjBtiC,EAAQ0jH,QAAQlzG,GAAOszG,OAAS,gBAI5CD,EAAOG,YAAYhkH,GAGvB,IAAI8uD,GACAoc,MAAO,WAUHrvE,UAAEmoH,YAAYC,WACV37G,GAAI,YACJkZ,GAAI,WACA,OAAO,GAGX3kB,OAAQ,SAAUnB,GACd,IAAIwoH,EAAgBxoH,EAAEgF,MAAM,KACxByjH,EAAaD,EAAc,GAC3BE,EAAcF,EAAc,GAI5BG,GAAwBF,EAFD,cAEoCx+G,MAAM,EAF1C,aAEkElJ,QAG7F,OAFA4nH,IAF4B,SAEqBD,GAAaz+G,OAFlC,SAE+DlJ,SAK/FwY,KAAM,SAOVpZ,UAAEmoH,YAAYC,WACV37G,GAAI,0BACJkZ,GAAI,SAAUmV,EAAW2tF,EAAOhwF,GAC5B,OAAOA,EAAKrT,aAAa,sBAAwBqT,EAAKrT,aAAa,mBAA6D,SAAxCqT,EAAKiB,aAAa,oBAE9G14B,OAAQ,SAAU85B,EAAW2tF,EAAOhwF,GAChC,OAAOA,EAAKiB,aAAa,oBAE7BtgB,KAAM,SAOVpZ,UAAEmoH,YAAYC,WACV37G,GAAI,6BACJkZ,GAAI,SAAUmV,EAAW2tF,EAAOhwF,GAC5B,MAA+C,YAAxCA,EAAKiB,aAAa,mBAAmCjB,EAAKrT,aAAa,oBAElFpkB,OAAQ,SAAU85B,EAAW2tF,EAAOhwF,GAChC,OAAOA,EAAKiB,aAAa,oBAE7BtgB,KAAM,aAGV,EAAAuJ,EAAAvhB,SAAE,uBAAuBkJ,KAAK,WAC1By9G,GAAU,EAAAplG,EAAAvhB,SAAEX,UAIpBioH,iBAAkB,SAAUV,GACxBD,EAAUC,MAIlB,EAAArlG,EAAAvhB,SAAE6xD,EAAeoc,QAEjB,EAAAluE,EAAAC,SAAU,iBAAkB6xD,aAEbA,sCCzFf,SAAAjzD,GACA,aACAA,EAAAgG,QAEAmiH,YAAA,eAEA,IAAAQ,EAAAloH,KAqHA,SAAAgB,IACA,IAAAolB,EAAAlmB,UAAA,GACAd,EAAAc,UAAAC,OAAA,EAAAE,MAAApB,UAAAoK,MAAA7L,KAAA0C,WAAAkmB,EACA,oBAAAtlB,cAAA,IAAAA,QAAAE,IACAF,QAAA,SAAAyK,KAAA6a,GAAA,gBAAA7a,KAAA6a,GAAA,cAAAhnB,GAEA+oH,MAAA/oH,GAIA,SAAAgpH,EAAAhpH,EAAAzB,GACAqD,EAAA5B,EAAA,WAAAk0B,MAAAC,UAAA51B,EAAA41B,WAAA,OAOA,SAAAuT,EAAA1gC,GAEA,QAAAxI,KAAAwI,EACA,SAEA,SAGA,SAAAiiH,EAAAL,EAAAhwF,EAAAswF,GACA,IAAAtwF,EAA4B,SAC5B,IAAAuwF,EAAA7qH,EAAAsqH,EAAAQ,OACAjqH,EAAAb,EAAA+qH,gBAAA,GACApzF,EAAA,GAcA,OAXAA,EAFA,UAAA92B,EAEAgB,EAAAy4B,GAAArxB,KAAAjJ,EAAAgrH,gBAAA1wF,EAAAU,aAAAV,EAAA2wF,WAAAppH,EAAAy4B,GAAA3C,QAAA,GAEA,qBACA92B,EAAAy5B,EAAAgwF,EAAAM,GACqB,mBAAAC,EAAAL,EAAAU,cAAAZ,EAAAzpH,EAAA+pH,IACrBC,EAAAvwF,EAAAgwF,EAAAM,GAGAtwF,EAAAU,aAAAV,EAAA2wF,WAAAppH,EAAAy4B,GAAA3C,QAAA,GAGA91B,EAAA0nE,KAAA5xC,GAGA,SAAAwzF,EAAAb,EAAAc,EAAAC,EAAAT,GAMA,IALA,IAAA3jD,EACAtnE,EAAA6qH,EAAAc,QAAA7oH,OACA63B,GAAA,EACAqC,EAAA,GACA4uF,GAAA,EACA,KAAA5uF,GAAA4uF,GAEAH,IADAC,IAGA1uF,EAAAguF,EAAAL,EADAhwF,EAAA8wF,EAAAC,GAAAG,MAAAZ,GACAA,GACAN,EAAAQ,OAAAnB,OACArmH,EAAA,sCAAA+nH,EAAA,aAAAT,EAAA,MAAAjuF,EAAA,MAGA4uF,GAAA,EAGA,OAAA5rH,GAAA,GAGA,IAFAsnE,EAAAujD,EAAAc,QAAA3rH,KAEA,SAAAsnE,EAAA34D,IAAA24D,EAAAz/C,IAAAy/C,EAAAz/C,GAAAmV,EAAA2tF,EAAAhwF,GACA,OAAA2sC,EAIA,OAAAujD,EAAAiB,cAAA,QAGA,SAAAC,EAAApB,GACA,IAGAc,EAAA39F,EAAA7tB,EAAAD,EAAAgsH,EAAAC,EAAAC,EAAApqH,EAAA+G,EAAAsjH,EAHA9rH,EAAAsqH,EAAAQ,OAEAiB,EAAA/rH,EAAAgsH,SAAAhsH,EAAA6pH,OAAA1wE,SAAA,cAAAn5C,EAAAisH,aAAA,KAEA58G,EAAA,EACA68G,EAAA,GACA78F,EAAA08F,EAAAtpH,OACA,OAAA4sB,EACA,OAAArvB,EAAA2pH,MAAArmH,EAAA,0DASA,IARiBtD,EAAA2pH,QACjBmC,EAAA,IAAAl2F,KACAtyB,EAAA,sCAEAmqB,GACA0+F,cACAb,YAEAj8G,EAAAggB,GAAA,CAEA,IADA+7F,EAAAW,EAAA18G,GAAA+7G,MACA/7G,GAEA,IADAzP,EAAAI,EAAAosH,QACAzsH,EAAA,EAAmCA,EAAAC,EAAOD,IAC1CgsH,EAAA3rH,EAAAqsH,SAAAr0G,OAAA,iBAAArY,EAAA,WAEAisH,EAAApB,EAAAU,cAAAZ,EAAAtqH,EAAA0pH,QAAA/pH,GAEA6I,EAAAgiH,EAAAiB,cAAAjB,EAAAjyF,QAAAozF,EAAAC,EAAA,cACAnqH,EAAA+oH,EAAAiB,cAAAjB,EAAAjyF,QAAAozF,EAAAC,EAAA,WACAC,EAAA,UAAArB,EAAAjyF,QAAAozF,EAAAC,EAAA,UAEA5rH,EAAAssH,QAAA3sH,GAAA6qH,EAAAjyF,QAAAozF,EAAAC,EAAA,UAAA5rH,EAAAusH,UAAAvsH,EAAAwsH,cAAA,gBAEAxsH,EAAAysH,QAAA9sH,GAAA6qH,EAAAjyF,QAAAozF,EAAAC,EAAA,WAAA5rH,EAAA0sH,UAAA,MACAb,IACApqH,EAAA+oH,EAAAiB,cAAA,cAEAjjH,IAEAA,GAAA,GAEA/G,IACAA,EAAA0pH,EAAAb,EAAAc,GAAA,EAAAzrH,IAEAK,EAAA2pH,QACAuC,GAAA,UAAAvsH,EAAA,eAAkE6I,EAAA8F,GAAA,YAAwB7M,EAAA6M,GAAA,YAAqBtO,EAAAysH,QAAA9sH,GAAA,YAA6BK,EAAAssH,QAAA3sH,GAAA,MAE5I8tB,EAAA69F,QAAA3rH,GAAA8B,EACAgsB,EAAA0+F,WAAAxsH,GAAA6I,EAGA6G,GAAAoe,EAAA69F,QAAA,OAAAj8F,EAAA,EAEArvB,EAAA2pH,QACArmH,EAAA4oH,GAAA,uBACAxB,EAAA,8BAAAoB,IAEA9rH,EAAAsrH,QAAA79F,EAAA69F,QACAtrH,EAAAmsH,WAAA1+F,EAAA0+F,WAIA,SAAAQ,EAAArC,GACA,IAAAsC,EAAA/rH,EAAAgsH,EAAA7+F,EAAAruB,EAAA0P,EAAAmrE,EAAAsyC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EACAntH,EAAAsqH,EAAAQ,OACAsC,EAAAptH,EAAA6pH,OAAA1wE,SAAA,SACAgzE,EAAAnsH,EAAAmsH,WACAb,EAAAtrH,EAAAsrH,QAIA,GAHAtrH,EAAA4xB,SACA5xB,EAAAitH,UAAA,GAEA3B,EACA,OAAAtrH,EAAA2pH,MAAArmH,EAAA,mDASA,IAPAtD,EAAA2pH,QACAqD,EAAA,IAAAp3F,MAGA51B,EAAAqtH,gBACA7C,EAAA8C,aAAAhD,GAAA,GAEA9vC,EAAA,EAA2BA,EAAA4yC,EAAA3qH,OAAgB+3E,IAQ3C,GAPA2yC,KACAP,EAAA5sH,EAAA4xB,MAAA4oD,IACA+yC,gBAKAH,EAAAp5F,GAAAwmD,GAAAlyC,SAAAtoC,EAAAisH,cAAA,CAEA,IADAgB,EAAAG,EAAA5yC,IAAA4yC,EAAA5yC,GAAA4wC,KAAA3oH,QAAA,EACA9C,EAAA,EAAmCA,EAAAstH,IAAettH,EAYlD,GAXAutH,GAGAjsG,UAGA6rG,EAAAjrH,EAAAurH,EAAA5yC,GAAA4wC,KAAAzrH,KACA,IAAAgD,MAAA3C,EAAAosH,UACAW,KAGAD,EAAAxkF,SAAAtoC,EAAAwtH,cAAA,IAAA7tH,EACAkB,EAAA+rH,EAAAW,WAAA9qH,OAAA,EACAmqH,EAAAW,WAAA1sH,GAAAb,EAAAosH,SAAAU,KAAAF,EAAAW,WAAA1sH,GAAAb,EAAAosH,SAAAU,KAAAl4G,IAAAk4G,GAEAA,EAAA76G,OAAAq2B,SAAAtoC,EAAAwtH,cACAV,EAAA76G,OAAA8T,SAAAykG,EAAA3/G,IAAA4iH,aAGAP,EAAAjsG,MAAApgB,GAAAgB,EAAA0nE,KAAAujD,EAAA,GAAA9xF,aAAA8xF,EAAA,GAAA7B,WAAA6B,EAAAn1F,QAAA,QARA,CAcA,IAFAu1F,EAAAJ,OACAI,EAAA9rD,MAAAzhE,EACA0P,EAAA,EAAuCA,EAAArP,EAAAosH,UAAe/8G,OACtD,IAAAi8G,EAAAj8G,IAMAxO,EAAA8pH,EAAAL,EAAAwC,EAAA,GAAAtB,MAAAn8G,MAGAw9G,OADA,IAAAV,EAAA98G,GAAAf,GACAzN,EAEAsrH,EAAA98G,GAAAxM,OAAAhC,EAAAypH,EAAAwC,EAAA,GAAAtB,MAAAn8G,MAIA2e,EAAA,cAAAs9F,EAAAj8G,GAAAf,GAAA,GAAAg9G,EAAAj8G,GAAAxM,OAAAgqH,EAAAvC,EAAAwC,EAAA,GAAAtB,MAAAn8G,MACA09G,EAAAlmH,KAAA7G,EAAA0tH,YAAA,iBAAA1/F,IAAA9L,cAAA8L,GACA,aAAAs9F,EAAAj8G,GAAA4L,MAAA,IAAAiH,gBAEAirG,EAAA99G,GAAAS,KAAAC,IAAAD,KAAAioC,IAAA/pB,IAAA,EAAAm/F,EAAA99G,IAAA,KAlBArP,EAAA2pH,OACArmH,EAAA,4BAAAwpH,EAAA,GAAAtB,MAAAn8G,GAAA,0BAqBA09G,EAAA/sH,EAAAosH,SAAAc,EACAN,EAAAW,WAAA1mH,KAAAkmH,GAEAH,EAAAO,SAEAntH,EAAAitH,WAAAL,EAAAW,WAAA9qH,OAGAzC,EAAAqtH,gBACA7C,EAAA8C,aAAAhD,GAEAtqH,EAAA2pH,OACAe,EAAA,sBAAAuC,EAAA,QAAAD,GAKA,SAAAW,EAAArD,EAAAhoF,GACA,IAKAlhC,EAAA6rH,EAAAW,EAAAR,EACAztH,EAAA66E,EAAAqzC,EANA7tH,EAAAsqH,EAAAQ,OACAgD,EAAA9tH,EAAA+tH,cACAx/F,EAAA+7F,EAAA0D,QACA5C,KACAwB,EAAA5sH,EAAA4xB,MAIA,GAAAwX,EAAAwjF,GAEA,OAAA5sH,EAAAiuH,SAAAjuH,EAAAiuH,SAAA3D,EAAAc,GACAd,EAAA4D,WAAAluH,EAAA6pH,OAAAh6G,QAAA,iBAAAy6G,GAAA,GAKA,IAHAtqH,EAAA2pH,QACAkE,EAAA,IAAAj4F,MAEA4kD,EAAA,EAA2BA,EAAAjsD,EAAA9rB,OAAc+3E,IAEzC,IADAozC,EAAA/rH,EAAA0sB,EAAAisD,KACA/3E,SAAAmrH,EAAAtlF,SAAAtoC,EAAAisH,cAAA,CAKA,IAHAmB,EAAA5C,EAAA2D,aAAA7D,EAAAsD,GAAA,GAEAX,GADA7rH,EAAAwrH,EAAApyC,GAAA+yC,YACA9qH,OACA9C,EAAA,EAAmCA,EAAAstH,EAAettH,IAClDyrH,EAAAvkH,KAAAzF,EAAAzB,GAAAK,EAAAosH,SAAAU,MAEA9sH,EAAAiuH,YAAAjuH,EAAAouH,OAAApuH,EAAAouH,MAAAC,YAAAP,EAAAQ,kBAAAtuH,EAAAouH,MAAAtyG,OACAsxG,EAAA70E,OAAAn3C,EAAAzB,GAAAK,EAAAosH,SAAAU,MAIAtC,EAAA2D,aAAA7D,EAAA8C,GAAA,GAGAptH,EAAAiuH,UACAjuH,EAAAiuH,SAAA3D,EAAAc,GAEAprH,EAAA2pH,OACAe,EAAA,gBAAAmD,GAGAvrF,GAAAtiC,EAAAiuH,UAA2CzD,EAAA+D,YAAAjE,GAC3CA,EAAA4D,YACAluH,EAAA6pH,OAAAh6G,QAAA,iBAAAy6G,GAIA,SAAAkE,EAAAxgG,GAEA,YAAAngB,KAAAmgB,IAAA,IAAAA,EAGA,SAAAygG,EAAAnE,GACA,IAAAsB,EAAA8C,EACA/C,EAAAhsH,EAAAkB,EAAA8tH,EAAA7C,EACA9rH,EAAAsqH,EAAAQ,OACA9qH,EAAA4uH,cACA5uH,EAAA6uH,iBACA7uH,EAAA2pH,QACAmC,EAAA,IAAAl2F,MAGA51B,EAAAosH,QAAA5B,EAAAsE,mBAAA9uH,EAAA6pH,OAAA1wE,SAAA,gBAAAA,SAAA,OAEAx5C,EAAAK,EAAA+uH,QAAA,cAAA/uH,EAAA+uH,UAAAvE,EAAA3/G,IAAAgnE,KAAA24C,EAAA3/G,IAAAgnE,KAAA7xE,EAAA+uH,QAAA,IAAAvE,EAAA3/G,IAAAgnE,MAAA,YAEA7xE,EAAAqsH,SAAAxqH,EAAAyoH,GAAAxyG,KAAA9X,EAAAgvH,iBAAA7iH,KAAA,SAAAqK,GACAk4G,EAAA7sH,EAAAS,MAEAspH,EAAApB,EAAAU,cAAAZ,EAAAtqH,EAAA0pH,QAAAlzG,GAAA,GAEAxW,EAAA6uH,cAAAr4G,GAAA3U,EAAAS,MAAA85B,OAEAv7B,EAAAb,EAAAivH,eAAAxoH,QAAA,eAA6D5E,EAAAS,MAAA85B,QAAA31B,QAAA,YAAqC9G,GAClGK,EAAAkvH,mBACAvD,EAAA3rH,EAAAkvH,iBAAApsH,MAAA4rH,GAAAl4G,EAAA3V,MACA,iBAAA8qH,IAAyD9qH,EAAA8qH,GAEzD9pH,EAAAS,MAAA85B,KAAA,eAAAouF,EAAA3/G,IAAAskH,SAAA,KAAAtuH,EAAA,UAEAb,EAAAovH,gBAA2CpvH,EAAAovH,eAAAtsH,MAAA4rH,GAAAl4G,IAC3ClU,KAAA+sH,OAAAlmG,SAAAtnB,EAAAS,MAAA2G,KAAA,mBACA3G,KAAA8+D,MAAAotD,EAAAhE,EAAAjyF,QAAAm2F,EAAA9C,EAAA,qBAAA5rH,EAAAsvH,mBAAA,eACAhtH,KAAAwM,OAAA,EACAxM,KAAAitH,aAAA,OAEA,KADAZ,EAAAnE,EAAAjyF,QAAAm2F,EAAA9C,EAAA,sBACA,IAAA+C,IACArsH,KAAA8+D,MAAA9+D,KAAAitH,YAAAf,EAAAG,IAAA,gBAEAD,EAAA3oG,SAAAykG,EAAA3/G,IAAA+nD,OAAA,IAAA5yD,EAAAwvH,WAEAxvH,EAAA4uH,WAAAp4G,GAAAlU,KAEAosH,EAAAxtG,SAAA6E,SAAAykG,EAAA3/G,IAAA4kH,UAAA,IAAAzvH,EAAA0vH,cAAAzmH,KAAA,cAEAjJ,EAAAyf,UAAqCivG,EAAAzlH,KAAA,gBACpBA,MACjB0mH,MAAA,MACAC,KAAA,iBAGAC,EAAAvF,GACAtqH,EAAA2pH,QACAe,EAAA,iBAAAoB,GACAxoH,EAAAtD,EAAAqsH,WAIA,SAAAyD,EAAAxF,EAAAyF,EAAAriH,GACA,IAAA1N,EAAAsqH,EAAAQ,OAEA9qH,EAAA6pH,OAAA/xG,KAAA9X,EAAAgwH,gBAAAn7G,SAEA62G,EAAApB,GAEAqC,EAAArC,GACA2F,EAAAjwH,EAAA6pH,OAAAkG,EAAAriH,GAGA,SAAAmiH,EAAAvF,GACA,IAAA5oH,EAAAwuH,EAAAC,EACAnwH,EAAAsqH,EAAAQ,OACA9qH,EAAAqsH,SAAAlgH,KAAA,SAAAqK,EAAA45G,GACAF,EAAAruH,EAAAuuH,GACAD,EAAA3F,EAAAU,cAAAZ,EAAAtqH,EAAA0pH,QAAAlzG,GAAA,GAEA9U,EAAA,UAAA8oH,EAAAjyF,QAAA63F,EAAAD,EAAA,qBAAA3F,EAAAjyF,QAAA63F,EAAAD,EAAA,UACAC,EAAAC,aAAA3uH,EACAwuH,EAAAxuH,EAAA,0CAAAuH,KAAA,mBAAAvH,GAEA4oH,EAAAh8G,KACA5M,EACAwuH,EAAAnpF,WAAA,iBAEAmpF,EAAAjnH,KAAA,gBAAAqhH,EAAAh8G,OAMA,SAAAgiH,EAAAhG,GACA,IAAAiG,EAAA5wH,EAAA0P,EACArP,EAAAsqH,EAAAQ,OACAr9F,EAAAztB,EAAAwwH,SACAnhG,EAAA5B,EAAAhrB,OACAguH,EAAAjG,EAAA3/G,IAAA6lH,SAAA,IAAA1wH,EAAA2wH,QACA9lH,GAAA2/G,EAAA3/G,IAAA+lH,QAAA,IAAA5wH,EAAA6wH,OAAArG,EAAA3/G,IAAAimH,SAAA,IAAA9wH,EAAA+wH,SACA3tF,GAAA,0BAEAsrF,EAAA7sH,EAAAyoH,GAAAxyG,KAAA,YAAAqhC,WAAAvkC,IAAA5U,EAAAgxH,eAAAvvE,YAAA52C,EAAA2rB,KAAA,MAKA,IAHAx2B,EAAAqsH,SACA5qE,YAAA52C,EAAA2rB,KAAA,MACAzQ,SAAA0qG,GAAAxnH,KAAA,oBACAtJ,EAAA,EAA2BA,EAAA0vB,EAAS1vB,IAEpC,OAAA8tB,EAAA9tB,GAAA,KAEA4wH,EAAAvwH,EAAAqsH,SAAAxkF,IAAA,iBAAA7vB,OAAA,iBAAAyV,EAAA9tB,GAAA,aAAA0vB,EAAA,cACA5sB,OAAA,CACA,IAAA4M,EAAA,EAAuCA,EAAAkhH,EAAA9tH,OAAc4M,IACrDkhH,EAAAlhH,GAAAghH,cACAE,EAAAv8F,GAAA3kB,GAAAoyC,YAAAgvE,GAAA1qG,SAAAlb,EAAA4iB,EAAA9tB,GAAA,KAAAsJ,KAAA,YAAAm6B,EAAA3V,EAAA9tB,GAAA,KAIA+uH,EAAAjsH,QACAisH,EAAA12G,OAAA,iBAAAyV,EAAA9tB,GAAA,SAAA8hD,YAAAgvE,GAAA1qG,SAAAlb,EAAA4iB,EAAA9tB,GAAA,KAMAK,EAAAqsH,SAAAxkF,IAAA,iBAAA17B,KAAA,WACA,IAAAo2B,EAAA1gC,EAAAS,MACA2uH,EAAA3uH,KAAA8+D,OAAA9+D,KAAAwM,MAAA,IAAA9O,EAAAkxH,UAAA,MACAC,EAAA5uF,EAAA5K,OAAA,KACA6yF,EAAA4G,SAAA7uF,EAAA+F,SAAAkiF,EAAA3/G,IAAA+lH,SAAA,UAAAruF,EAAA+F,SAAAkiF,EAAA3/G,IAAAimH,UAAA,uBACAtG,EAAA4G,SAAA,IAAAH,EAAA,cAAAA,EAAA,uBACA1uF,EAAAt5B,KAAA,aAAAkoH,KA8DA,SAAAE,EAAA/F,EAAA3rH,GACA,OAAA2rH,KAAA3rH,IAAA2rH,EAAA3rH,GAAAsb,MAAA,GAgHA,SAAAq2G,EAAAhH,GACA,IAAA3qH,EAAA66E,EAAAwtC,EAAAmI,EAAAoB,EAAApE,EACA/rD,EAAAprD,EAAAmV,EAAA86C,EACA74C,EAAA,EACAptB,EAAAsqH,EAAAQ,OACA0G,EAAAxxH,EAAAyxH,YAAA,GACAjB,EAAAxwH,EAAAwwH,SACA5wH,EAAA4wH,EAAA/tH,OACAivH,EAAApH,EAAA0D,QAAAvrH,OACA,IAAAzC,EAAA2xH,oBAAAvoF,EAAAppC,EAAA4xB,OAAA,CAIA,IADA5xB,EAAA2pH,QAA8B4H,EAAA,IAAA37F,MAC9B4kD,EAAA,EAA2BA,EAAAk3C,EAAQl3C,IACnC2yC,EAAAntH,EAAA4xB,MAAA4oD,GAAA2yC,OACAntH,EAAA4xB,MAAA4oD,GAAA+yC,WAEAv3G,KAAA,SAAA0S,EAAA6F,GAEA,IAAA5uB,EAAA,EAAmCA,EAAAC,EAAOD,IAAA,CAM1C,GALAwwH,EAAAK,EAAA7wH,GAAA,GACAyhE,EAAAovD,EAAA7wH,GAAA,GAEAytB,EAAA,IAAAg0C,EAEAphE,EAAA4xH,YAAAlpG,EAAAynG,KAAA5hG,EAAA4hG,IAAA,IAAAvwH,EACA,OAAA8oB,EAAA1oB,EAAAosH,SAAAhrD,MAAA7yC,EAAAvuB,EAAAosH,SAAAhrD,MAgCA,IA5BA4mD,EAAA,KAAAn6G,KAAAwjH,EAAArxH,EAAAsrH,QAAA6E,MACAnwH,EAAAysH,QAAA0D,IAGAnI,EADA,kBAAAhoH,EAAA22B,OAAA32B,EAAAysH,QAAA0D,KACA/iG,EAAA,OAAAptB,EAAA22B,OAAA32B,EAAAysH,QAAA0D,KAAA,KAEAnwH,EAAAysH,QAAA0D,IAAAnwH,EAAA22B,OAAA32B,EAAAysH,QAAA0D,KAAA,EAIAn6G,EAAAhW,EAAA6xH,aAAA7xH,EAAA6xH,aAAAnpG,EAAAynG,GAAA5hG,EAAA4hG,GAAA/iG,EAAA+/F,EAAAgD,GAAA7F,GACAE,EAAA,eAAAp9F,EAAA,eAAA1E,EAAAynG,GAAA5hG,EAAA4hG,GAAAnI,EAAAmF,EAAAgD,KAAA7F,KAGAn/F,EAAAiC,EAAA1E,EAAA6F,EACA03C,EAAA74C,EAAAmB,EAAA7F,EAIA1S,EAFA,qBAEAw7G,EAAArmG,EAAAglG,GAAAlqD,EAAAkqD,GAAA/iG,EAAA+iG,EAAA7F,GACiC,oBAAAkH,EAAAhwH,eAAA2uH,GAEjCqB,EAAArB,GAAAhlG,EAAAglG,GAAAlqD,EAAAkqD,GAAA/iG,EAAA+iG,EAAA7F,GAGAE,EAAA,eAAAp9F,EAAA,eAAA1E,EAAAynG,GAAA5hG,EAAA4hG,KAAA7F,EAAAtqH,IAGAgW,EAAuC,OAAAA,EAEvC,OAAA0S,EAAA1oB,EAAAosH,SAAAhrD,MAAA7yC,EAAAvuB,EAAAosH,SAAAhrD,QAGAphE,EAAA2pH,OAA8Be,EAAA,cAAA8F,EAAA5kG,WAAA,YAAAw1C,EAAA,QAAAmwD,IAG9B,SAAAO,EAAAjI,EAAAn8G,GACAm8G,EAAA,GACAqE,YACArE,EAAAh6G,QAAA,kBAEAhO,EAAAgL,WAAAa,IACAA,EAAAm8G,EAAA,IAIA,SAAAoG,EAAApG,EAAA76C,EAAAthE,GACA,IAAAqkH,EAAAlI,EAAA,GAAAiB,OAAA0F,UAGA,IAAAxhD,IAAA66C,EAAA,GAAAyD,cAAAyE,EAAAtvH,OACAonH,EAAAh6G,QAAA,UAAAkiH,EAAA,WACAD,EAAAjI,EAAAn8G,KACqB,KAErBokH,EAAAjI,EAAAn8G,GACA88G,EAAA+D,YAAA1E,EAAA,QAIA,SAAAmI,EAAA1H,GACA,IAAAtqH,EAAAsqH,EAAAQ,OACAjB,EAAA7pH,EAAA6pH,OAEAA,EACAp5G,OAAA,+KAAA/J,MAAA,KAAA8vB,KAAAx2B,EAAAokC,UAAA,MACAjjC,KAAA,YAAAnB,EAAAokC,UAAA,SAAA57B,EAAAkF,GACAlF,EAAA+mG,kBACAvvG,EAAAwwH,YACAF,EAAAhG,GACAgH,EAAAhH,GACAqD,EAAArD,GACAzoH,EAAAgL,WAAAa,IACAA,EAAA48G,KAGAnpH,KAAA,YAAAnB,EAAAokC,UAAA,SAAA57B,EAAAunH,EAAAriH,GACAlF,EAAA+mG,kBACA+a,EAAA4D,YAAA,EACA1D,EAAAyH,eAAA3H,GAAA,MACAE,EAAA0H,eAAA5H,GACAmE,EAAAnE,GACAE,EAAAxyC,WAAAsyC,EAAAtqH,EAAAqsH,UAAA,GACA2F,EAAA1H,GACAwF,EAAAxF,EAAAyF,EAAAriH,KAEAvM,KAAA,SAAAnB,EAAAokC,UAAA,cAAApkC,EAAAokC,UAAA,SAAA57B,EAAAunH,EAAAriH,GACAlF,EAAA+mG,kBACA+a,EAAA4D,YAAA,EAEA2B,EAAAvF,GACAwF,EAAAxF,EAAAyF,EAAAriH,KAEAvM,KAAA,aAAAnB,EAAAokC,UAAA,SAAA57B,EAAA2pH,EAAApC,EAAAriH,GACAlF,EAAA+mG,kBACA+a,EAAA4D,YAAA,EACArE,EAAA/xG,KAAA9X,EAAAgwH,gBAAAn7G,SAEA,IAAAmZ,EAAAntB,EAAAuxH,EAAAC,EACAjF,EAAAvD,EAAA/xG,KAAA,SACAw6G,EAAAzwH,EAAAswH,GAGAI,EAAAnF,EAAA52G,MAAA3U,EAAAmG,GAAAyhB,QAAA6oG,EAAA7oG,QAAA,SAAA6oG,EAAApqE,QAAA,SAAAlwC,OAAA,WACA80G,EAAAjrH,EAAAmG,GAAAyhB,QAAA6oG,EAAA7oG,QAAA,MAAA6oG,EAAApqE,QAAA,MAAAlwC,OAAA,UACAm6G,EAAAG,EAAA,GAEAlF,EAAA3qH,QAAA8vH,GAAA,IACAH,EAAAhF,EAAAp5F,GAAAu+F,GAAAz6G,KAAA,MAAAtB,MAAAs2G,GACAuF,EAAAC,EAAA97G,QACAxW,EAAA4xB,MAAA2gG,GAAAhF,WAAA6E,GAAApyH,EAAAosH,SAAAU,OAEAjsH,OADA,IAAAb,EAAAmsH,WAAAkG,GAAA/jH,GACAq8G,EAAAL,EAAA6H,EAAAE,GAEAryH,EAAAmsH,WAAAkG,GAAAxvH,OAAA8nH,EAAAL,EAAA6H,EAAAE,GAAA/H,EAAA6H,EAAAE,GAEArkG,EAAA,cAAAhuB,EAAAsrH,QAAA+G,GAAA/jH,GAAA,GACAtO,EAAAsrH,QAAA+G,GAAAxvH,OAAAhC,EAAAypH,EAAA6H,EAAAE,GACAryH,EAAA4xB,MAAA2gG,GAAAhF,WAAA6E,GAAAC,GAAAryH,EAAA0tH,YAAA,iBAAA1/F,IAAA9L,cAAA8L,EACA,aAAAhuB,EAAAsrH,QAAA+G,GAAAp3G,MAAA,IAAAiH,gBAEAliB,EAAA4xB,MAAA2gG,GAAApF,OAAAkF,GAAAviH,KAAAC,IAAAD,KAAAioC,IAAA/pB,IAAA,EAAAhuB,EAAA4xB,MAAA2gG,GAAApF,OAAAkF,IAAA,IAEApC,EAAApG,EAAAkG,EAAAriH,MAGAvM,KAAA,UAAAnB,EAAAokC,UAAA,SAAA57B,EAAAskH,EAAAiD,EAAAriH,GAGA,GAFAlF,EAAA+mG,kBACA+a,EAAA4D,YAAA,EACA9kF,EAAAppC,EAAA4xB,OAEAi+F,EAAAvF,GACAwF,EAAAxF,EAAAyF,EAAAriH,OACyB,CAEzB,IAAA/N,EAAA0P,EAAAzP,EAAAiB,EAAAmtB,EAAAk/F,EAAA1B,EACAJ,GAFA0B,EAAAjrH,EAAAirH,GAAA7jH,KAAA,eAEA+O,OAAA,MAAAvV,OACA8vH,EAAA1I,EAAA/xG,KAAA,SAAAtB,MAAAs2G,EAAA5kE,QAAA,SAAAlwC,OAAA,WAMA,IAJAhY,EAAAsrH,SAAAtrH,EAAAsrH,QAAA7oH,QACAipH,EAAApB,GAGA3qH,EAAA,EAAuCA,EAAAyrH,EAAUzrH,IAAA,CASjD,IARAC,EAAAktH,EAAAntH,GAAA6rH,MAAA/oH,OACA+oH,KACA0B,GACAjsG,SACA6rG,OAAA94F,GAAAr0B,GACAyhE,MAAAphE,EAAA4xB,MAAA2gG,GAAAhF,WAAA9qH,QAGA4M,EAAA,EAA2CA,EAAAzP,EAAOyP,IAElDxO,OADA,IAAAb,EAAAmsH,WAAA98G,GAAAf,GACAq8G,EAAAL,EAAAwC,EAAAntH,GAAA6rH,MAAAn8G,MAEArP,EAAAmsH,WAAA98G,GAAAxM,OAAA8nH,EAAAL,EAAAwC,EAAAntH,GAAA6rH,MAAAn8G,MAAAi7G,EAAAwC,EAAAntH,GAAA6rH,MAAAn8G,MAEA2e,EAAA,cAAAhuB,EAAAsrH,QAAAj8G,GAAAf,GAAA,GACAtO,EAAAsrH,QAAAj8G,GAAAxM,OAAAhC,EAAAypH,EAAAwC,EAAAntH,GAAA6rH,MAAAn8G,MACAm8G,EAAAn8G,GAAArP,EAAA0tH,YAAA,iBAAA1/F,IAAA9L,cAAA8L,EACA,aAAAhuB,EAAAsrH,QAAAj8G,GAAA4L,MAAA,IAAAiH,gBAEAliB,EAAA4xB,MAAA2gG,GAAApF,OAAA99G,GAAAS,KAAAC,IAAAD,KAAAioC,IAAAyzE,EAAAn8G,KAAA,EAAArP,EAAA4xB,MAAA2gG,GAAApF,OAAA99G,IAAA,IAIAm8G,EAAA3kH,KAAAqmH,GAEAltH,EAAA4xB,MAAA2gG,GAAAhF,WAAA1mH,KAAA2kH,GAGAyE,EAAApG,EAAAkG,EAAAriH,MAGAvM,KAAA,iBAAAnB,EAAAokC,UAAA,WACAkmF,EAAA4D,YAAA,IAEA/sH,KAAA,SAAAnB,EAAAokC,UAAA,SAAA57B,EAAAilB,EAAA/f,EAAA40B,GACA,IAAAtiC,EAAAsqH,EAAAQ,OACAtiH,EAAA+mG,kBACAsa,EAAAh6G,QAAA,YAAAvN,MAjXA,SAAAgoH,EAAA78F,GACA,IAAA/rB,EAAAb,EAAAT,EAAA+vH,EAAAvlD,EACA5qE,EAAAsqH,EAAAQ,OACAiH,EAAAtkG,GAAAztB,EAAAwwH,SACAxwH,EAAAwwH,YACA3uH,EAAAsK,KAAA4lH,EAAA,SAAApyH,EAAAquB,GAKA,GAHAmiG,EAAAhnG,SAAA6E,EAAA,OAEA5tB,EAAAJ,EAAAqsH,SAAAr0G,OAAA,iBAAAm4G,EAAA,cACA,CAKA,OAFAtvH,GADAA,GAAA,GAAAmtB,EAAA,IAAAxT,MAAA,iBACA3Z,EAAA,OAGA,gBACAA,EAAA,EACA,MACA,QAEAA,EAAA+pE,GAAA,EACA,MACA,QACAlpE,EAAAtB,EAAAghE,OAAAwJ,GAAA,IAAA5qE,EAAAkxH,UAAA,MAEArwH,EAAA,IAAAa,EAAA,MAAAA,EAAA,IACA,MACA,QACAtB,EAAA0O,MAAA1O,EAAA0O,MAAA,EACAjO,EAAAT,EAAAghE,MAAAhhE,EAAA,OAAAJ,EAAAkxH,UAAA,MACA,MACA,QACArwH,EAAA,EAGA+pE,EAAA,IAAAjrE,EAAAkB,EAAA+pE,EACAlpE,GAAAyuH,EAAAhnG,SAAAtoB,EAAA,QACAb,EAAAwwH,SAAA3pH,KAAAnF,GACAb,EAAAgB,EAAAmmC,QAAAtmC,EAAA,GAAAtB,EAAAghE,OACAhhE,EAAA0O,MAAAjO,GAAA,EAAAA,EAAAa,EAAA,IAAA1B,EAAAkxH,UAAA,QA2UAsB,CAAAlI,EAAA78F,GAEA6iG,EAAAhG,GAEAtqH,EAAAyyH,WAAArpF,EAAAppC,EAAA4xB,QAAoE+6F,EAAArC,GACpET,EAAAh6G,QAAA,YAAAvN,MAEAgvH,EAAAhH,GACAqD,EAAArD,EAAAhoF,GACAunF,EAAAh6G,QAAA,UAAAvN,MACAkoH,EAAA+D,YAAAjE,GACAzoH,EAAAgL,WAAAa,IACAA,EAAA48G,KAGAnpH,KAAA,cAAAnB,EAAAokC,UAAA,SAAA57B,EAAAkF,EAAA40B,GACA95B,EAAA+mG,kBACAoe,EAAArD,EAAAhoF,GACAzgC,EAAAgL,WAAAa,IACAA,EAAA48G,KAGAnpH,KAAA,cAAAnB,EAAAokC,UAAA,SAAA57B,EAAAkF,GAEA1N,EAAAsrH,SAAAtrH,EAAAsrH,QAAA7oH,QACAipH,EAAApB,GAGAqC,EAAArC,GACAzoH,EAAAgL,WAAAa,IACAA,EAAA48G,KAGAnpH,KAAA,gBAAAnB,EAAAokC,UAAA,SAAA57B,EAAA8F,GACA9F,EAAA+mG,kBACAib,EAAAkI,cAAApkH,GAAAzL,OAAAynH,EAAAtqH,IAAA+tH,iBAEA5sH,KAAA,eAAAnB,EAAAokC,UAAA,SAAA57B,EAAA85B,GACA95B,EAAA+mG,kBAEAib,EAAA+D,YAAAjE,EAAAhoF,KAEAnhC,KAAA,iBAAAnB,EAAAokC,UAAA,SAAA57B,EAAA2H,EAAAwiH,GACAnqH,EAAA+mG,kBACAib,EAAAyH,eAAA3H,EAAAn6G,EAAAwiH,KAEAxxH,KAAA,UAAAnB,EAAAokC,UAAA,SAAA57B,EAAAxI,EAAAuM,GACA/D,EAAA+mG,kBACAib,EAAAh3G,QAAA82G,EAAAtqH,EAAAuM,KAEApL,KAAA,mBAAAnB,EAAAokC,UAAA,WAEAomF,EAAAyH,eAAA3H,GAAA,MAGAtqH,EAAA6B,EAAAgG,QAAA,EAAA2iH,EAAAz5G,SAAA/Q,EAAA4yH,kBACAtI,EAAAuI,gBAAA,EAEArI,EAAAt5C,MAAAo5C,EAAAtqH,KAh9BAwqH,EAAAn/G,QAAA,SAEAm/G,EAAAc,WACAd,EAAAsI,WACAtI,EAAAz5G,UAGAgiH,MAAA,UACAC,YAAA,EACA3F,gBAAA,EAEA4B,eAAA,YACAC,iBAAA,KACAE,eAAA,KAGA6D,iBAAA,EACAxzG,UAAA,EACAyzG,WAAA,WACAzJ,iBAAA,WACA0J,aAAA,UACAC,gBAAA,EACAX,WAAA,EACAd,mBAAA,EAGAjI,WACAgE,YAAA,EACA2F,UAAA,KACA7C,YACA8C,WAAA,KACA1B,YAAA,EAEAtC,iBAAA,MACAiE,mBAAA,EACArC,WAAA,EACAsC,aAAA,EAEAjH,QAAA,SACAG,SAAA,MACA3B,eAAA,QACAC,cAAA,YACAyG,WAAA,KACAI,aAAA,KAGAiB,WACA/E,eACA0F,OAAA,eAEAC,aAAA,EAGAC,YAAA,KAGAC,WAAA,GACA/C,OAAA,GACAE,QAAA,GACAJ,QAAA,GACAnB,UAAA,GACAE,aAAA,GACAmE,cAAA,GAEArG,YAAA,uBACAuB,QAAA,mBACA9C,aAAA,uBAGA+C,gBAAA,yBACA8E,aAAA,SACA9D,eAAA,aAGArG,OAAA,EAGAiF,cACAtC,WACAG,WACAnB,YASAd,EAAA3/G,KACAy/G,MAAA,cACAmD,YAAA,0BACAsG,SAAA,uBACAnhE,OAAA,qBACA68D,UAAA,wBACAN,SAAA,2BACAt9C,KAAA,mBACAmiD,KAAA,uBACAC,WAAA,yBACArD,QAAA,wBACAE,SAAA,yBACAJ,SAAA,8BAIAlG,EAAA4G,UACAR,QAAA,2BACAE,SAAA,4BACAJ,SAAA,oBACAwD,QAAA,sCACAC,SAAA,sCACAC,SAAA,+BAkBA5J,EAAAlnH,MACAknH,EAAAE,YAm1BAF,EAAA5/G,UAAA,SAAAgtB,GACA,OAAAt1B,KAAA6J,KAAA,WACA,IAEAnM,EAAA6B,EAAAgG,QAAA,KAA6C2iH,EAAAz5G,SAAA6mB,GAE7C53B,EAAA4yH,iBAAAh7F,GAJAt1B,KAMAuwH,gBAAArI,EAAA6J,YAAA,UAAA/xH,KAAAyX,QAEAywG,EAAA6J,WARA/xH,KAQAtC,GAEAwqH,EAAAt5C,MAVA5uE,KAUAtC,MAKAwqH,EAAAt5C,MAAA,SAAAo5C,EAAAtqH,GAEA,IAAAsqH,MAAAgK,OAAA,IAAAhK,EAAA0D,QAAAvrH,SAAA,IAAA6nH,EAAAuI,eACA,OAAA7yH,EAAA2pH,MAAArmH,EAAA,yGAGA,IAAAk3E,EAAA,GACAqvC,EAAAhoH,EAAAyoH,GACAvqH,EAAA8B,EAAAk0E,SAEAu0C,EAAAuI,gBAAA,EAEAvI,EAAAgD,cAAA,EAEAhD,EAAAQ,OAAA9qH,EAEA6B,EAAAuZ,KAAAkvG,EAAA,cAAAtqH,GACAA,EAAA2pH,OAA8B9nH,EAAAuZ,KAAAkvG,EAAA,wBAAA10F,MAG9B51B,EAAAu0H,mBAAA,SAAAlpH,GAEA,OADAA,EAAA,GAAA8d,SAAA9d,EAAA,OACAA,EAAA,UAAAA,EAAA,IAAA8d,SAAA9d,EAAA,UAFA,CAGiBxJ,EAAAmG,GAAAg4B,OAAAt5B,MAAA,MAEjB1G,EAAA22B,QAA4B5mB,IAAA,EAAAqF,KAAA,EAAAo/G,SAAA,EAAAC,UAAA,EAAAC,KAAA,EAAAjE,KAAA,EAAAkE,KAAA,EAAAzxG,KAAA,EAAAuvB,QAAA,GAE5B,gBAAA5kC,KAAAg8G,EAAA5gH,KAAA,YACAuxE,EAAA,KAAAx6E,EAAA+yH,MAAA,gBAAA/yH,EAAA+yH,MAAA,IAEA/yH,EAAAsqH,QACAtqH,EAAA6pH,SACA9jG,SAAAykG,EAAA3/G,IAAAy/G,MAAA,IAAAtqH,EAAA4zH,WAAAp5C,GACAvxE,KAAA,eACAjJ,EAAAqsH,SAAAxC,EAAA/xG,KAAA9X,EAAAgvH,iBAGAhvH,EAAAokC,UAIApkC,EAAAokC,UAAA,IAAApkC,EAAAokC,UAAA39B,QAAA,UAHAzG,EAAAokC,UAAA,eAAAt0B,KAAAme,SAAArC,SAAA,IAAAjgB,MAAA,GAMA3L,EAAA6pH,OAAA1wE,oBAAA,MAAAlwC,KAAA,cACAjJ,EAAAgsH,SAAAnC,EAAA1wE,SAAA,cAAAn5C,EAAAisH,aAAA,KAAAhjH,MACA2rH,YAAA,SACAC,gBAAA,QAEA70H,EAAA6pH,OAAA/xG,KAAA,WAAArV,QACAzC,EAAA6pH,OAAA5gH,KAAA,gCAEAjJ,EAAA80H,cAEA90H,EAAA+qH,eAAA/qH,EAAA6pH,OAAA5gH,KAAA,yBAAAjJ,EAAA+qH,gBAAA,QAEA0D,EAAAnE,GAvgBA,SAAAA,GACA,GAAAA,EAAAQ,OAAAkI,YAAA,IAAAnxH,EAAAyoH,GAAAxyG,KAAA,YAAArV,OAAA,CACA,IAAAsyH,EAAAlzH,EAAA,cACAmzH,EAAAnzH,EAAAyoH,GAAAjkG,QAEAxkB,EAAAyoH,EAAA0D,QAAA,IAAAl2G,KAAA,YAAAqhC,SAAA,YAAAhtC,KAAA,WACA4oH,EAAAx8E,OAAA12C,EAAA,SAAAgJ,IAAA,QAAAse,SAAAtnB,EAAAS,MAAA+jB,QAAA2uG,EAAA,mBAEAnzH,EAAAyoH,GAAA36C,QAAAolD,IAkgBAE,CAAA3K,GAEAoB,EAAApB,GAEAtqH,EAAAitH,UAAA,EAGAjtH,EAAAyyH,WAAmC9F,EAAArC,GAEnCE,EAAAxyC,WAAAsyC,EAAAtqH,EAAAqsH,UAAA,GACA2F,EAAA1H,GAGAtqH,EAAAu0H,yBAAA,IAAA1K,EAAAzuG,OAAA85G,SACAl1H,EAAAwwH,SAAA3G,EAAAzuG,OAAA85G,SACiBn1H,GAAA8pH,EAAA9zC,YAAA8zC,EAAA9zC,WAAAm/C,WACjBl1H,EAAAwwH,SAAA3G,EAAA9zC,WAAAm/C,UAGA1K,EAAA+D,YAAAjE,GAAA,GAEAtqH,EAAAwwH,SAAA/tH,OAAA,EACAonH,EAAAh6G,QAAA,UAAA7P,EAAAwwH,aAA4DxwH,EAAA0zH,aAAA,KAE5DpD,EAAAhG,GACAtqH,EAAA0zH,aAEAlJ,EAAA+D,YAAAjE,GAAA,IAKAtqH,EAAAqtH,gBACAxD,EACAp5G,OAAA,YAAAzQ,EAAAokC,UAAA,WAAApkC,EAAAokC,WACAjjC,KAAA,YAAAnB,EAAAokC,UAAA,WAAApkC,EAAAokC,UAAA,SAAA57B,GACA8pB,aAAAtyB,EAAAm1H,cACA3K,EAAA8C,aAAAhD,GACA,cAAA9hH,EAAAyS,OACAjb,EAAAm1H,aAAApjG,WAAA,WACAy4F,EAAA8C,aAAAhD,GAAA,IACiC,QAMjCA,EAAAuI,gBAAA,EACAvI,EAAAgD,cAAA,EACAttH,EAAA2pH,OACAa,EAAAE,UAAA,8BAAA7oH,EAAAuZ,KAAAkvG,EAAA,sBAEAT,EAAAh6G,QAAA,0BAAAy6G,GACA,mBAAAtqH,EAAA2zH,aAA0D3zH,EAAA2zH,YAAArJ,IAG1DE,EAAAU,cAAA,SAAAZ,EAAA5hH,EAAA0sH,EAAAC,GACA,YAAA3sH,GAAA,OAAAA,EAAA,CAEA,IAAA8xE,EACAx6E,GAFAsqH,EAAAzoH,EAAAyoH,GAAA,IAEAQ,OACA,GAAApiH,EAAA0sH,GACA,OAAAC,EAAA3sH,EAAA0sH,GAAA1sH,EAAA1I,EAAAqsH,SAAA71G,MAAAxW,EAAAqsH,SAAAr0G,OAAA,iBAAAo9G,EAAA,aAEA,IAAA56C,KAAA9xE,EACA,oBAAA8xE,IACA66C,EAEAr1H,EAAAqsH,SAAAr4F,GAAAohG,GAAAp9G,OAAAwiE,GAGAx6E,EAAAqsH,SAAAr0G,OAAA,iBAAAo9G,EAAA,WAAAp9G,OAAAwiE,IAEA/3E,OACA,OAAAiG,EAAA8xE,KAUAgwC,EAAAsE,mBAAA,SAAAwG,GACA,IAGA31H,EAAA0P,EAAAmrE,EAAA56E,EAAA0yH,EAAAH,EAAA3G,EAAAH,EAAAkK,EAAAC,EAAAC,EAAAC,EAAAC,EAHAC,KACAC,KACA9I,EAAA,EAEA,IAAAptH,EAAA,EAA2BA,EAAA21H,EAAA7yH,OAAgB9C,IAE3C,IADA6rH,EAAA8J,EAAA31H,GAAA6rH,MACAn8G,EAAA,EAA+BA,EAAAm8G,EAAA/oH,OAAkB4M,IAAA,CAWjD,IAVA8iH,EAAA3G,EAAAn8G,GACAijH,EAAAzwH,EAAAswH,GAEAoD,GADAlK,EAAA8G,EAAAtvG,WAAAwoG,UACA,IAAAiH,EAAA97G,QACAg/G,EAAArD,EAAAqD,SAAA,EACAC,EAAAtD,EAAAsD,SAAA,OACA,IAAAG,EAAAvK,KACAuK,EAAAvK,OAGA7wC,EAAA,EAAmCA,EAAAo7C,EAAAvK,GAAA5oH,OAAA,EAAiC+3E,IACpE,YAAAo7C,EAAAvK,GAAA7wC,GAAA,CACAk7C,EAAAl7C,EACA,MAOA,IAJAq7C,EAAAN,GAAAG,EACA3I,EAAAj9G,KAAAC,IAAA2lH,EAAA3I,GAEAuF,EAAArpH,MAAoC6sH,cAAAJ,IACpCl7C,EAAA6wC,EAA0C7wC,EAAA6wC,EAAAmK,EAAwBh7C,IAKlE,SAJA,IAAAo7C,EAAAp7C,KACAo7C,EAAAp7C,OAEAm7C,EAAAC,EAAAp7C,GACA56E,EAAA81H,EAAmD91H,EAAA81H,EAAAD,EAA6B71H,IAChF+1H,EAAA/1H,GAAA,IAMA,OAAAmtH,EAAA,GAKAvC,EAAA8C,aAAA,SAAAhD,EAAAnkE,EAAA4vE,GAEA,IAAA/1H,GADAsqH,EAAAzoH,EAAAyoH,IACA,GAAAQ,OAEAkL,EAAAD,GAAAzL,EAAAxyG,KAAA,IAAA0yG,EAAA3/G,IAAA+nD,QACAzM,QAEA,IAAA4vE,GAAA/1H,EAAAwwH,SAAA/tH,OAAA,IAEAuzH,IAAAh+G,OAAA,WAEA,OAAA1V,KAAA+tH,cAAA7F,EAAAyL,eAAA7gG,WAAAvzB,EAAAS,MAAA2G,KAAA,gBAAAjJ,EAAAwwH,WAAA,KAGAlG,EAAA11G,IAAAohH,GAAAjwG,SAAAykG,EAAA3/G,IAAAopH,WAAA,IAAAj0H,EAAA6zH,gBAEAvJ,EAAA11G,IAAAohH,GAAAv0E,YAAA+oE,EAAA3/G,IAAAopH,WAAA,IAAAj0H,EAAA6zH,gBAMArJ,EAAA2D,aAAA,SAAA7D,EAAA8C,EAAA8I,GAEA,IAAAC,EACA,GAFA7L,EAAAzoH,EAAAyoH,GAAA,GAEA4L,EAIA,OAHA5L,EAAAgD,cAAA,EACAF,EAAAl6F,OAAA,2CACAijG,EAAAt0H,EAAAmG,GAAA,OAAAolH,EAAA36D,SAAA26D,EAAAv4G,SAGAshH,EAAAt0H,EAAAyoH,GAAAxyG,KAAA,gCACAs1G,EAAAlgE,YAAAipE,GACAA,EAAAthH,SACAy1G,EAAAgD,cAAA,GAGA9C,EAAA4L,eAAA,SAAA9L,GACAzoH,EAAAyoH,GAAA,GAAAQ,OAAAkB,SAAA7yE,WAAAsZ,UAGA+3D,EAAAxyC,WAAA,SAAAsyC,EAAA+B,EAAAgK,GAEA,IAAAC,EACAt2H,GAFAsqH,EAAAzoH,EAAAyoH,GAAA,IAEAQ,QACA,IAAAuL,IACAr2H,EAAAgxH,cAAAhxH,EAAAgxH,cAAAhxH,EAAAgxH,cAAAp8G,IAAAy3G,MAGAA,EAEAv0G,KAAA9X,EAAA8zH,cAAAl/G,IAAAy3G,EAAAr0G,OAAAhY,EAAA8zH,eACArjH,OAAA,gCAAA/J,MAAA,KAAA8vB,KAAAx2B,EAAAokC,UAAA,MACAjjC,KAAA,gCAAAuF,MAAA,KAAA8vB,KAAAx2B,EAAAokC,UAAA,cAAA57B,EAAA+tH,GACA,IAAApE,EAAAl3G,EAAAzS,EAAAyS,KAEA,UAAAzS,EAAA02B,OAAA12B,EAAA+uC,UAAA,aAAA1pC,KAAAoN,IAAA,UAAAA,GAAA,KAAAzS,EAAA02B,OAIA,YAAAjkB,IAAA,IAAAs7G,IAAA,IAAA3gG,MAAAC,UAAAygG,EAAA,MAEA,iBAAAr7G,EAEA,OADAq7G,GAAA,IAAA1gG,MAAAC,UACA,kCAAAhoB,KAAArF,EAAAsiB,OAAA/Q,SAAA,IAAA/Z,EAAAizH,gBAEAjzH,EAAAyyH,WAAArpF,EAAAppC,EAAA4xB,QAAoE+6F,EAAArC,GAEpE6H,EAAAtwH,EAAAmG,GAAAyhB,QAAA5nB,EAAAS,MAAAmnB,QAAA,qBAAA5b,KAAAvL,KAAAyX,SAAAzX,KAAAT,EAAAS,MAAA4lD,QAAA,cAEAiqE,EAAAnyH,EAAAqsH,WAAA71G,MAAA27G,KACA9B,cArpBA,SAAAmG,EAAAlM,EAAA6H,EAAA76G,GACA,GAAAgzG,EAAA4D,WAEA,OAAAn8F,WAAA,WAAiDykG,EAAAlM,EAAA6H,EAAA76G,IAAgC,IAEjF,IAAAm/G,EAAArB,EAAAjF,EAAA/uD,EAAA1/D,EACA1B,EAAAsqH,EAAAQ,OACA5pH,GAAAoW,EAAAtX,EAAAypH,kBACAI,EAAA7pH,EAAA6pH,OAkBA,GAhBAA,EAAAh6G,QAAA,YAAAy6G,GAEA6H,EAAArjH,MAAAwI,EAAAtX,EAAAmzH,cAAA,GAAAhB,EAAArjH,MAAA,IAAA9O,EAAAkxH,UAAA,KAEAlxH,EAAAwzH,cACA4B,EAAAjD,EACAnyH,EAAAqsH,SAAAlgH,KAAA,WAEA7J,OAAA8yH,IAAAl0H,GAAAW,EAAAS,MAAAklB,GAAA,IAAAgjG,EAAA3/G,IAAAimH,SAAA,KAAAtG,EAAA3/G,IAAA+lH,WACAtuH,KAAAwM,OAAA,MAKAsmH,EAAAjD,EAAA9C,OAEAnuH,EAAA,CAGA,GADAlB,EAAAwwH,YACA,OAAAxwH,EAAAqzH,UAEA,IADAoD,EAAAz2H,EAAAqzH,UACAlD,EAAA,EAAqCA,EAAAsG,EAAAh0H,OAAmB0tH,IACxDsG,EAAAtG,GAAA,KAAAiF,GACAp1H,EAAAwwH,SAAA3pH,KAAA4vH,EAAAtG,IAMA,IADA/uD,EAAA+wD,EAAA/wD,MAAA+wD,EAAArjH,QACA,IACA9O,EAAAwwH,SAAA3pH,MAAAuuH,EAAAh0D,IAEA+wD,EAAAsD,QAAA,GACA,IAAAtF,EAAA,EAAyCA,EAAAgC,EAAAsD,QAAoBtF,IAC7DnwH,EAAAwwH,SAAA3pH,MAAAuuH,EAAAjF,EAAA/uD,QAKiB,CAEjB,GAAAphE,EAAAszH,YAAAtzH,EAAAwwH,SAAA/tH,OAAA,EACA,IAAA0tH,EAAA,EAAqCA,EAAAnwH,EAAAszH,WAAA7wH,OAA2B0tH,KAChEzuH,EAAA8oH,EAAAyL,eAAAj2H,EAAAszH,WAAAnD,GAAA,GAAAnwH,EAAAwwH,YACA,GACAxwH,EAAAwwH,SAAAx7G,OAAAtT,EAAA,GAKA,GAAA8oH,EAAAyL,eAAAb,EAAAp1H,EAAAwwH,WAAA,EAEA,IAAAL,EAAA,EAAqCA,EAAAnwH,EAAAwwH,SAAA/tH,OAAyB0tH,IAC9DzuH,EAAA1B,EAAAwwH,SAAAL,GACA/uD,EAAAphE,EAAAqsH,SAAAr0G,OAAA,iBAAAtW,EAAA,iBACAA,EAAA,KAAA0zH,IAEA1zH,EAAA,GAAA0/D,QAAA+wD,EAAArjH,OACA,IAAApN,EAAA,KACA1B,EAAAwwH,SAAAx7G,OAAAm7G,EAAA,GACA/uD,EAAAtyD,OAAA,SAOA,IADAsyD,EAAA+wD,EAAA/wD,MAAA+wD,EAAArjH,QACA,IACA9O,EAAAwwH,SAAA3pH,MAAAuuH,EAAAh0D,IAEA+wD,EAAAsD,QAAA,GACA,IAAAtF,EAAA,EAA6CA,EAAAgC,EAAAsD,QAAoBtF,IACjEnwH,EAAAwwH,SAAA3pH,MAAAuuH,EAAAjF,EAAA/uD,IAMA,UAAAphE,EAAAszH,WAEA,IADAmD,EAAAz2H,EAAAszH,WACAnD,EAAA,EAAiCA,EAAAsG,EAAAh0H,OAAmB0tH,IACpDsG,EAAAtG,GAAA,KAAAiF,GACAp1H,EAAAwwH,SAAA3pH,KAAA4vH,EAAAtG,IAKAtG,EAAAh6G,QAAA,YAAAy6G,GAEAv4F,WAAA,WAEAu+F,EAAAhG,GACAgH,EAAAhH,GACAqD,EAAArD,GACAT,EAAAh6G,QAAA,UAAAy6G,IACiB,GA6iBjBkM,CAAAlM,EAAA6H,EAAA3pH,MAGAxI,EAAAizH,iBAEA5G,EACApjH,KAAA,qBACA9H,KAAA,kBACA0J,KACA6rH,cAAA,OACAC,cAAA,UAMAnM,EAAA0H,eAAA,SAAA5H,GACA,IAAAtqH,EAAA6B,EAAAyoH,GAAA,GAAAQ,OAEA9qH,EAAA6pH,OAAA/xG,KAAA9X,EAAAgvH,iBAAA7iH,KAAA,SAAAxM,GAGAkC,EAAAS,MAAAwV,KAAA,IAAA0yG,EAAA3/G,IAAAskH,UAAA1sH,QACAZ,EAAAS,MAAA85B,KAAAp8B,EAAA6uH,cAAAlvH,OAKA6qH,EAAAh3G,QAAA,SAAA82G,EAAAsM,EAAAlpH,GAEA,IADA48G,EAAAzoH,EAAAyoH,GAAA,IACAuI,eAAA,CAEArI,EAAAyH,eAAA3H,GAAA,MACA,IAAAoE,EAAA7sH,EAAAyoH,GAAAtqH,EAAAsqH,EAAAQ,OACAkL,EAAAtH,EAAA52G,KAAA,eACA++G,EAAAb,EAAAl+G,KAAA,MAAA0yG,EAAA3/G,IAAA4kH,WAAAhuE,YAAA+oE,EAAA3/G,IAAA4kH,UAAA,IAAAzvH,EAAA0vH,cACAoH,EAAApI,EAAA52G,KAAA,oBAAAqhC,SAAA,WACA,IAAAy9E,GAAA/0H,EAAAmmC,QAAA,UAAAhoC,EAAA8yH,UAAA,IAEApE,EAAA7+G,QAAA,6BACA6+G,EAAA7+G,QAAA,4BAGAmmH,EAAAl+G,KAAA,MAAA+vB,IAAAgvF,GAAAhiH,SAEA65G,EACA5nF,WAAA,eACAr2B,OAAA,2NAAA/J,MAAA,KAAA8vB,KAAAx2B,EAAAokC,UAAA,MACApkC,EAAAqsH,SAAAz3G,IAAAkiH,GACAr1E,aAAA+oE,EAAA3/G,IAAA+nD,OAAA5yD,EAAAwvH,UAAAxvH,EAAA6wH,OAAA7wH,EAAA+wH,QAAAvG,EAAA3/G,IAAA+lH,QAAApG,EAAA3/G,IAAAimH,SAAAtG,EAAA3/G,IAAA6lH,UAAAl6F,KAAA,MACAuQ,WAAA,eACAA,WAAA,cACA99B,KAAA,wBACA4tH,EAAA/+G,KAAA9X,EAAA8zH,cAAArjH,OAAA,8BAAA/J,MAAA,KAAA8vB,KAAAx2B,EAAAokC,UAAA,MACAomF,EAAA0H,eAAA5H,GACAoE,EAAAxmF,YAAAsiF,EAAA3/G,IAAAy/G,MAAA,IAAAtqH,EAAA4zH,WAAA,gBAAA5zH,EAAA+yH,OAAA,IAAA6D,GAEAtM,EAAAuI,gBAAA,SACAvI,EAAAQ,OAAAl5F,MACA,mBAAAlkB,GACAA,EAAA48G,KAMAE,EAAAuM,OACAlmG,MAAA,8EACAmmG,OAAA,cACAC,IAAA,kBAMAzM,EAAA0M,YAAA,SAAAxuG,EAAA6F,GACA,GAAA7F,IAAA6F,EAA8B,SAC9B,IAAA4oG,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA73H,EAAA83H,EACAh3H,EAAA+pH,EAAAuM,MAEA,GAAAt2H,EAAAw2H,IAAAppH,KAAA0gB,GAAA,CAGA,IAFA6oG,EAAAjuG,SAAAT,EAAAlO,MAAA/Z,EAAAw2H,KAAA,MACAK,EAAAnuG,SAAAoF,EAAA/T,MAAA/Z,EAAAw2H,KAAA,KACoC,SACpC,GAAAG,EAAAE,EAAoC,SAOpC,IAJAH,EAAAzuG,EAAAjiB,QAAAhG,EAAAowB,MAAA,YAAApqB,QAAAhG,EAAAu2H,OAAA,IAAAtwH,MAAA,OACA2wH,EAAA9oG,EAAA9nB,QAAAhG,EAAAowB,MAAA,YAAApqB,QAAAhG,EAAAu2H,OAAA,IAAAtwH,MAAA,OACA+wH,EAAA3nH,KAAAC,IAAAonH,EAAA10H,OAAA40H,EAAA50H,QAEA9C,EAAA,EAA2BA,EAAA83H,EAAQ93H,IAAA,CAKnC,GAHA43H,EAAAnuG,MAAA+tG,EAAAx3H,IAAAw3H,EAAAx3H,IAAA,EAAAy1B,WAAA+hG,EAAAx3H,KAAA,EACA63H,EAAApuG,MAAAiuG,EAAA13H,IAAA03H,EAAA13H,IAAA,EAAAy1B,WAAAiiG,EAAA13H,KAAA,EAEAypB,MAAAmuG,KAAAnuG,MAAAouG,GAAkD,OAAApuG,MAAAmuG,GAAA,KAMlD,UAJAA,UAAAC,IACAD,GAAA,GACAC,GAAA,IAEAD,EAAAC,EAAkC,SAClC,GAAAD,EAAAC,EAAkC,SAElC,UAGAhN,EAAAkN,eAAA,SAAAhvG,EAAA6F,EAAA4hG,EAAA7F,EAAAtqH,GACA,GAAA0oB,IAAA6F,EAA8B,SAC9B,IAAA/lB,EAAAxI,EAAA22B,OAAA32B,EAAAssH,QAAA6D,IAAAnwH,EAAAusH,SACA,WAAA7jG,GAAA,IAAAlgB,EAA0C,kBAAAA,KAAA,KAAAA,IAAA,EAC1C,KAAA+lB,GAAA,IAAA/lB,EAA0C,kBAAAA,IAAA,KAAAA,GAAA,EAC1CgiH,EAAA0M,YAAAxuG,EAAA6F,IAGAi8F,EAAAmN,gBAAA,SAAAjvG,EAAA6F,EAAA4hG,EAAA7F,EAAAtqH,GACA,GAAA0oB,IAAA6F,EAA8B,SAC9B,IAAA/lB,EAAAxI,EAAA22B,OAAA32B,EAAAssH,QAAA6D,IAAAnwH,EAAAusH,SACA,WAAA7jG,GAAA,IAAAlgB,EAA0C,kBAAAA,KAAA,IAAAA,GAAA,EAC1C,KAAA+lB,GAAA,IAAA/lB,EAA0C,kBAAAA,IAAA,MAAAA,IAAA,EAC1CgiH,EAAA0M,YAAA3oG,EAAA7F,IAIA8hG,EAAAoN,SAAA,SAAAlvG,EAAA6F,GACA,OAAA7F,EAAA6F,EAAA,EAAA7F,EAAA6F,GAAA,KAMAi8F,EAAAqN,aAAA,SAAAnvG,EAAAs/F,EAAAyP,GACA,GAAAA,EAAA,CAEA,IAAA93H,EAAAC,EAAA8oB,IAAAjmB,OAAA,EAAArB,EAAAq2H,EAAAzP,EACA,IAAAroH,EAAA,EAA+BA,EAAAC,EAAOD,IACtCyB,GAAAsnB,EAAAovG,WAAAn4H,GAEA,OAAAqoH,EAAA5mH,EAEA,UAGAopH,EAAAuN,eAAA,SAAArvG,EAAA6F,EAAAy5F,EAAAyP,EAAAtH,EAAA7F,GACA,GAAA5hG,IAAA6F,EAA8B,SAC9B,IAAAvuB,EAAAsqH,EAAAQ,OACAtiH,EAAAxI,EAAA22B,OAAA32B,EAAAssH,QAAA6D,IAAAnwH,EAAAusH,SACA,WAAA7jG,GAAA,IAAAlgB,EAA0C,kBAAAA,KAAA,KAAAA,IAAA,EAC1C,KAAA+lB,GAAA,IAAA/lB,EAA0C,kBAAAA,IAAA,KAAAA,GAAA,GAC1C4gB,MAAAV,KAA+BA,EAAA8hG,EAAAqN,aAAAnvG,EAAAs/F,EAAAyP,IAC/BruG,MAAAmF,KAA+BA,EAAAi8F,EAAAqN,aAAAtpG,EAAAy5F,EAAAyP,IAC/B/uG,EAAA6F,IAGAi8F,EAAAwN,gBAAA,SAAAtvG,EAAA6F,EAAAy5F,EAAAyP,EAAAtH,EAAA7F,GACA,GAAA5hG,IAAA6F,EAA8B,SAC9B,IAAAvuB,EAAAsqH,EAAAQ,OACAtiH,EAAAxI,EAAA22B,OAAA32B,EAAAssH,QAAA6D,IAAAnwH,EAAAusH,SACA,WAAA7jG,GAAA,IAAAlgB,EAA0C,kBAAAA,KAAA,IAAAA,GAAA,EAC1C,KAAA+lB,GAAA,IAAA/lB,EAA0C,kBAAAA,IAAA,MAAAA,IAAA,GAC1C4gB,MAAAV,KAA+BA,EAAA8hG,EAAAqN,aAAAnvG,EAAAs/F,EAAAyP,IAC/BruG,MAAAmF,KAA+BA,EAAAi8F,EAAAqN,aAAAtpG,EAAAy5F,EAAAyP,IAC/BlpG,EAAA7F,IAGA8hG,EAAAyN,YAAA,SAAAvvG,EAAA6F,GACA,OAAA7F,EAAA6F,GAIAi8F,EAAA0N,sBACAxvG,EAAA,UACAyvG,EAAA,UACAn4H,EAAA,MACAo4H,EAAA,MACA5vH,EAAA,SACA6vH,EAAA,SACA14H,EAAA,SACA24H,EAAA,QACAl4H,EAAA,QACAm4H,EAAA,QACAC,GAAA,IACAC,GAAA,IACAC,EAAA,QACAC,EAAA,SAEAnO,EAAAoO,eAAA,SAAAl3H,GACA,IAAAgnB,EAAAmwG,EAAA,IAAA7kG,EAAAw2F,EAAA0N,qBACA,IAAA1N,EAAAsO,eAAA,CAEA,IAAApwG,KADA8hG,EAAAuO,uBACA/kG,EACA,iBAAAtL,IACAmwG,GAAA7kG,EAAAtL,GACA8hG,EAAAuO,oBAAArwG,GAAA,IAAAvL,OAAA,IAAA6W,EAAAtL,GAAA,UAGA8hG,EAAAsO,eAAA,IAAA37G,OAAA07G,EAAA,KAEA,GAAArO,EAAAsO,eAAAjrH,KAAAnM,GACA,IAAAgnB,KAAAsL,EACA,iBAAAtL,IACAhnB,IAAA+E,QAAA+jH,EAAAuO,oBAAArwG,OAIA,OAAAhnB,GAIA8oH,EAAAyL,eAAA,SAAA5G,EAAAoH,GACA,IAAArB,EAAA/lG,EAAAonG,EAAAh0H,OACA,IAAA2yH,EAAA,EAA8BA,EAAA/lG,EAAY+lG,IAC1C,GAAAqB,EAAArB,GAAA,KAAA/F,EACA,OAAA+F,EAGA,UAGA5K,EAAAP,UAAA,SAAA+O,GACA,IAAAr5H,EAAAC,EAAA4qH,EAAAc,QAAA7oH,OAAAimB,GAAA,EACA,IAAA/oB,EAAA,EAA2BA,EAAAC,EAAOD,IAClC6qH,EAAAc,QAAA3rH,GAAA2O,GAAA4T,gBAAA82G,EAAA1qH,GAAA4T,gBACAwG,GAAA,GAGAA,GACA8hG,EAAAc,QAAAzkH,KAAAmyH,IAIAxO,EAAAiB,cAAA,SAAAvrH,GAEA,YAAAA,EAAsC,SACtC,IAAAP,EAAAC,EAAA4qH,EAAAc,QAAA7oH,OACA,IAAA9C,EAAA,EAA2BA,EAAAC,EAAOD,IAClC,GAAA6qH,EAAAc,QAAA3rH,GAAA2O,GAAA4T,gBAAAhiB,EAAA0rB,WAAA1J,cACA,OAAAsoG,EAAAc,QAAA3rH,GAGA,UAGA6qH,EAAAyO,UAAA,SAAA/2F,GACAsoF,EAAAsI,QAAAjsH,KAAAq7B,IAGAsoF,EAAA0O,UAAA,SAAA5O,EAAApqH,GAEA,OADAoqH,EAAAzoH,EAAAyoH,IACA7nH,QAAA6nH,EAAA,GAAAQ,QAAAR,EAAA,GAAAQ,OAAAgK,WAAA50H,KAAA,GAGAsqH,EAAAkI,cAAA,SAAAxyH,GACA,IAAAP,EAAAw5H,EAAAv5H,EAAA4qH,EAAAsI,QAAArwH,OACA,IAAA9C,EAAA,EAA2BA,EAAAC,EAAOD,IAElC,IADAw5H,EAAA3O,EAAAsI,QAAAnzH,KACAw5H,EAAA33H,eAAA,OAAA23H,EAAA7qH,GAAA4T,gBAAAhiB,EAAAgiB,cACA,OAAAi3G,GAKA3O,EAAA+D,YAAA,SAAAjE,EAAAhoF,GAEA,IAGAwpF,EAAAqN,EAAAC,EAHAp5H,GADAsqH,EAAAzoH,EAAAyoH,GAAA,IACAQ,OACAgD,EAAA9tH,EAAA+tH,cACA+E,MAGA,IAAAxwF,GAAAgoF,EAAAuI,iBAAAvI,EAAA+O,mBAAA/O,EAAA4D,cACAluH,EAAA2pH,QAA8BmC,EAAA,IAAAl2F,MAC9B51B,EAAA8yH,QAAArwH,SACA6nH,EAAA+O,mBAAA,EAEAr5H,EAAA8yH,QAAAjxH,EAAAs2G,KAAAn4G,EAAA8yH,QAAA,SAAA9kG,EAAAwsD,GACA,OAAA34E,EAAAmmC,QAAAha,EAAAhuB,EAAA8yH,WAAAt4C,IAGA34E,EAAAsK,KAAAnM,EAAA8yH,YAAA,SAAAnzH,EAAAyB,IACAg4H,EAAA5O,EAAAkI,cAAAtxH,KACAg4H,EAAA9qH,KAEA8qH,EAAAzuD,WAA+CyuD,EAAAzuD,SAAA,IAC/CmoD,EAAAnzH,GAAAy5H,KAIAtG,EAAA98G,KAAA,SAAA0S,EAAA6F,GACA,OAAA7F,EAAAiiD,SAAAp8C,EAAAo8C,UAAA,EAAAjiD,EAAAiiD,WAAAp8C,EAAAo8C,SAAA,MAGA9oE,EAAAsK,KAAA2mH,EAAA,SAAAnzH,EAAAw5H,GACAA,KACA72F,GAAAtiC,EAAA80H,WAAAqE,EAAA7qH,MAEAtO,EAAA80H,WAAAqE,EAAA7qH,KAAA,EACA6qH,EAAA33H,eAAA,aACAssH,EAAAxD,EAAAQ,OAAAiD,cAAAlsH,EAAAgG,QAAA,KAAwFsxH,EAAAnzH,QAAA8nH,IAExFqL,EAAA33H,eAAA,SACA23H,EAAA72F,KAAAgoF,EAAA6O,EAAAn5H,EAAA8tH,KAGAxrF,GAAA62F,EAAA33H,eAAA,WACA23H,EAAAt2H,OAAAynH,EAAAtqH,EAAA8tH,GAAA,OAKA/7F,WAAA,WACAu4F,EAAA+O,mBAAA,GACiB,GACjBr5H,EAAA2pH,QACAwP,EAAAn5H,EAAA8yH,QAAArwH,OACAioH,EAAA,mBAAApoF,EAAA,6BAAA62F,EAAA,eAAAA,EAAA,QAAArN,MAIAtB,EAAAyH,eAAA,SAAA3H,EAAAgP,EAAA3G,GAEA,IAAAhzH,EAAAK,GADAsqH,EAAAzoH,EAAAyoH,GAAA,IACAQ,OACAyO,EAAAv5H,EAAA8yH,QACAqG,EAAA3O,EAAAsI,QAAAlzH,EAAAu5H,EAAA12H,OAEA,IAAA9C,EAAA,EAA2BA,EAAAC,EAAOD,IAClCw5H,EAAAx5H,IAAAw5H,EAAAx5H,GAAA2O,KAAAgrH,GAAAz3H,EAAAmmC,QAAAmxF,EAAAx5H,GAAA2O,GAAAirH,GAAA,KACAv5H,EAAA2pH,OAAsCrmH,EAAA,gCAAA61H,EAAAx5H,GAAA2O,GAAA,KAEtC6qH,EAAAx5H,GAAA6B,eAAA,WAAAxB,EAAA80H,WAAAqE,EAAAx5H,GAAA2O,MACA6qH,EAAAx5H,GAAAkV,OAAAy1G,EAAAtqH,IAAA+tH,eACA/tH,EAAA80H,WAAAqE,EAAAx5H,GAAA2O,KAAA,KAIA,IAAAqkH,GACAnI,EAAA+D,YAAAjE,EAAAgP,IAOA9O,EAAAjyF,QAAA,SAAAozF,EAAAC,EAAA1qH,GACA,IAAAnB,EAAAy5H,EAAA3wH,EAAA,GAAAmtH,EAAAn0H,EAAA8pH,GACA,OAAAqK,EAAAvzH,QACA1C,IAAA8B,EAAAk0E,UAAAigD,EAAAjgD,WACAyjD,EAAA,KAAAxD,EAAA/sH,KAAA,mBACA,IAAA+sH,EAAA56G,KAAAla,SAAA,IAAA80H,EAAA56G,KAAAla,EAAAghB,eAGArZ,GAAAmtH,EAAA56G,KAAAla,IAAA80H,EAAA56G,KAAAla,EAAAghB,eACiBniB,QAAA,IAAAA,EAAAmB,GACjB2H,GAAA9I,EAAAmB,GACiB0qH,QAAA,IAAAA,EAAA1qH,GACjB2H,GAAA+iH,EAAA1qH,GACiB,MAAAs4H,KAAAh/G,MAAA,IAAAtZ,EAAA,OAEjB2H,EAAA2wH,EAAAh/G,MAAA,IAAA2C,OAAA,MAAAjc,EAAA,uBAEAW,EAAA0nE,KAAA1gE,IAfiC,IAkBjC2hH,EAAAiP,YAAA,SAAA/3H,EAAA4oH,GACA,uBAAA5oH,GAAA,KAAAA,EAAwDA,GAOxDA,GAJA4oH,KAAAQ,QAAA,IAAAR,EAAAQ,OAAAsI,oBACA,IAAA9I,MAGA5oH,EAAA+E,QAAA,SAIA/E,EAAA+E,QAAA,eAAAA,QAAA,UAEA,iBAAAoH,KAAAnM,KAEAA,IAAA+E,QAAA,2BAEA9G,EAAAy1B,WAAA1zB,GAEA0nB,MAAAzpB,GAAAkC,EAAA0nE,KAAA7nE,GAAA/B,GAjBA,IAAAA,GAoBA6qH,EAAAkP,QAAA,SAAAh4H,GAEA,OAAA0nB,MAAA1nB,IAAA,mBAAAmM,KAAAnM,EAAAkqB,WAAAnlB,QAAA,qBAOA,IAAA+jH,EAAA3oH,EAAAmoH,YAGAnoH,EAAAmG,GAAAH,QACAmiH,YAAAQ,EAAA5/G,YAIA4/G,EAAAP,WACA37G,GAAA,YACAkZ,GAAA,WACA,UAEA3kB,OAAA,WACA,UAEAoY,KAAA,SAGAuvG,EAAAP,WACA37G,GAAA,OACAkZ,GAAA,WACA,UAEA3kB,OAAA,SAAAnB,EAAA4oH,GACA,IAAAtqH,EAAAsqH,EAAAQ,OAKA,OAJAppH,IACAA,EAAAG,EAAA0nE,KAAAvpE,EAAA0tH,WAAAhsH,EAAAi4H,oBAAAj4H,GACAA,EAAA1B,EAAAuzH,kBAAA/I,EAAAoO,eAAAl3H,MAEAA,GAEAuZ,KAAA,SAGAuvG,EAAAP,WACA37G,GAAA,QACAkZ,GAAA,SAAA9lB,GACA,OAAA8oH,EAAAkP,QAAAh4H,IAEAmB,OAAA,SAAAnB,EAAA4oH,GACA,IAAAlpH,EAAAopH,EAAAiP,aAAA/3H,GAAA,IAAA+E,QAAA,oBAAA6jH,GACA,OAAA5oH,GAAA,iBAAAN,IAAAM,EAAAG,EAAA0nE,KAAA7nE,GAAA4oH,EAAAQ,OAAA4C,WAAAhsH,EAAAi4H,oBAAAj4H,MAEAuZ,KAAA,YAGAuvG,EAAAP,WACA37G,GAAA,WACAkZ,GAAA,SAAA9lB,GACA,8FAAAmM,MAAAnM,GAAA,IAAA+E,QAAA,kBAEA5D,OAAA,SAAAnB,EAAA4oH,GACA,IAAAlpH,EAAAopH,EAAAiP,aAAA/3H,GAAA,IAAA+E,QAAA,oBAAA6jH,GACA,OAAA5oH,GAAA,iBAAAN,IAAAM,EAAAG,EAAA0nE,KAAA7nE,GAAA4oH,EAAAQ,OAAA4C,WAAAhsH,EAAAi4H,oBAAAj4H,MAEAuZ,KAAA,YAGAuvG,EAAAP,WACA37G,GAAA,YACAkZ,GAAA,SAAA9lB,GACA,mDAA8DmM,KAAAnM,IAE9DmB,OAAA,SAAAnB,EAAA4oH,GACA,IAAA3qH,EAAA+oB,EAAAhnB,IAAAgF,MAAA,QACAjG,EAAA,GACAb,EAAA8oB,EAAAjmB,OACA,IAAA9C,EAAA,EAAuBA,EAAAC,EAAOD,IAC9Bc,IAAA,KAAAioB,EAAA/oB,IAAAgM,OAAA,GAEA,OAAAjK,EAAA8oH,EAAAiP,YAAAh5H,EAAA6pH,GAAA5oH,GAEAuZ,KAAA,YAGAuvG,EAAAP,WACA37G,GAAA,MACAkZ,GAAA,SAAA9lB,GACA,gCAAAmM,KAAAnM,IAEAmB,OAAA,SAAAnB,GACA,OAAAA,EAAAG,EAAA0nE,KAAA7nE,EAAA+E,QAAA,8BAAA/E,GAEAuZ,KAAA,SAGAuvG,EAAAP,WACA37G,GAAA,UACAkZ,GAAA,SAAA9lB,GACA,yCAAqDmM,KAAAnM,IAErDmB,OAAA,SAAAnB,EAAA4oH,GACA,OAAA5oH,EAAA8oH,EAAAiP,YAAA,KAAA/3H,EAAA,IAAAk0B,KAAAl0B,EAAA+E,QAAA,WAAAovB,WAAAn0B,EAAA,GAAA4oH,GAAA5oH,GAEAuZ,KAAA,YAGAuvG,EAAAP,WACA37G,GAAA,UACAkZ,GAAA,SAAA9lB,GACA,0BAAAmM,KAAAnM,MAAAe,OAAA,IAEAI,OAAA,SAAAnB,EAAA4oH,GACA,OAAA5oH,EAAA8oH,EAAAiP,YAAA/3H,EAAA+E,QAAA,SAAA6jH,GAAA5oH,GAEAuZ,KAAA,YAGAuvG,EAAAP,WACA37G,GAAA,aACAkZ,GAAA,SAAA9lB,GAGA,uFAAkFmM,KAAAnM,IAAA,kCAA+DmM,KAAAnM,IAEjJmB,OAAA,SAAAnB,EAAA4oH,GACA,OAAA5oH,EAAA8oH,EAAAiP,YAAA,IAAA7jG,KAAAl0B,EAAA+E,QAAA,0BAAAovB,WAAAn0B,EAAA4oH,GAAA5oH,GAEAuZ,KAAA,YAGAuvG,EAAAP,WACA37G,GAAA,YACAkZ,GAAA,SAAA9lB,GAEA,8EAAyFmM,MAAAnM,GAAA,IAAA+E,QAAA,YAAAA,QAAA,iBAEzF5D,OAAA,SAAAnB,EAAA4oH,EAAA6H,EAAAvH,GACA,GAAAlpH,EAAA,CACA,IAAA1B,EAAAsqH,EAAAQ,OACA8O,EAAA55H,EAAAqsH,SAAAr0G,OAAA,gBAAA4yG,EAAA,UACA/nH,EAAA+2H,EAAAn3H,QAAAm3H,EAAA,GAAA1G,YAAA1I,EAAAjyF,QAAAqhG,EAAApP,EAAAU,cAAAZ,EAAAtqH,EAAA0pH,QAAAkB,GAAA,eAAA5qH,EAAAkzH,WACAxxH,IAAA+E,QAAA,YAAAA,QAAA,eACA,aAAA5D,EACAnB,IAAA+E,QAAA,wCAAuE,YACtD,aAAA5D,EACjBnB,IAAA+E,QAAA,wCAAuE,YACtD,aAAA5D,IACjBnB,IAAA+E,QAAA,wCAAuE,aAGvE,OAAA/E,EAAA8oH,EAAAiP,YAAA,IAAA7jG,KAAAl0B,GAAAm0B,WAAAn0B,EAAA4oH,GAAA5oH,GAEAuZ,KAAA,YAGAuvG,EAAAP,WACA37G,GAAA,OACAkZ,GAAA,SAAA9lB,GACA,6DAAAmM,KAAAnM,IAEAmB,OAAA,SAAAnB,EAAA4oH,GACA,OAAA5oH,EAAA8oH,EAAAiP,YAAA,IAAA7jG,KAAA,cAAAl0B,EAAA+E,QAAA,0BAAAovB,WAAAn0B,EAAA4oH,GAAA5oH,GAEAuZ,KAAA,YAGAuvG,EAAAP,WACA37G,GAAA,WACAkZ,GAAA,WACA,UAEA3kB,OAAA,SAAAnB,EAAA4oH,EAAA6H,GACA,IAAAnyH,EAAAsqH,EAAAQ,OACArpH,EAAAzB,EAAA65H,mBAAA75H,EAAA65H,mBAAA,YACA,OAAAh4H,EAAAswH,GAAAp8C,WAAAt0E,IAEAwZ,KAAA,YAIAuvG,EAAAyO,WACA3qH,GAAA,QACAq8D,SAAA,GACA9nE,OAAA,SAAAynH,EAAAtqH,EAAA8tH,GACA,IAAAV,EAAA0M,EAAA1H,EAAA2H,EAAAjO,EAAAtxC,EACAv5D,EAAA,IAAA9D,OAAAnd,EAAAwtH,YAAA,KACAj/F,EAAAvuB,EAAAgsH,SAIA,IAHAhsH,EAAA2pH,QACAmC,EAAA,IAAAl2F,MAEA4kD,EAAA,EAAuBA,EAAAjsD,EAAA9rB,OAAc+3E,KAErC4yC,EAAA7+F,EAAAyF,GAAAwmD,IACArhC,SAAA,MAAA12C,OACA,IACA2vH,EAAA,EACAhF,EAAAj0E,SAAA,cAAAtR,IAAA7nC,EAAAgwH,gBAGA7jH,KAAA,WACA2tH,EAAAj4H,EAAAS,MAEA2e,EAAApT,KAAAvL,KAAAyY,YAA0Dq3G,IAC1D2H,EAAA3H,EAAA,KACA0H,EAAAr4E,YAAAqsE,EAAA2F,MAAAsG,EAAA,MAAAh0G,SAAA+nG,EAAA2F,MAAAsG,EAAA,SAIA/5H,EAAA2pH,OACAa,EAAAE,UAAA,wBAAAoB,IAGAj3G,OAAA,SAAAy1G,EAAAtqH,EAAA8tH,GACA,IAAAtzC,EAAA4yC,EACA7+F,EAAAvuB,EAAAgsH,SACAgO,GAAAlM,EAAA2F,QAAA,eAAAj9F,KAAA,KACA,IAAAgkD,EAAA,EAAuBA,EAAAjsD,EAAA9rB,OAAc+3E,KACrC4yC,EAAAvrH,EAAAmoH,YAAAmE,aAAA7D,EAAA/7F,EAAAyF,GAAAwmD,IAAA,IACArhC,WAAAsI,YAAAu4E,GACAn4H,EAAAmoH,YAAAmE,aAAA7D,EAAA8C,GAAA,MAh1DA,CAq1DCzrH,oGCr2DDtB,OAAA+B,KAAA63H,GAAAtwH,QAAA,SAAAzI,GAAA,YAAAA,GAAA,eAAAA,GAAAb,OAAAC,eAAArB,EAAAiC,GAAAX,YAAA,EAAAC,IAAA,kBAAAy5H,EAAA/4H,QAFAzB,EAAA,IACAA,EAAA,mICDAA,EAAA,IACA,IAAYoG,0JAAZpG,EAAA,QACAA,EAAA,SACAA,EAAA,QACAA,EAAA,UACAA,EAAA,QACAA,EAAA,UACAA,EAAA,uDAEA,IAAI+jB,EAAWlkB,OAAO47B,kBAElBg/F,EAAiB,sBACjBC,EAA6B,oIAEjC,SAASC,EAAsB9vH,GAC3B,IAAI0P,GAAM,EAAAwK,EAAAvhB,SAAEqH,GACR+vH,EAAUlmG,OAAOna,EAAI/Q,KAAK,SAAW,IAAIsgE,OAC7C,OAAgC,IAAzB8wD,EAAQzzH,QAAQ,KAAayzH,EAAQC,OAAO,GAAK,KAQ5D,SAASC,EAAoBjwH,GACzB,IAAI+vH,EAAUD,EAAqB9vH,GACnC,OAAO+vH,EAAUhxH,SAAS0f,eAAesxG,GAAW,KA2BxD,IAAIG,GACAC,eAAgB,SAAUC,EAAc72E,GACpC,IAAI82E,EAAwBr4H,KAAKs4H,qBAAqBF,GAClDG,EAAyB,EAM7B,OAJAh3E,EAAU/rC,KAAK,MAAM3L,KAAK,SAAUqK,EAAOskH,GACvCD,GAA0B1xG,SAAS2xG,EAAIv/F,aAAa,yBAGjDo/F,EAAwBE,GAGnCD,qBAAsB,SAAUG,GAC5B,IAAI3qE,EAAa,EAMjB,OAJA2qE,EAAM5uH,KAAK,SAAUqK,EAAOskH,GACxB1qE,IAAc,EAAA5rC,EAAAvhB,SAAE63H,GAAKlqE,eAGlBR,GAGX4qE,yBAA0B,SAAUn3E,EAAWo3E,GAC3Cp3E,EAAUhvC,SACVomH,EAAoBpmH,UAGxBs8C,gCAAiC,SAAU+pE,EAAW5sH,GAClD,IAAI6sH,yOAGsC7sH,EAHtC,wGAKkDA,EALlD,0DAM0CA,EAN1C,+BASJ,OADA4sH,EAAU3iF,OAAO4iF,GACVD,EAAUpjH,KAAK,sCAG1BsjH,yBAA0B,SAAUC,EAAgB/sH,GAChD,IAAIgtH,EAAiB,8GAAgHhtH,EAAK,oBAM1I,OAFA+sH,EAAe9iF,OAAO+iF,GACND,EAAevjH,KAAK,iCAAmCxJ,IAI3EitH,mBAAoB,SAAUxmE,EAAMymE,EAAaC,GAC7C,SAASC,EAAaC,EAAsBF,EAAyBD,GACjE,OAAOG,EAAuBF,GAA2BD,EAK7D,IAFA,IAAIG,EAAuB,EAElBh8H,EAAI,EAAG+7H,EAAaC,EAAsBF,EAAyBD,IAAgB77H,EAAIo1D,EAAKtyD,OAAQ9C,IAAK,CAG9Gg8H,IAFW,EAAAn3G,EAAAvhB,SAAE8xD,EAAKp1D,IACEixD,YAAW,GAKnC,OAAOmE,EAAKppD,MAAM,EAAGhM,EAAI,IAG7Bi8H,gBAAiB,SAAUC,EAAgBC,EAAab,GAMpD,IALA,IAAIjpD,EAAaipD,EAAoBnjH,KAAK,KAAK7O,KAAK,iBAChD46C,GAAY,EAAAr/B,EAAAvhB,SAAE,IAAM+uE,GACpB+pD,EAAiBz5H,KAAKi5H,mBAAmBM,EAAgBC,EAAYlrE,aAAcqqE,EAAoB/5G,SAAS0vC,YAAW,IAC3HorE,EAAeD,EAAet5H,OAAS,EAElC4M,EAAIwsH,EAAep5H,OAAS,EAAG4M,GAAK2sH,EAAc3sH,IAAK,CAC5D,IAAI4sH,GAAO,EAAAz3G,EAAAvhB,SAAE44H,EAAexsH,IAC5B/M,KAAK45H,4BAA4BD,EAAMp4E,EAAWo3E,GAGtD,OAAO,EAAAz2G,EAAAvhB,SAAE84H,IAGbG,4BAA6B,SAAUD,EAAMp4E,EAAWo3E,GACpD,IAAIkB,EAAWF,EAAKnkH,KAAK,KAEzBmkH,EAAKhzH,KAAK,qBAAsBgzH,EAAKrrE,YAAW,IAChDurE,EAASp2G,SAAS,gDAEdk2G,EAAK3zF,SAAS,gBACd6zF,EAASp2G,SAAS,yBAClBk1G,EAAoBl1G,SAAS,eAGjC89B,EAAU/rC,KAAK,MAAM63D,QAAQssD,IAGjCG,kBAAmB,SAAUC,EAAgBC,EAAgBrB,GACzD,SAASS,EAAaY,GAClB,OAAOA,EAAiB,EAG5B,IAAK,IAAI38H,EAAI,EAAG+7H,EAAaY,IAAmB38H,EAAI08H,EAAe55H,OAAQ9C,IAAK,CAC5E,IAAIs8H,GAAO,EAAAz3G,EAAAvhB,SAAEo5H,EAAe18H,IACxB48H,EAAqBpzG,SAAS8yG,EAAKhzH,KAAK,sBAAuB,IAC5CszH,EAAqBD,GAGxCh6H,KAAKk6H,qBAAqBP,EAAMhB,GAGpCqB,GAAkBC,IAI1BC,qBAAsB,SAAUP,EAAMhB,GACNgB,EAAKnkH,KAAK,KAAKwwB,SAAS,2BAGhD2zF,EAAKl2G,SAAS,cACdk1G,EAAoBx5E,YAAY,eAGpCw6E,EAAK9iF,SAAS,KAAKsI,YAAY,sEAC/Bw5E,EAAoB/nG,OAAO+oG,KA4DnC,SAASQ,EAAa3B,GAClB,IAAImB,GAAO,EAAAz3G,EAAAvhB,SAAE63H,GAGb,IAAImB,EAAK3zF,SAAS,+BAAlB,CAIA,IAAIo0F,EAAOnC,EAAmB0B,GAC9B,GAAKS,EAAL,CAMA,IAAIC,GAAQ,EAAAn4G,EAAAvhB,SAAEy5H,GAEdC,EACK52G,SAAS,eACT9c,KAAK,cAAe,SACpBsjD,SAAS,cACT9K,YAAY,eACZx4C,KAAK,cAAe,QAEzB,IACI+oE,EADsBiqD,EAAK/zE,QAAQ,aAAapwC,KAAK,uCACpB7O,KAAK,iBACtC46C,GAAY,EAAAr/B,EAAAvhB,SAAEoG,SAAS0f,eAAeipD,IAW1C,GATAnuB,EAAU/rC,KAAK,QAAQ7O,KAAK,gBAAgB,GAAOw4C,YAAY,iCAC/DoC,EAAU/rC,KAAK,MAAM2pC,YAAY,cAEjCw6E,EACK/6G,OAAO,gBACP6E,SAAS,cACTwmC,SAAS,cACT9K,YAAY,cAEbw6E,EAAK3zF,SAAS,4BAA6B,CAC3C,IAAIoyF,EAAeiC,EAAMz7G,OAAO,aAAapJ,KAAK,uDAElD4iH,EAAaj5E,YAAY,cACzBi5E,EAAa5iH,KAAK,KAAK2pC,YAAY,WAAW1a,WAAW,gBAGzDk1F,EAAK3zF,SAAS,6BACdq0F,EAAMz7G,OAAO,aAAapJ,KAAK,iDAAiDiO,SAAS,cAG7Fk2G,EAAKxyG,QAAQ,cAAc3R,KAAK,KAAK7O,KAAK,gBAAiB,SAC3DgzH,EAAKhzH,KAAK,gBAAiB,QAC3BgzH,EAAKpsH,QAAQ,aACTirH,IAAKmB,EACLS,KAAMC,SA1CN92H,EAAOrC,MAAM,oGACuCs3H,IA6C5D,SAAS8B,EAAqBC,GAE1B,YAA8C1xH,IAAvC0xH,EAAU5zH,KAAK,qBAA4E,UAAvC4zH,EAAU5zH,KAAK,oBAG9E,SAAS6zH,EAAoBD,GACzB,IAAIE,EAAaF,EAAU5zH,KAAK,MAC5BrI,EAAQi8H,EAAU5zH,KAAK,oBAE3B,OAAOixH,GAAkB6C,GAA0B,KAAOn8H,GAAmB,SAAVA,EAAmB,IAAMA,EAAQ,IA4CxG,SAASo8H,EAAgBx0H,GACrBusD,EAAKnO,QAAO,EAAApiC,EAAAvhB,SAAEuF,EAAEsiB,QAAQrB,QAAQ,MAE5BjhB,GACAA,EAAEoiB,iBAIV,SAASqyG,EAAyBloE,GAC9BA,EAAKprD,QAAQ,SAAUmxH,EAAKtkH,IA7KhC,SAAiC0mH,EAAe1mH,GAC5C,IAAI6kH,GAAiB,EAAA72G,EAAAvhB,SAAEi6H,GACnBhC,EAAYG,EAAevjH,KAAK,cAAcd,QAC9C0jH,EAAeQ,EAAUpjH,KAAK,6CAC9BmjH,EAAsBC,EAAUpjH,KAAK,gCAAgCoJ,SACrEi8G,EAAmBlC,EAAoBnjH,KAAK,KAC5Ck6D,EAAcmrD,EAAiBl0H,KAAK,iBACpC46C,GAAY,EAAAr/B,EAAAvhB,SAAEoG,SAAS0f,eAAeipD,IAAa/oE,KAAK,gBAAgB,GACxEm0H,EAAev5E,EAAUphD,OAAS,EAElC46H,EADiB7C,EAAkBC,eAAeC,EAAc72E,GAC7Bw3E,EAAezqE,aAatD,IAXKwsE,GAAgBC,IACjBpC,EAAsBT,EAAkBrpE,gCAAgC+pE,EAAW1kH,GACnFqtC,EAAY22E,EAAkBY,yBAAyBC,EAAgB7kH,IAI3E2mH,EAAiBl0H,KAAK,gBAAiB,gCAAkCuN,GACzE2mH,EAAiBl0H,KAAK,KAAM,+BAAiCuN,GAC7D2mH,EAAiBl0H,KAAK,OAAQ,gCAAkCuN,GAChEqtC,EAAU56C,KAAK,KAAM,gCAAkCuN,GAEnD6mH,EAAiB,CACjB,IAAIC,EAAkB9C,EAAkBoB,gBAAgBlB,EAAajiH,UAAW4iH,EAAgBJ,GAC5FsC,EAAkB/C,EAAkBI,qBAAqB0C,GACzDhB,EAAiBjB,EAAezqE,aAAe2sE,EAAmBtC,EAAoBrqE,YAAW,GAGrG,GAFe0rE,EAAiB,EAElB,CACV,IAAIkB,EAAkB35E,EAAU/rC,KAAK,MACrC0iH,EAAkB4B,kBAAkBoB,EAAgB/kH,UAAW6jH,EAAgBrB,GAG9EI,EAAe/yF,SAAS,sBACzBub,EAAU/1C,GAAG,QAAS,IAAKkvH,GAO3B9B,EAAU1zG,GAAG,aACb0zG,EAAUz0G,OAAOH,OAIrB82G,IAAiBC,IACjBx5E,EAAU/rC,KAAK,MAAM3L,KAAK,WACtBquH,EAAkBgC,sBAAqB,EAAAh4G,EAAAvhB,SAAEX,MAAO24H,KAEpDT,EAAkBQ,yBAAyBn3E,EAAWo3E,IA2HtDwC,CAAwB3C,EAAKtkH,KAgBrC,SAASknH,IACL,IAAI/qG,GAAY,EAAAm+B,EAAA7tD,SAASg6H,EAAyB,KAC9CU,GALG,EAAAn5G,EAAAvhB,SAAEk3H,GAA4B1hH,UAOrCwkH,EAAwBU,IAExB,EAAAn5G,EAAAvhB,SAAE3D,QAAQwO,GAAG,SAAU,WACnB6kB,EAAUgrG,KAIlB,SAASC,EAAS9C,GACd,IAAImB,GAAO,EAAAz3G,EAAAvhB,SAAE63H,GAIb,GAFAA,EAAIr4G,aAAa,OAAQ,gBAEpBw5G,EAAK7gH,KAAK,wBAAyB,CACpC,IAAIyiH,EAAW5B,EAAK9iF,SAAS,gBAG7B0kF,EAAS50H,KAAK,OAAQ,WAGtB40H,EAAS1kF,SAAS,MAAMlwC,KAAK,OAAQ,gBACrC40H,EAAS/lH,KAAK,kBAAkB3L,KAAK,YA7W7C,SAAyB2xH,GACrB,IAAIC,GAAY,EAAAv5G,EAAAvhB,SAAE66H,GACdE,EAAazD,EAAmBwD,GAE/B3D,EAAqB0D,IACtBj4H,EAAOrC,MAAM,2FAA4Fs6H,GAGzGE,IACA,EAAAC,EAAAh7H,SAAM86H,GACNA,EAAU90H,KAAK,OAAQ,QACvB,EAAAub,EAAAvhB,SAAE+6H,GAAY/0H,KAAK,kBAAmB80H,EAAU90H,KAAK,OAEjD80H,EAAU78G,SAASonB,SAAS,cAC5By1F,EAAU90H,KAAK,gBAAiB,QAEhC80H,EAAU90H,KAAK,gBAAiB,UAGpCpD,EAAOtC,KAAK,kHACwCu6H,GA0VhDI,CAAe57H,QAInBu7H,EAAS/vH,GAAG,QAAS,IAAKkvH,GAC1Bf,EAAK7gH,KAAK,wBAAwB,GAqB1C,SAAoB0/G,MACbnvH,MAAM7L,KAAKg7H,EAAIxxH,iBAAiB,eAAeK,QAAQw0H,GApBtDC,CAAUtD,IAIlB,SAASuD,IACL,IAAItpE,GA5CG,EAAAvwC,EAAAvhB,SAAE,qCA8CT8xD,EAAK5oD,KAAK,WACNyxH,EAAQt7H,QA1GhB,SAAoCg8H,GAChC,IAAK,IAAI3+H,EAAI,EAAG4+H,EAAKD,EAAW77H,OAAQ9C,EAAI4+H,EAAI5+H,IAAK,CACjD,IAAIk9H,EAAYyB,EAAWtqG,GAAGr0B,GAC1Bo1D,EAAOupE,EAAW99H,IAAIb,GAE1B,GAAIi9H,EAAqBC,IAAcv9H,OAAOk/H,aAG1C,GAFiB3B,EAAU5zH,KAAK,MAEhB,CACZ,IAAIw1H,EAAkBn/H,OAAOk/H,aAAaE,QAAQ5B,EAAoBD,IAEtE,GAAI4B,EAAiB,CACjB,IAAIt3E,EAAS4N,EAAKxyC,cAAL,YAA+Bk8G,EAA/B,MAETt3E,GACAs1E,EAAYt1E,SAIpBthD,EAAOtC,KAAK,+EA0FxBo7H,CAA2B5pE,GAG/B,SAASopE,EAAUzB,GACfA,EAAKj6G,aAAa,OAAQ,YAC1Bi6G,EAAKj6G,aAAa,eAAe,EAAA+B,EAAAvhB,SAAEy5H,GAAMp0F,SAAS,eAAiB,QAAU,QAsBjF,IAAIysB,GACAmc,MAAO,WACHwsD,IACAW,KAhBJ,EAAA75G,EAAAvhB,SAAE,2BAA2B6U,KAAK,KAAK3L,KAAK,WACxC,IAAIyyH,GAAU,EAAAp6G,EAAAvhB,SAAEX,MAGXs8H,EAAQ31H,KAAK,WAEV,EAAA41H,EAAA57H,SAAU27H,IACVA,EAAQ31H,KAAK,QAAS21H,EAAQjnG,WAa1CivB,OAAQ,SAAUl+B,GACd,IAAIkpD,GAAK,EAAAptD,EAAAvhB,SAAEylB,GACPm0G,EAAYjrD,EAAGnoD,QAAQ,aAE3BgzG,EAAY7qD,GAERgrD,EAAqBC,IAAcv9H,OAAOk/H,cA5HtD,SAAkCvC,GAC9B,IAAIY,EAAYZ,EAAKxyG,QAAQ,aAG7B,GAFiBozG,EAAU5zH,KAAK,MAEhB,CACZ,IAAI61H,EAAQ1E,EAAqB6B,GAE7B6C,GACAx/H,OAAOk/H,aAAaO,QAAQjC,EAAoBD,GAAW,IAAMiC,QAGrEj5H,EAAOtC,KAAK,8EAkHRy7H,CAAwBptD,MAKpC,EAAAptD,EAAAvhB,SAAE8xD,EAAKmc,OAkBP,IAAM+tD,GAAiB,EAAA17G,EAAAtgB,SAAM,YACzB0gB,QAAS,SAAUvJ,IACf,EAAAoK,EAAAvhB,SAAEmX,GAAS2L,SAAS,4BAKpB9jB,UAAMqgC,KAAKloB,GAGXwjH,EAAQxjH,IAEZoJ,SAAUA,EACN,yBACA,mDACA,QACA,8CAEJjiB,WACI0W,OAAQ,SAAUmC,GACd,IAAI5D,GAAQ,EAAAgO,EAAAvhB,SA5BxB,SAAoB8xD,GAChB,OAAOA,EAAKzrD,iBAAiB,iBA2BP41H,CAAU58H,OAAOkU,MAAM4D,GAMrC,OAJI5D,GAAS,GACTu+C,EAAKnO,OA3BrB,SAAmBmO,GACf,OAAOA,EAAKzrD,iBAAiB,uBA0BL61H,CAAS78H,MAAMkU,GAAO2iC,SAAS,IAGxC72C,SAKb88H,GAAY,EAAA77G,EAAAtgB,SAAM,gBACpBmsC,QAAS,KACTzrB,QAAS,SAAUvJ,IACf,EAAAoK,EAAAvhB,SAAEmX,GAAS2L,SAAS,cAExBvC,SAAUA,EACN,eACA,WACA,sBACA,YACA,UAIF67G,GAAY,EAAA97G,EAAAtgB,SAAM,iBACpBygB,SAAU,SAAUtJ,GAChB,IAAIklH,GAAa,EAAA96G,EAAAvhB,SA3DzB,SAAwBmX,GACpB,OAAO,EAAAoK,EAAAvhB,SAAEmX,GAASqP,QAAQ,YAAYjpB,IAAI,GA0DnB++H,CAAcnlH,IAC7B61C,GAAW,EAAAzrC,EAAAvhB,SAAEmX,GACb5D,EAAQ8oH,EAAWxnH,KAAK,iBAAiBtB,MAAMy5C,GAC/C6qE,EAAM,IAAIsE,EACVnD,GAAO,EAAAz3G,EAAAvhB,SAAE63H,GAEb7qE,EAASlqC,SAAS,aAClB+0G,EAAIj7G,WAAW4C,aAAa,OAAQ,IAAMrI,EAAQ9L,IAClDkV,EAASqP,KAAKioG,GAAK9/F,YAAci1B,EAAShnD,KAAK,SAEjC,IAAVuN,GACAy5C,EAASlqC,SAAS,eAGlBkqC,EAAS3nB,SAAS,gBAClB2zF,EAAKl2G,SAAS,cAGlBkqC,EAAS1D,SAAS,MAAMhU,OAAOuiF,IAEnCt3G,SAAUA,EACN,0BAIR,EAAAxgB,EAAAC,SAAU,OAAQ8xD,aAEHA,IAEXkqE,mBACAI,cACAD,2FC5iBJ,QAAA3/H,EAAA,QACAA,EAAA,QACAA,EAAA,wDAUA,SAAS+/H,EAAOl1H,GAAiB,IAAbysB,EAAav0B,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAAJ,GACrB4X,GAAU,EAAAoK,EAAAvhB,SAAEqH,GACZm1H,EAAY1oG,IAAU,EAE1B3c,EAAQjO,KAAK,WACT,IAAI6N,GAAM,EAAAwK,EAAAvhB,SAAEX,MAEP0X,EAAI/Q,KAAK,OACV+Q,EAAI/Q,KAAK,MAAM,EAAAwqE,EAAAxwE,SAASw8H,OAKpC,EAAAz8H,EAAAC,SAAU,SAAUu8H,aAELA,qGC3Bf,QAAA//H,EAAA,uDAWA,SAASk1D,EAAWrqD,GAEhB,OADAA,GAAK,EAAAka,EAAAvhB,SAAEqH,IACInH,KAAK,eAAiBmH,EAAGnH,KAAK,gBAG7C,IAfA1D,EAAA,IAeAwD,SAAU,YAAa0xD,aAERA,+RClBP1xD,yCCCRxD,EAAA,GACAA,EAAA,GACAA,EAAA,iCCFAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,KACAA,EAAA,IACAA,EAAA,IACAA,EAAA,KACAA,EAAA,KACAA,EAAA,IACAA,EAAA,KACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,oDCnBAA,EAAA,GACAA,EAAA,GACAA,EAAA,GACAA,EAAA,IACAA,EAAA,IACAA,EAAA,qDCLAA,EAAA,GACAA,EAAA,GACAA,EAAA,GACAA,EAAA,qDCJAA,EAAA,GACAA,EAAA,GACAA,EAAA,GACAA,EAAA,qDCHAA,EAAA,GACAA,EAAA,GACAA,EAAA,GAEAA,EAAA,qDCJAA,EAAA,IACAA,EAAA,qGCDAA,EAAA,IACAA,EAAA,oFCDA,QAAAA,EAAA,IACAigI,EAAAjgI,EAAA,IAEAA,EAAA,KACA,QAAAA,EAAA,KACYkwC,0JAAZlwC,EAAA,SACAA,EAAA,QACAA,EAAA,QACAA,EAAA,wDAGA,IAAMkgI,EAAqC,kBACrCtyE,EAAgC,yBAEhCuyE,EAAwB,uBACxBC,EAAU,UACVC,EAAQ,QACRC,EAAa,aACbC,EAAc,cAKdC,EAA+B,mCAG/BC,EAA4B,oCAMlC,SAASC,EAAezyE,IAJxB,SAA4BA,GACxB,OAAOA,EAAOplB,SAAS23F,IAIlBtyE,CAAmBD,MAO5B,SAA4BA,GACxBA,EAAO3nC,SAASk6G,IAChB,EAAAP,EAAA9xE,mBAAkBF,GARdG,CAAmBH,GAW3B,SAAyBA,IAKzB,SAA6BA,GACzB,IAAI0yE,EAEAC,EAAyB,WACzB3yE,EAAO79C,QAAQ,oBAGnB69C,EAAO5/C,GAAG,QAAS,WACfwkB,aAAa8tG,GACbA,EAAaruG,WAAWsuG,EAAwB,SAbpDC,CAAoB5yE,GAiBxB,SAA6BA,GACzB,IAAI6yE,EAAeC,EAAoB9yE,EAAQ,QAC3C+yE,EAAiBD,EAAoB9yE,EAAQ,eAE3B+yE,EAAiB/yE,EAAO94C,IAAI,IAAM6rH,GAAkB/yE,GAE1D5/C,GAAGyyH,EAAc,WAC7BG,EAA2BhzE,KAvB/BizE,CAAoBjzE,GAZhBkzE,CAAgBlzE,GAChBmzE,EAAiBnzE,EAAQsyE,IAsCjC,SAASU,EAA2BhzE,GAGhC,IAFiB8yE,EAAoB9yE,EAAQ,cAO7C,OAeJ,SAAyBA,IAczB,SAA4BA,GACxBozE,EAAqBC,EAAgBrzE,GAAS,QAd9CszE,CAAmBtzE,GAEnB,IAAIuzE,EAmBR,SAAgCvzE,GAC5B,IAAIwzE,KASJ,OARAC,IAAgBx3H,QAAQ,SAAUkmD,EAAWr5C,GACzC,IAAIs5C,EAAmBD,EAAUC,iBACVpC,EAAOlmC,GAAGsoC,IAE7BoxE,EAASr6H,KAAK2P,KAIf0qH,EA7BeE,CAAuB1zE,GAE7CmzE,EAAiBnzE,EAAQqyE,GACzB,IAAIsB,EA6BR,SAAqC3zE,EAAQuzE,GACzC,IAAIK,KAWJ,OATAL,EAAgBt3H,QAAQ,SAAU43H,GAC9B,IAAIjyE,EAAoB6xE,IAAgBI,GAAgBjyE,kBACpDna,EAAW,IAAItzC,UAAEuzC,SAErBka,EAQR,SAAgC5B,EAAQ8zE,GACpC,IAAIl1H,GACA8G,SAAU,WACNouH,EAAkBlsF,WAEtBmsF,WAAY,SAAU36H,GAClB+5H,EAAiBnzE,EAAQmyE,EAAS/4H,GAClC06H,EAAkBtpH,UAEtBzL,KAeR,SAAwCihD,GACpC,OAAO,SAAUgC,GACb,OAAOhC,EAAOzkD,KAAK,QAAU02H,EAAqCjwE,IAAQhC,EAAOzkD,KAAKymD,IAjBhFgyE,CAA+Bh0E,GACrCpjD,GAAIojD,EAAO,GACX1zC,IAAK0zC,GAUT,OAPA/d,EAAUxsC,KAAKmJ,EAAS,OACpBjF,aAAc,QACdC,gBAAiB,QACjBC,gBAAiB,KACjBC,UAAW,yDAGR8E,EA9BoBq1H,CAAuBj0E,EAAQvY,IAGtDmsF,EAAaz6H,KAAKsuC,KAGfmsF,EAzCSM,CAA4Bl0E,EAAQuzE,GAChDY,EAAkBhgI,UAAEo3D,KAAKn2D,MAAMjB,UAAGw/H,GAItC,OAHAQ,EAAgB5/E,KAAK,WACjB4+E,EAAiBnzE,EAAQoyE,KAEtB+B,EA1BAC,CAAgBp0E,GAJnBmzE,EAAiBnzE,EAAQoyE,GAOjC,SAASU,EAAoB9yE,EAAQjoB,GACjC,IAGIs8F,EAAcr0E,EAAOzkD,KAAK,QAAU02H,EAAqCl6F,GAK7E,OAJKs8F,IACDA,GAJA9oE,KAAQ,UAIexzB,IAGpBs8F,EAqBX,SAASZ,IACL,OAAO9xE,UAAkBD,aA6D7B,SAASyxE,EAAiBnzE,EAAQ7Y,EAAO/tC,GAGrC,GAFA4mD,EAAOzkD,KAAK,QAAU22H,EAAuB/qF,GAEzCA,IAAUmrF,EAAd,CAIAtyE,EAAO79C,QAAQhO,UAAEujB,MAAM86G,IAEvB,IAAI8B,EAAgBjB,EAAgBrzE,GAEhCu0E,KACJA,EAA2BlC,GAAc,OACzCkC,EAA2BpC,GAAW,QACtCoC,EAA2BnC,GAAS,UAEpC,IAAI3xE,EAAmB8zE,EAA2BptF,GAE9CA,IAAUkrF,EAQlB,SAA2BryE,GACvB37B,WAAW,WACP,IAAImwG,EAAkBC,EAAcz0E,KAAYqyE,EAC5CmC,IACApB,EAAqBpzE,EAAQ,SAC7B,EAAAgyE,EAAA/wE,iBAAgBjB,GAAQ,KAE7B,KAdC00E,CAAkB10E,GAElBozE,EAAqBkB,EAAe7zE,EAAkBrnD,IAe9D,SAASg6H,EAAqBpzE,EAAQzyC,EAAMnU,GACxC,IAAMu7H,EAgCV,SAA0B30E,GACtB,OAAOA,EAAOlmC,GAAG,IAAM6lC,EAAgC,SAjC7B2B,CAAiBtB,GAG3C,GAgBJ,SAAqCA,GACjC40E,EAAwB50E,EAAQ,SAChC,EAAAgyE,EAAA/wE,iBAAgBjB,GAAQ,GACxB40E,EAAwB50E,EAAQ,WArBhC60E,CAA4B70E,KACqB,YAATzyC,IAAwBonH,GAKhE,GAAa,SAATpnH,EACAqnH,EAAwB50E,EAAQ,aAC7B,CACH,IAAM80E,EAAkB90E,EAAOzkD,KAAKokD,EAAgCpyC,IAAS,KACvEwnH,EAAc37H,EAyB5B,SAA6B47H,EAAWC,GAEpC,OADmCrnH,KAAKxK,MAAM6xH,GACZ5/H,QAAQ2/H,IA3BRE,CAAoB97H,EAAS07H,MAC3D90E,EAAOzkD,KAAKokD,EAAgCpyC,EAAMK,KAAKC,UAAUknH,IACpD,UAATxnH,IACA,EAAAykH,EAAA9wE,qBAAoBlB,EAAQ+0E,IAWxC,SAASH,EAAwB50E,EAAQzyC,GACrCyyC,EAAO3mB,WAAWsmB,EAAgCpyC,GACrC,UAATA,IACA,EAAAykH,EAAA3wE,qBAAoBrB,EAAQzyC,GAAMpG,SAa1C,SAASksH,EAAgBrzE,GACrB,IAAIm1E,EAAiBrC,EAAoB9yE,EAAQ,gBAEjD,YADuCviD,IAAnB03H,EACEn1E,GAAS,EAAAlpC,EAAAvhB,SAAE,IAAM4/H,GAG3C,SAASV,EAAcz0E,GACnB,OAAOA,EAAOzkD,KAAK,QAAU22H,GA0CjC,SAASkD,EAA4BC,EAAOzrH,GACxCA,EAAMsT,iBACNm4G,EAAMrb,IAAIwY,EAA2B,WACjC6C,EAAMlzH,QAAQ,YA8CtB,SAASmzH,EAAyBD,EAAOluF,GACrC,IAAI/sC,EAAW,SAAW83H,EAAwB,IAAM/qF,EAAQ,IAChE,OAAOkuF,EAAMjrH,KAAKhQ,IA1EtB,EAAA0c,EAAAvhB,SAAEoG,UAAUyE,GAAG,SAAU,SAAUtF,GAC/B,IAAIwwE,EAAOxwE,EAAEsiB,OACTi4G,GAAQ,EAAAv+G,EAAAvhB,SAAE+1E,GAEViqD,EA0BR,SAA0BF,GAItB,OAUJ,SAAqBG,GACjB,IAAIC,GAAwD,IAAjCD,EAAWt8H,QAAQi5H,GAC1CuD,GAAgE,IAArCF,EAAWt8H,QAAQo5H,GAC9CqD,GAA8D,IAApCH,EAAWt8H,QAAQm5H,GAEjD,OAAIoD,EACOtD,EACAuD,EACApD,EACAqD,EACAtD,EAEAD,EAvBUwD,CAIzB,SAAsCC,GAIlC,OAHa1hI,UAAE8N,IAAI4zH,EAAS,SAAU70E,GAClC,OAAOyzE,GAAc,EAAA39G,EAAAvhB,SAAEyrD,MAPT80E,CADKT,EAAMjrH,KAAK,IAAMmoH,KA3BxBwD,CAAiBV,GACjC,GAAIE,IAAcjD,EACd8C,EAA4BC,EAAOv6H,GAsD3C,SAAmCu6H,GACJC,EAAyBD,EAAO/C,GACtC7zH,KAAK,SAAUqK,EAAOlM,GACvCulD,EAAUz8C,UAAS,EAAAoR,EAAAvhB,SAAEqH,MAxDrBo5H,CAA0BX,QACvB,GAAIE,IAAclD,EACrB+C,EAA4BC,EAAOv6H,QAChC,GAAIy6H,IAAcpD,EACrBr3H,EAAEoiB,iBAwDV,SAA4Bm4G,GACCC,EAAyBD,EAAOlD,GAAS7oH,QAC/C4nB,QAzDf+kG,CAAmBZ,QAChB,GAAIE,IAAcnD,EAAO,CAC5B,IAAI8D,EAAmB/hI,UAAEujB,MAAM,oBAC/B29G,EAAMlzH,QAAQ+zH,GACYA,EAAiBh+G,sBAEvCpd,EAAEoiB,oBA4Dd,IAAMilC,GACFnhB,SAAU2gB,UAAkB3gB,SAC5Bt7B,SA5FJ,SAAuBs6C,GAEnBgzE,EADAhzE,GAAS,EAAAlpC,EAAAvhB,SAAEyqD,OA8Ff,EAAAnqC,EAAAtgB,SAxV6C,6BAyVzCygB,SAAU,SAAUgrC,GACZA,EAAMsqB,MACNtqB,EAAMsqB,KAAKv2D,aAAa,aAAc,cAG1C09G,GADa,EAAA37G,EAAAvhB,SAAEyrD,IAEfzsD,UAAMqgC,KAAKosB,IAEfzzC,KAAMhZ,UAAMgZ,KAAKmkB,aAGrB,EAAAG,EAAAt8B,SAAO,sBAAuB4sD,IAC9B,EAAA7sD,EAAAC,SAAU,iBAAkB4sD,aACbA,oDC1Xf,QAAApwD,EAAA,QACAA,EAAA,UACAA,EAAA,OACAA,EAAA,SACAA,EAAA,wDAGA,SAASokI,EAAan1E,GAClB,IAAIo1E,EAAmBp1E,EAAMpkD,GAAG1J,MAAM6B,OAClCshI,EAAoC,IAArBD,EACfE,EAAY76G,SAASulC,EAAMjiD,KAAK,aAAc,IAC9Cw3H,EAAY96G,SAASulC,EAAMjiD,KAAK,aAAc,IAElD,GAAIu3H,GAAaC,GAAaD,IAAcC,IAAeF,GAAgBD,IAAqBE,EAAY,CACxG,IAAME,EAAqBC,EAAY,cAAez1E,EAAMjiD,MAAOu3H,IACnEt1E,EAAM+yE,WAAWyC,QACd,GAAIF,GAAcF,EAAmBE,IAAcD,EAAe,CACrE,IAAMK,EAAmBD,EAAY,YAAaz1E,EAAMjiD,MACxDiiD,EAAM+yE,WAAW2C,QACd,GAAIH,GAAcH,EAAmBG,EAAY,CACpD,IAAMI,EAAmBF,EAAY,YAAaz1E,EAAMjiD,MACxDiiD,EAAM+yE,WAAW4C,QAEjB31E,EAAMt7C,WA4Bd,SAASkxH,EAAgB51E,GACrB,MAAsC,aAA/BA,EAAMnzB,aAAa,QAgB9B,SAASgpG,EAAa17H,EAAKkuH,GACvB,IAAI3tH,EAAUP,EAAI2R,MAAMu8G,GACxB,QAAK3tH,GAGeP,IAAQO,EAAQ,GAIxC,SAASo7H,EAAQ91E,GACb,IAAI+1E,EAAiBN,EAAY,UAAWz1E,EAAMjiD,MAE9C83H,EAAa71E,EAAMpkD,GAAG1J,MAAO,IAAIuc,OAAOuxC,EAAMjiD,KAAK,aACnDiiD,EAAMt7C,WAENs7C,EAAM+yE,WAAWgD,GAQzB,SAASjsD,EAAS9pB,GACd,IAAIg2E,EAAkBP,EAAY,WAAYz1E,EAAMjiD,MAChDiiD,EAAMpkD,GAAG1J,MACT8tD,EAAMt7C,WAENs7C,EAAM+yE,WAAWiD,GAQzB,SAASC,EAASj2E,GACd,IAAIk2E,EAAqBT,EAAY,cAAez1E,EAAMjiD,MAEtDo4H,EAAa17G,SAASulC,EAAMpkD,GAAG1J,MAAO,IAC1C,GAAIwoB,MAAMy7G,GACNn2E,EAAM+yE,WAAWmD,OADrB,CAKA,IAAIE,EAAWp2E,EAAMjiD,KAAK,OACtBs4H,EAAWr2E,EAAMjiD,KAAK,OAEtBq4H,GAAaD,EAAa17G,SAAS27G,EAAU,IAC7Cp2E,EAAM+yE,WAAW0C,EAAY,MAAOz1E,EAAMjiD,OACnCs4H,GAAaF,EAAa17G,SAAS47G,EAAU,IACpDr2E,EAAM+yE,WAAW0C,EAAY,MAAOz1E,EAAMjiD,OAE1CiiD,EAAMt7C,YA+Dd,SAAS+wH,EAAYjjI,EAAK8jI,EAAkBC,GACxC,IACIC,EAEAA,OAH+B/5H,IAAdhJ,UAAKC,KAGLD,UAAKC,KAAK,0BAA4BlB,GAEtCikI,EAAmBjkI,GAGxC,IAAIkkI,EAAgBH,EACfA,IACDG,GAAiBJ,EAAiB9jI,KAGtC,IACImkI,EADAC,EAA2BN,EAAiB9jI,EAAM,QAStD,OALImkI,EADAC,GACuBA,GAA0BviI,OAAOqiI,IAEjCF,GAAgBniI,OAAOqiI,GAG3C7wE,IAAI1xD,OAAOC,MAAM,KAAMuiI,GArLlCh2E,UAAkB3gB,UAAU,YAAa,aAAcm1F,GACvDx0E,UAAkB3gB,SAAS,0BAA2Bm1F,GAGtDx0E,UAAkB3gB,UAAU,iBAAkB,SAAUggB,GACpD,IAAI62E,EAAiB72E,EAAMpkD,GAAG1J,MAC1B4kI,EAAgBn8H,SAAS0f,eAAe2lC,EAAMjiD,KAAK,kBACnDg5H,EAAqBD,EAAc5kI,MAEnC8kI,EAAuBvB,EAAY,gBAAiBz1E,EAAMjiD,MAAO84H,EAAgBE,KAE3DnB,EAAgB51E,EAAMpkD,KAAOg6H,EAAgBkB,MAEnEE,EAAuBvB,EAAY,wBAAyBz1E,EAAMjiD,OAGjE84H,GAAmBE,GAEbA,IAAuBF,EAC9B72E,EAAM+yE,WAAWiE,GAFjBh3E,EAAMt7C,aAadi8C,UAAkB3gB,UAAU,kBAAmB,SAAUggB,GACrD,IAAIi3E,EAAwBxB,EAAY,iBAAkBz1E,EAAMjiD,OAEF,IAA1DiiD,EAAMpkD,GAAG1J,MAAMgG,QAAQ8nD,EAAMjiD,KAAK,mBAClCiiD,EAAMt7C,WAENs7C,EAAM+yE,WAAWkE,KAyBzBt2E,UAAkB3gB,UAAU,WAAY81F,GACxCn1E,UAAkB3gB,SAAS,YAAa81F,GAWxCn1E,UAAkB3gB,UAAU,YAAa8pC,GACzCnpB,UAAkB3gB,SAAS,aAAc8pC,GAwBzCnpB,UAAkB3gB,UAAU,MAAO,OAAQi2F,GAC3Ct1E,UAAkB3gB,SAAS,cAAei2F,GAG1Ct1E,UAAkB3gB,UAAU,cAAe,SAAUggB,GACjD,IAAIk3E,EAAqBl3E,EAAMjiD,KAAK,cAChCo5H,EAAoB1B,EAAY,aAAcz1E,EAAMjiD,MAEpDq5H,GACAC,EAAK,WACL9/D,EAAK,WACLlmE,EAAK,qBACLimI,EAAK,oDACLC,EAAK,gCACLhmI,EAAK,6BAILimI,EAAwB,GADAN,EAAmBl/H,MAAM,IAG/BiD,QAAQ,SAAUw8H,GACpC,IAAIC,EAAqBN,EAAetkI,eAAe2kI,GAEnDD,GADAE,EACyBN,EAAeK,GAEfA,IAIjC,IAAIE,EAAkB,IAAIlpH,OAAO+oH,EAAwB,IAAK,KAC5C3B,EAAa71E,EAAMpkD,GAAG1J,MAAOylI,GAG3C33E,EAAMt7C,WAENs7C,EAAM+yE,WAAWoE,KAKzBx2E,UAAkB3gB,UAAU,aAAc,cAAe,SAAUggB,GAC/D,IAAI43E,GAAgB,EAAA9hH,EAAAvhB,SAAEyrD,EAAMpkD,IAAIwN,KAAK,YAAYrV,OAC7C8jI,GAAY73E,EAAMjiD,KAAK,eAAkB65H,GAAiB53E,EAAMjiD,KAAK,cACrE+5H,GAAY93E,EAAMjiD,KAAK,eAAkB65H,GAAiB53E,EAAMjiD,KAAK,cAErEg6H,EAAkBtC,EAAY,aAAcz1E,EAAMjiD,MAClDi6H,EAAkBvC,EAAY,aAAcz1E,EAAMjiD,MAElD85H,GAAYC,EACZ93E,EAAMt7C,WACEmzH,EAEAC,GACR93E,EAAM+yE,WAAWiF,GAFjBh4E,EAAM+yE,WAAWgF,KAuCzB,IAAItB,GACAnB,UAAW7hI,UAAKE,QAAQ,oCACxB4hI,UAAW9hI,UAAKE,QAAQ,oCACxBskI,YAAaxkI,UAAKE,QAAQ,sCAC1BukI,cAAezkI,UAAKE,QAAQ,wCAC5BwkI,wBAAyB1kI,UAAKE,QAAQ,gDACtCykI,eAAgB3kI,UAAKE,QAAQ,yCAC7BmiI,QAASriI,UAAKE,QAAQ,kCACtBm2E,SAAUr2E,UAAKE,QAAQ,mCACvB0kI,YAAa5kI,UAAKE,QAAQ,sCAC1B+S,IAAKjT,UAAKE,QAAQ,8BAClB0N,IAAK5N,UAAKE,QAAQ,8BAClB2kI,WAAY7kI,UAAKE,QAAQ,qCACzB4kI,WAAY9kI,UAAKE,QAAQ,qCACzB6kI,WAAY/kI,UAAKE,QAAQ,uCAG7B,EAAAk9B,EAAAt8B,SAAO,+QClOEA,WALTxD,EAAA,KACAA,EAAA,IACAA,EAAA,IACAA,EAAA,KACAA,EAAA,oFCJA,QAAAA,EAAA,SACAA,EAAA,uDAEA,IAAMuwD,GAAS,EAAAzsC,EAAAtgB,SAAM,cACjBgY,KAAMhZ,UAAMgZ,KAAKi0B,UACjBvrB,QAAS,SAAUvJ,IACf,EAAA+sH,EAAAlkI,SAAamX,gBAIN41C,qGCVfvwD,EAAA,GACAA,EAAA,GACAA,EAAA,IACAA,EAAA,GACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,8KCVA,QAAAA,EAAA,QACAA,EAAA,KACYkwC,0JAAZlwC,EAAA,SACAA,EAAA,uDAEA,SAAS2nI,KACL,EAAA5iH,EAAAvhB,SAAE,eAAekJ,KAAK,YAClB,EAAAg7H,EAAAlkI,SAAaX,SAIrB,EAAAkiB,EAAAvhB,SAAEmkI,GAEF,IAAMvyE,KACNA,EAAiBqc,MAAQvhC,EAAU3nC,GAAGo/H,EAAsB,0BACxD9/H,gBAAiB,QACjBD,aAAc,QACdG,UAAW,4EAGf,EAAAxE,EAAAC,SAAU,mBAAoB4xD,aAEfA,qQCnBN5xD,WAHTxD,EAAA,IACAA,EAAA,IACAA,EAAA,gUCFAA,EAAA,QACAA,EAAA,MACYoG,0JAAZpG,EAAA,IACA2hD,EAAA3hD,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,SACAA,EAAA,wDAEA,IA6CM4nI,EAA6B,SAAC35E,EAAQ45E,GACxC,IAAIC,SACAC,SACAC,SACAC,GAA4B,EAG1B/uE,GAAQ,EAAAn0C,EAAAvhB,SAAE,QAEV0kI,EAAwB,SAACrwH,GAC3B,IAAI+7C,GAAe,EAAA7uC,EAAAvhB,SAAEqU,EAAMwT,QACvB88G,EAAgBv0E,EAAa5pC,QAAQ+9G,GAAe/kI,QAAU4wD,EAAa7rC,GAAGkmC,GAC9Em6E,EAAgBx0E,EAAa5pC,QAAQ,yBAAyBhnB,OAGlE,IAAMmlI,IAAkBC,GAAkBvwH,EAAM7T,UAAYA,UAAQc,OAGhE,OAFAujI,SACAJ,GAA4B,GAI5Br0E,EAAa7yD,IAAI,KAAOktD,EAAOltD,IAAI,IACnC8W,EAAMsT,kBAIRm9G,EAAkB,WAEdL,IACF/uE,EAAM7qD,GAAG,6BAA8B,IAAK65H,GAC5CD,GAA4B,IA0C9BM,EAAmB,WAChBT,EAAM/mI,IAAI,GAAGuf,MACdkoH,KAIFA,EAAiB,WACnBV,EAAM/mI,IAAI,GAAGuf,MAAO,GAGlB+nH,EAAiB,WACnBP,EAAM/mI,IAAI,GAAGuf,MAAO,GAwBxB,OACImoH,0BAA2B,KAC3BC,iBAlEqB,SAAAC,GAAc,IAAZ16E,EAAY06E,EAAZ16E,OA0BvB,OApBA65E,EA9FU,SAAAnlH,GAA2C,IAAzCimH,EAAyCjmH,EAAzCimH,oBAAqBf,EAAoBllH,EAApBklH,eAC/BgB,EAA2B,IAAIj9E,UACrCi9E,EAAyBh6H,GAAKg5H,EAE9B,IAAMC,GAAQ,EAAA/iH,EAAAvhB,SAAEqlI,GAMhB,OALAf,EAAMt+H,KAAK,aAAc,IACzBs+H,EAAMt+H,KAAK,iBAAkB,SAC7Bs+H,EAAMt+H,KAAK,YAAX,UAAkCo/H,GAClCd,EAAMxhH,SAAS,yBAERwhH,EAoFKgB,EAAWF,oBALkB,SAAA36E,GAEjC,OADiBA,EAAO51B,SAASzJ,KAAO/uB,OAAOulE,WAAa,EACxC,OAAS,QAGO2jE,CAA6B96E,GAAS45E,oBAE9EG,EAAc/5E,EAAOjkC,QAAQ,qBAAqBjpB,IAAI,MAElDinI,EAAYgB,iBAAmBlB,GAC/B,EAAA/iH,EAAAvhB,SAAEwkI,GAAa35H,GAAG,WAAY,SAAAtF,GACtBk/H,GACAl/H,EAAEoiB,iBAEN+tC,EAAM3pD,IAAI,aAAc,IAAK24H,GACzBF,GAAeA,EAAYgB,yBACpBhB,EAAYgB,oBAK/B9vE,EAAMpgB,OAAOgvF,GAEbC,EAAgBD,EAETA,GAyCPS,mBACAC,iBACAH,iBACAY,sBA3B0B,WAE1B32G,WAAWw1G,EAAMplH,QAAS,IA0B1BwmH,gBAvBoB,kBACpBpB,EAAM/mI,IAAI,GAAGw0B,WAAW,IAuBxB4zG,gBArBoB,WAEpBd,IAEAp6E,EAAOzkD,KAAK,cAAe,MAE3BykD,EAAO1+C,IAAI,cAAeg5H,GAC1Bt6E,EAAO1+C,IAAI,mBAAoB+4H,GAE/BpvE,EAAM3pD,IAAI,UAAW+4H,GACrBpvE,EAAM3pD,IAAI,qCAAsC24H,IAYhDkB,eAjFmB,WAEnBlwE,EAAM7qD,GAAG,UAAW65H,GACpBj6E,EAAO5/C,GAAG,mBAAoBi6H,MAkFhCe,EAAe,SAAAC,EAAAC,GAanB,IAZGC,EAYHF,EAZGE,WAEGf,EAUNc,EAVMd,0BACAC,EASNa,EATMb,iBACAH,EAQNgB,EARMhB,iBACAC,EAONe,EAPMf,eACAH,EAMNkB,EANMlB,eACAY,EAKNM,EALMN,sBACAC,EAINK,EAJML,gBACAC,EAGNI,EAHMJ,gBACAC,EAENG,EAFMH,eAIEn7E,EAASu7E,EAAWC,WACpBljI,EAAUijI,EAAWl2D,aACrBu0D,EAAiB2B,EAAWE,UAE9BC,SACAC,SACA7B,SAMM8B,EAAe,SAAA57H,GAAA,OAAY,SAAA9M,GAC7B,QAAwB,IAAbwoI,EACP,OAAO17H,EAAS9M,KAIlB2oI,EAAkBD,EAAa,WACjCF,EAASI,WAAW,aAGxBP,EAAW3iH,KAAO2hH,EAElBgB,EAAWxiH,KAAOqhH,EAElBmB,EAAWL,gBAAkB,WAEzBA,IAEAl7E,EAAO1+C,IAAI,mCAAoCy6H,GAE3CJ,IACAA,EAAiB7rF,aACjB6rF,EAAmB,MAGnBl1E,EAAW5yD,UAAUmoI,2BACrBh8E,EAAOltD,IAAI,GAAGya,KAAO,QAGzBsuH,WAION,EAAWL,uBAEXK,EAAW3iH,YACX2iH,EAAWxiH,MAItBwiH,EAAWU,QAAUL,EAAa,SAAA1oI,GAC9BwoI,EAASI,WAAW,UAAW5oI,KAGnCqoI,EAAWW,QAAUN,EAAa,kBAAMF,EAASI,WAAW,aAE5DP,EAAWY,OAASP,EAAa,SAAA1oI,GAAA,OAASwoI,EAASI,WAAW,SAAU,UAAW5oI,KAEnFqoI,EAAWlgB,OAASugB,EAAa,SAAA1oI,GAAA,OAASwoI,EAASI,WAAW,SAAU,UAAW5oI,KAGvF,IAAM6oI,EAAoB,SAACnyH,IACb,EAAAkN,EAAAvhB,SAAEqU,EAAM2nB,eAAep2B,OAO7BugI,EAASI,WAAW,UAAW97E,EAAO7kD,QAUxC7C,EAAQ8jI,gBAAgB31E,EAAW5yD,UAAUwoI,gBAC/C/jI,EAAQ8jI,aAAe,IAE3B,IAAME,EAAa71E,EAAW5yD,UAAUwoI,cAYxC,GAVAr8E,EAAOzkD,KAAK,gBAAiBq+H,GAExBY,GAGDV,GAAgB,EAAAhjH,EAAAvhB,SAAEilI,IACJniH,SAAS,yBAHvByhH,EAAgBW,GAAkBz6E,gBAOd,IAAb07E,EAA0B,MACE,IAAxB17E,EAAOzkD,KAAK,SACnBpD,EAAOvC,IAAI,oFAEf,IAAM2mI,EA3QK,SAAAtkE,GAAA,IAAEutD,EAAFvtD,EAAEutD,WAAYxlE,EAAdiY,EAAcjY,OAAQupD,EAAtBtxC,EAAsBsxC,SAAUxwF,EAAhCk/C,EAAgCl/C,KAAMyjH,EAAtCvkE,EAAsCukE,kBAAtC,OACfhX,WAAcA,EACdiX,YAAez8E,EAAO7kD,MACtBuhI,QAAW18E,EAAOzkD,KAAK,OACvBohI,QAAW38E,EAAOzkD,KAAK,OACvBqhI,SAAY,IACZrzB,SAAY,SAAUszB,GAClB78E,EAAO7kD,IAAI0hI,GACX78E,EAAO79C,QAAQ,UACf4W,IAEAwwF,GAAYA,EAASn3G,KAAKwC,KAAMioI,IAEpCL,oBACAM,SAAY,KA6PWC,EACfvX,WAAYltH,EAAQktH,WACpBxlE,SACAupD,SAAUjxG,EAAQixG,SAClBxwF,KAAMwiH,EAAWxiH,KACjByjH,kBAAmBxB,IAEjB5d,EAASjpH,UAAEgG,YAAOsD,EAAW8+H,EAAYD,GAE3ChkI,EAAQ0kI,UAAY,IACpB5f,EAAO4f,SAAW1kI,EAAQ0kI,UAG9BtB,EAvQa,SAAAuB,GAAoD,IAAlD7f,EAAkD6f,EAAlD7f,OAAQ0c,EAA0CmD,EAA1CnD,cAAemB,EAA2BgC,EAA3BhC,gBAAiBiC,EAAUD,EAAVC,KACrDxB,GAAW,EAAA5kH,EAAAvhB,SAAE0lI,KAEnBS,EAASI,WAAW1e,GAEpB,IAAI+f,SAOJ,OANID,KACAC,GAAQ,EAAArmH,EAAAvhB,SAAE,UAAU8iB,SAAS,wBACvBwyB,OAAO,WAAW5gB,KAAKizG,GAC7BpD,EAAcjvF,OAAOsyF,IAGlBzB,EA2PQ0B,EACPhgB,SACA0c,gBACAmB,gBAAiB,kBACbT,GAA6BS,KACjCiC,KAAM5kI,EAAQ4kI,OAGlB/B,IAEAn7E,EAAO5/C,GAAG,mCAAoC27H,IAI9CJ,EAAmB,IAAI5/H,iBAAiB,SAAUshI,GAC9CA,EAAcphI,QAAQ,SAAUC,GACG,QAA3BA,EAAS8rC,cACTuzF,EAAWY,OAAOjgI,EAASkhB,OAAOyQ,aAAa,QACb,QAA3B3xB,EAAS8rC,eAChBuzF,EAAWlgB,OAAOn/G,EAASkhB,OAAOyQ,aAAa,aAI1CvxB,QAAQ0jD,EAAOltD,IAAI,IAAK6M,YAAY,IAazD,GARAqgD,EAAO5/C,GAAG,cAAek6H,GAIzBt6E,EAAOzkD,KAAK,cAAejD,EAAQktH,YAI/BltH,EAAQglI,wBAA0B72E,EAAW5yD,UAAUmoI,yBAA0B,CACjFh8E,EAAOltD,IAAI,GAAGya,KAAO,OAGrB,IAAIra,EAAQ8sD,EAAOltD,IAAI,GAAG+6B,aAAa,SACnC36B,IACA8sD,EAAOltD,IAAI,GAAGI,MAAQA,KAM5B60B,EAAO,aAGb,SAAS0+B,EAAWzF,EAAOu8E,GACvB,IAAIjlI,KAEEshI,GAAiB,EAAA7zD,EAAAxwE,SAAiB,eAElCyqD,GAAS,EAAAlpC,EAAAvhB,SAAEyrD,GACjBhB,EAAOzkD,KAAK,mBAAoBq+H,GAEhC,IAAM2B,GACFE,QAAS,kBAAM7B,GACfsB,gBAAiBnzG,EACjByzG,SAAU,kBAAMx7E,GAChBqlB,WAAY,kBAAM/sE,GAClB0O,MAAO,WACHu0H,EAAWL,kBAEX,IAAMsC,GAAkC/2E,EAAW5yD,UAAUmoI,yBACvDyB,EAA+BnlI,EAAQglI,uBAE7C,GACIE,GACAC,EACF,CACE,IAAMC,EAAkB/D,EAA2B35E,EAAQ45E,GAC3DwB,GAAcG,cAAamC,KAGnCC,YAAa,SAAAC,GACTtlI,EAAUnE,UAAEgG,YAAOsD,EAAWgpD,EAAW5yD,UAAUwtE,eAAgBu8D,GACnErC,EAAWv0H,UAMnB,OAFAu0H,EAAWoC,YAAYJ,GAEhBhC,EAgBX,SAASsC,EAAeC,EAAcP,GAClC,IAAMjlI,EAAUnE,UAAEgG,QACdyiI,SAAY,IACZE,SAAY,KACbS,GAIGQ,GAFgB,EAAAjnH,EAAAvhB,SAAEuoI,GAEMzlH,SAAS,yBAAyByjH,WAAWxjI,GAE3E,GAAIA,EAAQ4kI,KAAM,CACd,IAAMC,GAAQ,EAAArmH,EAAAvhB,SAAE,UAAU8iB,SAAS,uBACnC8kH,EAAMtyF,OAAO,WAAW5gB,KAAK3xB,EAAQ4kI,MACrCa,EAAQlzF,OAAOsyF,GAYnB,OATAY,EAAQJ,YAAc,SAACrlI,GACnBylI,EAAQjC,WAAW,WACnBiC,EAAQjC,WAAWxjI,IAGvBylI,EAAQj4H,QAAU,WACdi4H,EAAQjC,WAAW,YAGhBiC,EAlCXt3E,EAAW5yD,UAAUmoI,0BAA2B,EAAAtoF,EAAA9Q,qBAEhD6jB,EAAW5yD,UAAUwtE,gBACjBi8D,wBAAwB,EACxBN,UAAW,EACXZ,cAAc,EAAAtlH,EAAAvhB,SAAE,QAAQgG,KAAK,SAAW,QACxCiqH,WAAYwY,UAAaC,KAyD7Bx3E,EAAW5yD,UAAUwoI,eACjB6B,UAAazpI,UAAKE,QAAQ,iDACtBF,UAAKE,QAAQ,iDACbF,UAAKE,QAAQ,kDACbF,UAAKE,QAAQ,oDACbF,UAAKE,QAAQ,mDACbF,UAAKE,QAAQ,iDACbF,UAAKE,QAAQ,oDACjBwpI,aAAgB1pI,UAAKE,QAAQ,qDACzBF,UAAKE,QAAQ,qDACbF,UAAKE,QAAQ,sDACbF,UAAKE,QAAQ,wDACbF,UAAKE,QAAQ,uDACbF,UAAKE,QAAQ,qDACbF,UAAKE,QAAQ,wDACjBqoI,SAAYvoI,UAAKE,QAAQ,0CACzBypI,MAAiE,SAAxD3pI,UAAKE,QAAQ,uCACtB0pI,YAAe5pI,UAAKE,QAAQ,oDACxBF,UAAKE,QAAQ,qDACbF,UAAKE,QAAQ,kDACbF,UAAKE,QAAQ,kDACbF,UAAKE,QAAQ,gDACbF,UAAKE,QAAQ,iDACbF,UAAKE,QAAQ,iDACbF,UAAKE,QAAQ,mDACbF,UAAKE,QAAQ,sDACbF,UAAKE,QAAQ,oDACbF,UAAKE,QAAQ,qDACbF,UAAKE,QAAQ,sDACjB2pI,mBAA6F,SAAvE7pI,UAAKE,QAAQ,sDACnC4pI,WAAc9pI,UAAKE,QAAQ,6CAO/B,IAAMnB,EAAM,iBAENgrI,EAAa,SAACC,GAAD,OAAuB,SAAUnmI,GAChD,IAAIomI,EAAS9pI,KAAK8Y,KAAKla,GAOvB,OANKkrI,EAGyB,iBAAnB,IAAOpmI,EAAP,YAAAlE,EAAOkE,KACdomI,EAAOf,YAAYrlI,IAHnBomI,EAAS,IAAID,EAAkB7pI,KAAM0D,GACrC1D,KAAK8Y,KAAKla,EAAKkrI,IAIZA,IAGXvqI,UAAEmG,GAAGihI,WAAaiD,EAAW/3E,IAC7B,EAAAnxD,EAAAC,SAAU,aAAckxD,GAExBtyD,UAAEmG,GAAGqkI,eAAiBH,EAAWX,IACjC,EAAAvoI,EAAAC,SAAU,iBAAkBsoI,aAEbp3E,IACNo3E,kCCpgBT,IAAAvgI,EAAAC,EAAAC,EAwBED,GACCxL,EAAA,GACAA,EAAA,IACAA,EAAA,WACS0L,KAAAD,EAAA,mBAATF,EAMF,SAAAnJ,GAID,IAAAyqI,EA+BA,SAAAC,IACAjqI,KAAAkqI,SAAA,KACAlqI,KAAAmqI,WAAA,EACAnqI,KAAAoqI,mBACApqI,KAAAqqI,oBAAA,EACArqI,KAAAsqI,WAAA,EACAtqI,KAAAuqI,WAAA,oBACAvqI,KAAAwqI,aAAA,uBACAxqI,KAAAyqI,aAAA,uBACAzqI,KAAA0qI,cAAA,wBACA1qI,KAAA2qI,aAAA,uBACA3qI,KAAA4qI,cAAA,yBACA5qI,KAAA6qI,mBAAA,6BACA7qI,KAAA8qI,cAAA,4BACA9qI,KAAA+qI,cAAA,+BACA/qI,KAAAgrI,YACAhrI,KAAAgrI,SAAA,KACAC,UAAA,OACA/C,SAAA,OACAF,SAAA,OACAkD,YAAA,QACAzB,YAAA,kDACA,6DACA0B,iBAAA,yEACA7B,UAAA,wEACA8B,eAAA,2CACA7B,aAAA,oCACA8B,WAAA,KACAza,WAAA,WACAwX,SAAA,EACAoB,OAAA,EACAE,oBAAA,EACAC,WAAA,IAEA3pI,KAAAsrI,WACAC,OAAA,QAEAC,SAAA,SACAC,eACA5D,YAAA,KAEA6D,WAAA,GACAl3D,WAAA,MACAm3D,YAAA,GACAC,iBAAA,EACAC,kBAAA,EAEAC,wBAAA,EACAC,aAAA,EACAC,aAAA,EACAC,YAAA,EACAC,UAAA,YAGAC,iBAAA,EACAC,mBAAA,EACAC,UAAA,EACAC,cAAAtsI,KAAAusI,YAEAC,gBAAA,MAGAzE,QAAA,KACAD,QAAA,KACAjhG,SAAA,OACA4lG,cAAA,KAGAC,WAAA,KAEA/3B,SAAA,KACAizB,kBAAA,KACA+E,QAAA,KACAC,eAAA,EACAC,iBAAA,EACAC,WAAA,EACAC,cAAA,GACAC,SAAA,GACAC,UAAA,GACAC,gBAAA,EACAC,iBAAA,EACAC,UAAA,EACA7pG,UAAA,GAEAhkC,EAAAgG,OAAAvF,KAAAsrI,UAAAtrI,KAAAgrI,SAAA,KACAhrI,KAAAgrI,SAAAqC,GAAA9tI,EAAAgG,QAAA,KAAsCvF,KAAAgrI,SAAA,KACtChrI,KAAAgrI,SAAA,SAAAzrI,EAAAgG,QAAA,KAA8CvF,KAAAgrI,SAAAqC,IAC9CrtI,KAAAstI,MAAAC,EAAAhuI,EAAA,YAAAS,KAAAuqI,WAAA,gGAu1DA,SAAAgD,EAAAD,GACA,IAAA9nI,EAAA,iFACA,OAAA8nI,EAAA9hI,GAAA,WAAAhG,EAAA,WACAjG,EAAAS,MAAAm/C,YAAA,mBACA,IAAAn/C,KAAAyY,UAAAnU,QAAA,uBACA/E,EAAAS,MAAAm/C,YAAA,6BAEA,IAAAn/C,KAAAyY,UAAAnU,QAAA,uBACA/E,EAAAS,MAAAm/C,YAAA,8BAGA3zC,GAAA,YAAAhG,EAAAgoI,GAGA,SAAAA,IACAjuI,EAAA2nI,WAAAuG,sBAAAzD,EAAA0D,OAAA1D,EAAAsD,MAAA1uH,SAAA,GAAAorH,EAAAv9G,MAAA,MACAltB,EAAAS,MAAA4lD,QAAA,2BAAApwC,KAAA,KAAA2pC,YAAA,kBACA5/C,EAAAS,MAAAyjB,SAAA,mBACA,IAAAzjB,KAAAyY,UAAAnU,QAAA,uBACA/E,EAAAS,MAAAyjB,SAAA,6BAEA,IAAAzjB,KAAAyY,UAAAnU,QAAA,uBACA/E,EAAAS,MAAAyjB,SAAA,6BAMA,SAAAkqH,EAAAnlH,EAAAsJ,GAEA,QAAAl0B,KADA2B,EAAAgG,OAAAijB,EAAAsJ,GACAA,EACA,MAAAA,EAAAl0B,KACA4qB,EAAA5qB,GAAAk0B,EAAAl0B,IAGA,OAAA4qB,EA+CA,OAjiEAjpB,EAAAgG,OAAAhG,EAAAuJ,IAAiBo+H,YAAcn+H,QAAA,YA2H/BxJ,EAAAgG,OAAA0kI,EAAAhrI,WAEA2uI,gBAAA,gBAGAC,QAAA,EAGAC,kBAAA,WACA,OAAA9tI,KAAAstI,OAOAS,YAAA,SAAAz4G,GAEA,OADAq4G,EAAA3tI,KAAAsrI,UAAAh2G,OACAt1B,MAOAguI,kBAAA,SAAAxlH,EAAA8M,GACA,IAAA8E,EAAAszG,EAAAv8E,EAEAu8E,EAAA,SADAtzG,EAAA5R,EAAA4R,SAAAxa,gBACA,SAAAwa,EACA5R,EAAAxc,KACAhM,KAAAwjC,MAAA,EACAhb,EAAAxc,GAAA,KAAAhM,KAAAwjC,OAEA2tB,EAAAnxD,KAAAiuI,SAAA1uI,EAAAipB,GAAAklH,IACAp4G,SAAA/1B,EAAAgG,UAA8B+vB,OAC9B,UAAA8E,EACAp6B,KAAAkuI,mBAAA1lH,EAAA2oC,GACGu8E,GACH1tI,KAAAmuI,kBAAA3lH,EAAA2oC,IAKA88E,SAAA,SAAAzlH,EAAAklH,GAEA,OAAU1hI,GADVwc,EAAA,GAAAxc,GAAA7H,QAAA,+BACUsoB,MAAAjE,EACV4lH,YAAA,EAAAC,cAAA,EAAAC,aAAA,EACAC,UAAA,EAAAC,SAAA,EACAd,SACAJ,MAAAI,EACAH,EAAAhuI,EAAA,eAAAS,KAAAwqI,aAAA,wFADAxqI,KAAAstI,QAKAY,mBAAA,SAAA1lH,EAAA2oC,GACA,IAAA1kC,EAAAltB,EAAAipB,GACA2oC,EAAAlb,OAAA12C,MACA4xD,EAAA5jD,QAAAhO,MACAktB,EAAAuZ,SAAAhmC,KAAA4tI,mBAGA5tI,KAAAyuI,aAAAhiH,EAAA0kC,GACA1kC,EAAAhJ,SAAAzjB,KAAA4tI,iBAAApiI,GAAA,UAAAxL,KAAA0uI,YACAljI,GAAA,WAAAxL,KAAA2uI,aAAAnjI,GAAA,QAAAxL,KAAA4uI,UACA5uI,KAAA6uI,UAAA19E,GACA5xD,EAAAuZ,KAAA0P,EAAA,aAAA2oC,GAGAA,EAAA77B,SAAAiO,UACAvjC,KAAA8uI,mBAAAtmH,KAKAimH,aAAA,SAAAhiH,EAAA0kC,GACA,IAAAo6E,EAAA/2D,EAAAm3D,EACAD,EAAA1rI,KAAA+uI,KAAA59E,EAAA,cACAq4E,EAAAxpI,KAAA+uI,KAAA59E,EAAA,SAEAA,EAAAlb,QACAkb,EAAAlb,OAAA1jC,SAEAm5H,IACAv6E,EAAAlb,OAAA12C,EAAA,gBAAAS,KAAAyqI,aAAA,KAAAiB,EAAA,WACAj/G,EAAA+8G,EAAA,kBAAAr4E,EAAAlb,SAGAxpB,EAAA/f,IAAA,QAAA1M,KAAAgvI,iBAEA79E,EAAA5jD,SACA4jD,EAAA5jD,QAAAgF,SAIA,WADAg5H,EAAAvrI,KAAA+uI,KAAA59E,EAAA,YACA,SAAAo6E,GACA9+G,EAAAjhB,GAAA,QAAAxL,KAAAgvI,iBAEA,WAAAzD,GAAA,SAAAA,IACA/2D,EAAAx0E,KAAA+uI,KAAA59E,EAAA,cACAw6E,EAAA3rI,KAAA+uI,KAAA59E,EAAA,eACAA,EAAA5jD,QAAAhO,EAAAS,KAAA+uI,KAAA59E,EAAA,mBACA5xD,EAAA,UAAAkkB,SAAAzjB,KAAA0qI,eACA/jI,MAAYqW,IAAA2uH,EAAAsD,IAAAz6D,EAAAl2D,MAAAk2D,IACZj1E,EAAA,mCAAAkkB,SAAAzjB,KAAA0qI,eACA5wG,KAAA6xG,EAAApsI,EAAA,UAAAoH,MACMqW,IAAA2uH,EAAAsD,IAAAz6D,EAAAl2D,MAAAk2D,IADNA,IAEA/nD,EAAA+8G,EAAA,kBAAAr4E,EAAA5jD,SACA4jD,EAAA5jD,QAAA/B,GAAA,mBASA,OARAjM,EAAA2nI,WAAAmD,oBAAA9qI,EAAA2nI,WAAAgI,aAAAziH,EAAA,GACAltB,EAAA2nI,WAAAiI,kBACK5vI,EAAA2nI,WAAAmD,oBAAA9qI,EAAA2nI,WAAAgI,aAAAziH,EAAA,IACLltB,EAAA2nI,WAAAiI,kBACA5vI,EAAA2nI,WAAA8H,gBAAAviH,EAAA,KAEAltB,EAAA2nI,WAAA8H,gBAAAviH,EAAA,KAEA,MAMAoiH,UAAA,SAAA19E,GACA,GAAAnxD,KAAA+uI,KAAA59E,EAAA,cAAAA,EAAAu8E,OAAA,CACA,IAAA0B,EAAA3hI,EAAA4hI,EAAAhyI,EACAiyI,EAAA,IAAAh8G,KAAA,YACAs9F,EAAA5wH,KAAA+uI,KAAA59E,EAAA,cAEAy/D,EAAA14G,MAAA,UACAk3H,EAAA,SAAA9jI,GAGA,IAFAmC,EAAA,EACA4hI,EAAA,EACAhyI,EAAA,EAAiBA,EAAAiO,EAAAnL,OAAkB9C,IACnCiO,EAAAjO,GAAA8C,OAAAsN,IACAA,EAAAnC,EAAAjO,GAAA8C,OACAkvI,EAAAhyI,GAGA,OAAAgyI,GAEAC,EAAAC,SAAAH,EAAApvI,KAAA+uI,KAAA59E,EAAAy/D,EAAA14G,MAAA,MACA,kCACAo3H,EAAAjI,QAAA+H,EAAApvI,KAAA+uI,KAAA59E,EAAAy/D,EAAA14G,MAAA,MACA,gCAAAo3H,EAAAE,WAEAr+E,EAAA1kC,MAAA9lB,KAAA,OAAA3G,KAAAyvI,YAAAt+E,EAAAm+E,GAAAnvI,UAKAguI,kBAAA,SAAA3lH,EAAA2oC,GACA,IAAAu+E,EAAAnwI,EAAAipB,GACAknH,EAAA1pG,SAAAhmC,KAAA4tI,mBAGA8B,EAAAjsH,SAAAzjB,KAAA4tI,iBAAA33F,OAAAkb,EAAAm8E,OACA/tI,EAAAuZ,KAAA0P,EAAA,aAAA2oC,GACAnxD,KAAA2vI,SAAAx+E,EAAAnxD,KAAA4vI,gBAAAz+E,IAAA,GACAnxD,KAAA6vI,kBAAA1+E,GACAnxD,KAAA8vI,iBAAA3+E,GAGAA,EAAA77B,SAAAiO,UACAvjC,KAAA8uI,mBAAAtmH,GAKA2oC,EAAAm8E,MAAA/kI,IAAA,qBAaAwnI,kBAAA,SAAAtjH,EAAA6iH,EAAA36B,EAAAr/E,EAAAk9C,GACA,IAAAxmE,EAAAgkI,EAAAC,EAAAC,EAAAC,EACAh/E,EAAAnxD,KAAAowI,YAqCA,OAnCAj/E,IACAnxD,KAAAwjC,MAAA,EACAx3B,EAAA,KAAAhM,KAAAwjC,KACAxjC,KAAAqwI,aAAA9wI,EAAA,0BAAAyM,EACA,4DACAhM,KAAAqwI,aAAA7kI,GAAA,UAAAxL,KAAA0uI,YACAnvI,EAAA,QAAA02C,OAAAj2C,KAAAqwI,eACAl/E,EAAAnxD,KAAAowI,YAAApwI,KAAAiuI,SAAAjuI,KAAAqwI,cAAA,IACA/6G,YACA/1B,EAAAuZ,KAAA9Y,KAAAqwI,aAAA,gBAAAl/E,IAEAw8E,EAAAx8E,EAAA77B,gBACAg6G,OAAA99H,cAAA8hB,KAAAtzB,KAAAyvI,YAAAt+E,EAAAm+E,KACAtvI,KAAAqwI,aAAA9pI,IAAA+oI,GAEAtvI,KAAAswI,KAAA99D,IAAAryE,OAAAqyE,KAAA98B,MAAA88B,EAAA78B,OAAA,KACA31C,KAAAswI,OACAN,EAAAjpI,SAAA2kC,gBAAAs1B,YACAivE,EAAAlpI,SAAA2kC,gBAAAu1B,aACAivE,EAAAnpI,SAAA2kC,gBAAAo1B,YAAA/5D,SAAAqW,KAAA0jD,WACAqvE,EAAAppI,SAAA2kC,gBAAAm1B,WAAA95D,SAAAqW,KAAAyjD,UACA7gE,KAAAswI,MACAN,EAAA,MAAAE,EAAAD,EAAA,MAAAE,IAIAnwI,KAAAqwI,aAAA9nI,IAAA,OAAAvI,KAAAswI,KAAA,YAAA/nI,IAAA,MAAAvI,KAAAswI,KAAA,SACAn/E,EAAA77B,SAAAq/E,WACA30G,KAAAsqI,WAAA,EACAtqI,KAAAstI,MAAA7pH,SAAAzjB,KAAA2qI,cACA3qI,KAAAgvI,gBAAAhvI,KAAAqwI,aAAA,IACA9wI,EAAAgxI,SACAhxI,EAAAgxI,QAAAvwI,KAAAstI,OAEA/tI,EAAAuZ,KAAA9Y,KAAAqwI,aAAA,gBAAAl/E,GACAnxD,MAMAwwI,mBAAA,SAAAhoH,GACA,IAAA4R,EACA7R,EAAAhpB,EAAAipB,GACA2oC,EAAA5xD,EAAAuZ,KAAA0P,EAAA,cAEAD,EAAAyd,SAAAhmC,KAAA4tI,mBAIAxzG,EAAA5R,EAAA4R,SAAAxa,cACArgB,EAAAilC,WAAAhc,EAAA,cACA,UAAA4R,GACA+2B,EAAAlb,OAAA1jC,SACA4+C,EAAA5jD,QAAAgF,SACAgW,EAAA42B,YAAAn/C,KAAA4tI,iBACAlhI,IAAA,QAAA1M,KAAAgvI,iBACAtiI,IAAA,UAAA1M,KAAA0uI,YACAhiI,IAAA,WAAA1M,KAAA2uI,aACAjiI,IAAA,QAAA1M,KAAA4uI,WACG,QAAAx0G,GAAA,SAAAA,GACH7R,EAAA42B,YAAAn/C,KAAA4tI,iBAAAt7B,QAGA03B,IAAA74E,IACA64E,EAAA,QAOAyG,kBAAA,SAAAjoH,GACA,IAAA4R,EAAAszG,EACAnlH,EAAAhpB,EAAAipB,GACA2oC,EAAA5xD,EAAAuZ,KAAA0P,EAAA,cAEAD,EAAAyd,SAAAhmC,KAAA4tI,mBAKA,WADAxzG,EAAA5R,EAAA4R,SAAAxa,gBAEA4I,EAAA+a,UAAA,EACA4tB,EAAA5jD,QAAAmI,OAAA,UACA7L,KAAA,WAAsB7J,KAAAujC,UAAA,IAAyB07B,MAC/CvpD,OAAA,OAAAnN,KAA0Bo4B,QAAA,MAAA+vG,OAAA,MACvB,QAAAt2G,GAAA,SAAAA,KACHszG,EAAAnlH,EAAAsuB,SAAA,IAAA72C,KAAAwqI,eACA3zF,WAAAsI,YAAA,qBACAuuF,EAAAl4H,KAAA,yDACA3U,KAAA,gBAEAb,KAAAoqI,gBAAA7qI,EAAA8N,IAAArN,KAAAoqI,gBACA,SAAA9rI,GAAsB,OAAAA,IAAAkqB,EAAA,KAAAlqB,MAMtBwwI,mBAAA,SAAAtmH,GACA,IAAA4R,EAAAszG,EACAnlH,EAAAhpB,EAAAipB,GACA2oC,EAAA5xD,EAAAuZ,KAAA0P,EAAA,cAEAD,EAAAyd,SAAAhmC,KAAA4tI,mBAKA,WADAxzG,EAAA5R,EAAA4R,SAAAxa,gBAEA4I,EAAA+a,UAAA,EACA4tB,EAAA5jD,QAAAmI,OAAA,UACA7L,KAAA,WAAsB7J,KAAAujC,UAAA,IAAwB07B,MAC9CvpD,OAAA,OAAAnN,KAA0Bo4B,QAAA,MAAA+vG,OAAA,aACvB,QAAAt2G,GAAA,SAAAA,KACHszG,EAAAnlH,EAAAsuB,SAAA,IAAA72C,KAAAwqI,eACA3zF,WAAApzB,SAAA,qBACAiqH,EAAAl4H,KAAA,yDACA3U,KAAA,gBAEAb,KAAAoqI,gBAAA7qI,EAAA8N,IAAArN,KAAAoqI,gBACA,SAAA9rI,GAAsB,OAAAA,IAAAkqB,EAAA,KAAAlqB,IACtB0B,KAAAoqI,gBAAApqI,KAAAoqI,gBAAAjqI,QAAAqoB,IAOAilH,sBAAA,SAAAjlH,GACA,IAAAA,EACA,SAEA,QAAAnrB,EAAA,EAAkBA,EAAA2C,KAAAoqI,gBAAAjqI,OAAiC9C,IACnD,GAAA2C,KAAAoqI,gBAAA/sI,KAAAmrB,EACA,SAGA,UAQAmoH,SAAA,SAAAnoH,GACA,IACA,OAAAjpB,EAAAuZ,KAAA0P,EAAA,cAEA,MAAA1kB,GACA,mDAaA8sI,kBAAA,SAAApoH,EAAA5qB,EAAAU,GACA,IAAAg3B,EAAAg6G,EAAAvH,EAAAD,EACA32E,EAAAnxD,KAAA2wI,SAAAnoH,GAEA,OAAAtoB,UAAAC,QAAA,iBAAAvC,EACA,mBAAAA,EAAA2B,EAAAgG,UAA8ChG,EAAA2nI,WAAAoE,WAC9Cn6E,EAAA,QAAAvzD,EAAA2B,EAAAgG,UAA4C4rD,EAAA77B,UAC5Ct1B,KAAA+uI,KAAA59E,EAAAvzD,GAAA,KAGA03B,EAAA13B,MACA,iBAAAA,KACA03B,MACA13B,GAAAU,GAGA6yD,IACAnxD,KAAAkqI,WAAA/4E,GACAnxD,KAAAmvI,kBAGAG,EAAAtvI,KAAA6wI,mBAAAroH,GAAA,GACAu/G,EAAA/nI,KAAA8wI,eAAA3/E,EAAA,OACA22E,EAAA9nI,KAAA8wI,eAAA3/E,EAAA,OACAw8E,EAAAx8E,EAAA77B,YAGA,OAAAyyG,QAAAl/H,IAAAysB,EAAAs7F,iBAAA/nH,IAAAysB,EAAAyyG,UACA52E,EAAA77B,SAAAyyG,QAAA/nI,KAAAyvI,YAAAt+E,EAAA42E,IAEA,OAAAD,QAAAj/H,IAAAysB,EAAAs7F,iBAAA/nH,IAAAysB,EAAAwyG,UACA32E,EAAA77B,SAAAwyG,QAAA9nI,KAAAyvI,YAAAt+E,EAAA22E,IAEA,aAAAxyG,IACAA,EAAAiO,SACAvjC,KAAA8uI,mBAAAtmH,GAEAxoB,KAAAywI,kBAAAjoH,IAGAxoB,KAAAyuI,aAAAlvI,EAAAipB,GAAA2oC,GACAnxD,KAAA6uI,UAAA19E,GACAnxD,KAAA2vI,SAAAx+E,EAAAm+E,GACAtvI,KAAA8vI,iBAAA3+E,GACAnxD,KAAA6vI,kBAAA1+E,KAKA4/E,kBAAA,SAAAvoH,EAAA5qB,EAAAU,GACA0B,KAAA4wI,kBAAApoH,EAAA5qB,EAAAU,IAMA0yI,mBAAA,SAAAxoH,GACA,IAAA2oC,EAAAnxD,KAAA2wI,SAAAnoH,GACA2oC,GACAnxD,KAAA6vI,kBAAA1+E,IAQA8/E,mBAAA,SAAAzoH,EAAA8mH,GACA,IAAAn+E,EAAAnxD,KAAA2wI,SAAAnoH,GACA2oC,IACAnxD,KAAA2vI,SAAAx+E,EAAAm+E,GACAtvI,KAAA6vI,kBAAA1+E,GACAnxD,KAAA8vI,iBAAA3+E,KASA0/E,mBAAA,SAAAroH,EAAA0oH,GACA,IAAA//E,EAAAnxD,KAAA2wI,SAAAnoH,GAIA,OAHA2oC,MAAAu8E,QACA1tI,KAAAmxI,kBAAAhgF,EAAA+/E,GAEA//E,EAAAnxD,KAAAoxI,SAAAjgF,GAAA,MAIAu9E,WAAA,SAAA15H,GACA,IAAA2/F,EAAA08B,EAAAj7B,EACAjlD,EAAA5xD,EAAA2nI,WAAAyJ,SAAA37H,EAAAwT,QACAo4F,GAAA,EACA4oB,EAAAr4E,EAAAm8E,MAAApoH,GAAA,sBAGA,GADAisC,EAAAg5E,WAAA,EACA5qI,EAAA2nI,WAAAmD,mBACA,OAAAr1H,EAAA7T,SACA,OAAA5B,EAAA2nI,WAAAiI,kBACAvuB,GAAA,EACA,MACA,QAgBA,OAhBAxK,EAAA72G,EAAA,MAAAA,EAAA2nI,WAAA6D,cAAA,SACAxrI,EAAA2nI,WAAA4D,cAAA,IAAA35E,EAAAm8E,QACA,IACA/tI,EAAA2nI,WAAAoK,WAAAt8H,EAAAwT,OAAA2oC,EAAAk9E,cAAAl9E,EAAAm9E,aAAAl4B,EAAA,KAGAzB,EAAAp1G,EAAA2nI,WAAA6H,KAAA59E,EAAA,cAEAkgF,EAAA9xI,EAAA2nI,WAAAuI,YAAAt+E,GAGAwjD,EAAAn0G,MAAA2wD,EAAA1kC,MAAA0kC,EAAA1kC,MAAA,SAAA4kH,EAAAlgF,KAEA5xD,EAAA2nI,WAAAiI,mBAGA,EACA,QAAA5vI,EAAA2nI,WAAAiI,kBACA,MACA,QAAA5vI,EAAA2nI,WAAAqK,YAAAv8H,EAAAwT,OAAAxT,EAAAmgC,SACA51C,EAAA2nI,WAAA6H,KAAA59E,EAAA,kBACA5xD,EAAA2nI,WAAA6H,KAAA59E,EAAA,mBACA,MACA,QAAA5xD,EAAA2nI,WAAAqK,YAAAv8H,EAAAwT,OAAAxT,EAAAmgC,SACA51C,EAAA2nI,WAAA6H,KAAA59E,EAAA,kBACA5xD,EAAA2nI,WAAA6H,KAAA59E,EAAA,mBACA,MACA,SAAAn8C,EAAAmgC,SAAAngC,EAAAogC,UACA71C,EAAA2nI,WAAAsK,WAAAx8H,EAAAwT,QAEAo4F,EAAA5rG,EAAAmgC,SAAAngC,EAAAogC,QACA,MACA,SAAApgC,EAAAmgC,SAAAngC,EAAAogC,UACA71C,EAAA2nI,WAAAuK,WAAAz8H,EAAAwT,QAEAo4F,EAAA5rG,EAAAmgC,SAAAngC,EAAAogC,QACA,MACA,SAAApgC,EAAAmgC,SAAAngC,EAAAogC,UACA71C,EAAA2nI,WAAAqK,YAAAv8H,EAAAwT,OAAAghH,EAAA,UAEA5oB,EAAA5rG,EAAAmgC,SAAAngC,EAAAogC,QAGApgC,EAAAwxB,cAAA0O,QACA31C,EAAA2nI,WAAAqK,YAAAv8H,EAAAwT,OAAAxT,EAAAmgC,SACA51C,EAAA2nI,WAAA6H,KAAA59E,EAAA,kBACA5xD,EAAA2nI,WAAA6H,KAAA59E,EAAA,mBAIA,MACA,SAAAn8C,EAAAmgC,SAAAngC,EAAAogC,UACA71C,EAAA2nI,WAAAqK,YAAAv8H,EAAAwT,QAAA,OAEAo4F,EAAA5rG,EAAAmgC,SAAAngC,EAAAogC,QACA,MACA,SAAApgC,EAAAmgC,SAAAngC,EAAAogC,UACA71C,EAAA2nI,WAAAqK,YAAAv8H,EAAAwT,OAAAghH,GAAA,SAEA5oB,EAAA5rG,EAAAmgC,SAAAngC,EAAAogC,QAGApgC,EAAAwxB,cAAA0O,QACA31C,EAAA2nI,WAAAqK,YAAAv8H,EAAAwT,OAAAxT,EAAAmgC,SACA51C,EAAA2nI,WAAA6H,KAAA59E,EAAA,kBACA5xD,EAAA2nI,WAAA6H,KAAA59E,EAAA,mBAIA,MACA,SAAAn8C,EAAAmgC,SAAAngC,EAAAogC,UACA71C,EAAA2nI,WAAAqK,YAAAv8H,EAAAwT,OAAA,OAEAo4F,EAAA5rG,EAAAmgC,SAAAngC,EAAAogC,QACA,MACA,QAAAwrE,GAAA,OAEG,KAAA5rG,EAAA7T,SAAA6T,EAAAmgC,QACH51C,EAAA2nI,WAAA8H,gBAAAhvI,MAEA4gH,GAAA,EAGAA,IACA5rG,EAAAsT,iBACAtT,EAAAi4F,oBAKA0hC,YAAA,SAAA35H,GACA,IAAA08H,EAAAC,EACAxgF,EAAA5xD,EAAA2nI,WAAAyJ,SAAA37H,EAAAwT,QAEA,GAAAjpB,EAAA2nI,WAAA6H,KAAA59E,EAAA,kBAGA,OAFAugF,EAAAnyI,EAAA2nI,WAAA0K,eAAAryI,EAAA2nI,WAAA6H,KAAA59E,EAAA,eACAwgF,EAAA9/G,OAAAggH,aAAA,MAAA78H,EAAA88H,SAAA98H,EAAA7T,QAAA6T,EAAA88H,UACA98H,EAAAmgC,SAAAngC,EAAAogC,SAAAu8F,EAAA,MAAAD,KAAAptI,QAAAqtI,IAAA,GAKA/C,SAAA,SAAA55H,GACA,IACAm8C,EAAA5xD,EAAA2nI,WAAAyJ,SAAA37H,EAAAwT,QAEA,GAAA2oC,EAAA1kC,MAAAlmB,QAAA4qD,EAAA4gF,QACA,IACAxyI,EAAA2nI,WAAA8K,UAAAzyI,EAAA2nI,WAAA6H,KAAA59E,EAAA,cACAA,EAAA1kC,MAAA0kC,EAAA1kC,MAAAlmB,MAAA,KACAhH,EAAA2nI,WAAA+K,iBAAA9gF,MAGA5xD,EAAA2nI,WAAAiK,kBAAAhgF,GACA5xD,EAAA2nI,WAAA4I,iBAAA3+E,GACA5xD,EAAA2nI,WAAA2I,kBAAA1+E,IAGA,MAAArtD,IAGA,UAQAkrI,gBAAA,SAAAviH,GAUA,IAAA0kC,EAAAu7E,EAAAwF,EAAAvvE,EACAntC,EAAAg2G,EAAA3kG,EATA,WADApa,IAAAjE,QAAAiE,GACA2N,SAAAxa,gBACA6M,EAAAltB,EAAA,QAAAktB,EAAAlM,YAAA,IAGAhhB,EAAA2nI,WAAAuG,sBAAAhhH,IAAAltB,EAAA2nI,WAAAgI,aAAAziH,IAOA0kC,EAAA5xD,EAAA2nI,WAAAyJ,SAAAlkH,GACAltB,EAAA2nI,WAAAgD,UAAA3qI,EAAA2nI,WAAAgD,WAAA/4E,IACA5xD,EAAA2nI,WAAAgD,SAAAoD,MAAArvH,MAAA,MACAkzC,GAAA5xD,EAAA2nI,WAAAmD,oBACA9qI,EAAA2nI,WAAAiI,gBAAA5vI,EAAA2nI,WAAAgD,SAAAz9G,MAAA,MAMA,KADAylH,GADAxF,EAAAntI,EAAA2nI,WAAA6H,KAAA59E,EAAA,eACAu7E,EAAAlsI,MAAAisB,KAAA0kC,UAIAw8E,EAAAx8E,EAAA77B,SAAA48G,GAEA/gF,EAAA4gF,QAAA,KACAxyI,EAAA2nI,WAAAgI,WAAAziH,EACAltB,EAAA2nI,WAAAiK,kBAAAhgF,GAEA5xD,EAAA2nI,WAAAoD,YACA79G,EAAAnuB,MAAA,IAEAiB,EAAA2nI,WAAAoJ,OACA/wI,EAAA2nI,WAAAoJ,KAAA/wI,EAAA2nI,WAAAiL,SAAA1lH,GACAltB,EAAA2nI,WAAAoJ,KAAA,IAAA7jH,EAAA40C,cAGAsB,GAAA,EACApjE,EAAAktB,GAAAm5B,UAAA/7C,KAAA,WAEA,QADA84D,GAAA,UAAApjE,EAAAS,MAAAuI,IAAA,eAIAitB,GAAYzJ,KAAAxsB,EAAA2nI,WAAAoJ,KAAA,GAAA1vH,IAAArhB,EAAA2nI,WAAAoJ,KAAA,IACZ/wI,EAAA2nI,WAAAoJ,KAAA,KAGAn/E,EAAAm8E,MAAAh7B,QAGAnhD,EAAAm8E,MAAA/kI,KAAmB2mB,SAAA,WAAAhS,QAAA,QAAA0D,IAAA,YACnBrhB,EAAA2nI,WAAA2I,kBAAA1+E,GAIA37B,EAAAj2B,EAAA2nI,WAAAkL,aAAAjhF,EAAA37B,EAAAmtC,GACAxR,EAAAm8E,MAAA/kI,KAAmB2mB,SAAA3vB,EAAA2nI,WAAAoD,WAAA/qI,EAAAgxI,QACnB,SAAA5tE,EAAA,mBAAAzlD,QAAA,OACA6O,KAAAyJ,EAAAzJ,KAAA,KAAAnL,IAAA4U,EAAA5U,IAAA,OAEAuwC,EAAAu8E,SACAlC,EAAAjsI,EAAA2nI,WAAA6H,KAAA59E,EAAA,YACAtqB,EAAAtnC,EAAA2nI,WAAA6H,KAAA59E,EAAA,YACAA,EAAAm8E,MAAA/kI,IAAA,UA9vBA,SAAAk5B,GAEA,IADA,IAAAvS,EAAA5wB,EACAmjC,EAAAthC,QAAAshC,EAAA,KAAA16B,UAAA,CAMA,kBADAmoB,EAAAuS,EAAAl5B,IAAA,cACA,aAAA2mB,GAAA,UAAAA,KAMA5wB,EAAAuoB,SAAA4a,EAAAl5B,IAAA,eACAue,MAAAxoB,IAAA,IAAAA,GACA,OAAAA,EAGAmjC,IAAA7iB,SAGA,SAwuBAyzH,CAAA9yI,EAAAktB,IAAA,GACAltB,EAAA2nI,WAAAmD,oBAAA,EAEA9qI,EAAAynC,SAAAznC,EAAAynC,QAAAL,OAAA6kG,GACAr6E,EAAAm8E,MAAAtpH,KAAAwnH,EAAAjsI,EAAA2nI,WAAA6H,KAAA59E,EAAA,eAAAtqB,GAEAsqB,EAAAm8E,MAAA9B,GAAA,QAAAA,EAAA3kG,EAAA,MAGAtnC,EAAA2nI,WAAAoL,kBAAAnhF,IACAA,EAAA1kC,MAAAlf,QAAA,SAGAhO,EAAA2nI,WAAAgD,SAAA/4E,MAKA0+E,kBAAA,SAAA1+E,GACAnxD,KAAA6tI,QAAA,EACA7D,EAAA74E,EACAA,EAAAm8E,MAAAh7B,QAAAr8D,OAAAj2C,KAAAuyI,cAAAphF,IACAnxD,KAAAwyI,gBAAArhF,GAEA,IAAAshF,EACAC,EAAA1yI,KAAA2yI,mBAAAxhF,GACAs5D,EAAAioB,EAAA,GAEAE,EAAAzhF,EAAAm8E,MAAA93H,KAAA,IAAAxV,KAAA+qI,cAAA,MAEA6H,EAAAzyI,OAAA,GACAqtI,EAAAhtI,MAAAoyI,EAAA10I,IAAA,IAGAizD,EAAAm8E,MAAAnuF,YAAA,qEAAAp7B,MAAA,IACA0mG,EAAA,GACAt5D,EAAAm8E,MAAA7pH,SAAA,uBAAAgnG,GAAAliH,IAAA,QATA,GASAkiH,EAAA,MAEAt5D,EAAAm8E,OAAA,IAAAoF,EAAA,QAAAA,EAAA,mBACA,gCACAvhF,EAAAm8E,OAAAttI,KAAA+uI,KAAA59E,EAAA,yBACA,8BAEAA,IAAA5xD,EAAA2nI,WAAAgD,UAAA3qI,EAAA2nI,WAAAmD,oBAAA9qI,EAAA2nI,WAAAoL,kBAAAnhF,IACAA,EAAA1kC,MAAAlf,QAAA,SAIA4jD,EAAA0hF,YACAJ,EAAAthF,EAAA0hF,UACApjH,WAAA,WAGAgjH,IAAAthF,EAAA0hF,WAAA1hF,EAAA0hF,WACA1hF,EAAAm8E,MAAA93H,KAAA,mCAAA4hG,YAAAjmD,EAAA0hF,WAEAJ,EAAAthF,EAAA0hF,UAAA,MACI,KAOJP,kBAAA,SAAAnhF,GACA,OAAAA,EAAA1kC,OAAA0kC,EAAA1kC,MAAAvH,GAAA,cAAAisC,EAAA1kC,MAAAvH,GAAA,eAAAisC,EAAA1kC,MAAAvH,GAAA,WAIAktH,aAAA,SAAAjhF,EAAA37B,EAAAmtC,GACA,IAAAmwE,EAAA3hF,EAAAm8E,MAAAh/E,aACAykF,EAAA5hF,EAAAm8E,MAAAlhE,cACA4mE,EAAA7hF,EAAA1kC,MAAA0kC,EAAA1kC,MAAA6hC,aAAA,EACA2kF,EAAA9hF,EAAA1kC,MAAA0kC,EAAA1kC,MAAA2/C,cAAA,EACA8mE,EAAAnsI,SAAA2kC,gBAAAs1B,aAAA2B,EAAA,EAAApjE,EAAAwH,UAAA+5D,cACAqyE,EAAApsI,SAAA2kC,gBAAAu1B,cAAA0B,EAAA,EAAApjE,EAAAwH,UAAA85D,aAYA,OAVArrC,EAAAzJ,MAAA/rB,KAAA+uI,KAAA59E,EAAA,SAAA2hF,EAAAE,EAAA,EACAx9G,EAAAzJ,MAAA42C,GAAAntC,EAAAzJ,OAAAolC,EAAA1kC,MAAA+I,SAAAzJ,KAAAxsB,EAAAwH,UAAA+5D,aAAA,EACAtrC,EAAA5U,KAAA+hD,GAAAntC,EAAA5U,MAAAuwC,EAAA1kC,MAAA+I,SAAA5U,IAAAqyH,EAAA1zI,EAAAwH,UAAA85D,YAAA,EAGArrC,EAAAzJ,MAAAve,KAAAsF,IAAA0iB,EAAAzJ,KAAAyJ,EAAAzJ,KAAA+mH,EAAAI,KAAAJ,EACAtlI,KAAAioC,IAAAjgB,EAAAzJ,KAAA+mH,EAAAI,GAAA,GACA19G,EAAA5U,KAAApT,KAAAsF,IAAA0iB,EAAA5U,IAAA4U,EAAA5U,IAAAmyH,EAAAI,KAAAJ,EACAvlI,KAAAioC,IAAAs9F,EAAAE,GAAA,GAEAz9G,GAIA28G,SAAA,SAAA/rI,GAKA,IAJA,IAAA8oB,EACAiiC,EAAAnxD,KAAA2wI,SAAAvqI,GACAojI,EAAAxpI,KAAA+uI,KAAA59E,EAAA,SAEA/qD,IAAA,WAAAA,EAAAuS,MAAA,IAAAvS,EAAAoB,UAAAjI,EAAAg+B,KAAA61G,QAAA1uF,OAAAt+C,KACAA,IAAAojI,EAAA,iCAIA,QADAt6G,EAAA3vB,EAAA6G,GAAAovB,UACAzJ,KAAAmD,EAAAtO,MAMAuuH,gBAAA,SAAA1iH,GACA,IAAA++G,EAAA3kG,EAAAwsG,EAAA1G,EACAx7E,EAAAnxD,KAAAkqI,UAEA/4E,GAAA1kC,GAAA0kC,IAAA5xD,EAAAuZ,KAAA2T,EAAA,eAIAzsB,KAAAqqI,qBACAmB,EAAAxrI,KAAA+uI,KAAA59E,EAAA,YACAtqB,EAAA7mC,KAAA+uI,KAAA59E,EAAA,YACAkiF,EAAA,WACA9zI,EAAA2nI,WAAAoM,YAAAniF,IAIA5xD,EAAAynC,UAAAznC,EAAAynC,QAAAL,OAAA6kG,IAAAjsI,EAAAynC,QAAAwkG,IACAr6E,EAAAm8E,MAAAnpH,KAAAqnH,EAAAjsI,EAAA2nI,WAAA6H,KAAA59E,EAAA,eAAAtqB,EAAAwsG,GAEAliF,EAAAm8E,MAAA,cAAA9B,EAAA,UACA,WAAAA,EAAA,kBAAAA,EAAA3kG,EAAA,KAAAwsG,GAGA7H,GACA6H,IAEArzI,KAAAqqI,oBAAA,GAEAsC,EAAA3sI,KAAA+uI,KAAA59E,EAAA,aAEAw7E,EAAAnsI,MAAA2wD,EAAA1kC,MAAA0kC,EAAA1kC,MAAA,SAAA0kC,EAAA1kC,MAAA0kC,EAAA1kC,MAAAlmB,MAAA,GAAA4qD,IAGAnxD,KAAAkvI,WAAA,KACAlvI,KAAAsqI,YACAtqI,KAAAqwI,aAAA9nI,KAA4B2mB,SAAA,WAAAnD,KAAA,IAAAnL,IAAA,WAC5BrhB,EAAAgxI,UACAhxI,EAAAg0I,YACAh0I,EAAA,QAAA02C,OAAAj2C,KAAAstI,SAGAttI,KAAAsqI,WAAA,IAKAgJ,YAAA,SAAAniF,GACAA,EAAAm8E,MAAAnuF,YAAAn/C,KAAA2qI,cAAAj+H,IAAA,4BAIA8mI,oBAAA,SAAAx+H,GACA,GAAAzV,EAAA2nI,WAAAgD,SAAA,CAIA,IAAA3hH,EAAAhpB,EAAAyV,EAAAwT,QACA2oC,EAAA5xD,EAAA2nI,WAAAyJ,SAAApoH,EAAA,KAEAA,EAAA,GAAAvc,KAAAzM,EAAA2nI,WAAAqD,YACA,IAAAhiH,EAAAq9B,QAAA,IAAArmD,EAAA2nI,WAAAqD,YAAApqI,QACAooB,EAAAyd,SAAAzmC,EAAA2nI,WAAA0G,kBACArlH,EAAApB,QAAA,IAAA5nB,EAAA2nI,WAAAwD,eAAAvqI,SACAZ,EAAA2nI,WAAAmD,oBAAA9qI,EAAA2nI,WAAAoD,WAAA/qI,EAAAgxI,YACAhoH,EAAAyd,SAAAzmC,EAAA2nI,WAAA0G,kBAAAruI,EAAA2nI,WAAAgD,WAAA/4E,IACA5xD,EAAA2nI,WAAAiI,oBAKAoC,YAAA,SAAAvlI,EAAAwpB,EAAAi+G,GACA,IAAAjrH,EAAAjpB,EAAAyM,GACAmlD,EAAAnxD,KAAA2wI,SAAAnoH,EAAA,IAEAxoB,KAAAytI,sBAAAjlH,EAAA,MAGAxoB,KAAA0zI,gBAAAviF,EAAA37B,GACA,MAAAi+G,EAAAzzI,KAAA+uI,KAAA59E,EAAA,uBACAsiF,GACAzzI,KAAA6vI,kBAAA1+E,KAIAsgF,WAAA,SAAAzlI,GACA,IAAAsjI,EACA9mH,EAAAjpB,EAAAyM,GACAmlD,EAAAnxD,KAAA2wI,SAAAnoH,EAAA,IAEAxoB,KAAA+uI,KAAA59E,EAAA,gBAAAA,EAAAwiF,YACAxiF,EAAAi9E,YAAAj9E,EAAAwiF,WACAxiF,EAAAo9E,UAAAp9E,EAAAk9E,cAAAl9E,EAAAyiF,aACAziF,EAAAq9E,SAAAr9E,EAAAm9E,aAAAn9E,EAAA0iF,cAEAvE,EAAA,IAAAh8G,KACA69B,EAAAi9E,YAAAkB,EAAAhI,UACAn2E,EAAAo9E,UAAAp9E,EAAAk9E,cAAAiB,EAAAwE,WACA3iF,EAAAq9E,SAAAr9E,EAAAm9E,aAAAgB,EAAAyE,eAEA/zI,KAAAg0I,cAAA7iF,GACAnxD,KAAAuxI,YAAA/oH,IAIAyrH,iBAAA,SAAAjoI,EAAA2J,EAAA89H,GACA,IAAAjrH,EAAAjpB,EAAAyM,GACAmlD,EAAAnxD,KAAA2wI,SAAAnoH,EAAA,IAEA2oC,EAAA,kBAAAsiF,EAAA,iBACAtiF,EAAA,cAAAsiF,EAAA,iBACA5sH,SAAAlR,EAAAjS,QAAAiS,EAAA4lG,eAAAj9G,MAAA,IAEA0B,KAAAg0I,cAAA7iF,GACAnxD,KAAAuxI,YAAA/oH,IAIA8oH,WAAA,SAAAtlI,EAAAkoI,EAAAC,EAAAt9G,GACA,IAAAs6B,EACA3oC,EAAAjpB,EAAAyM,GAEAzM,EAAAs3B,GAAAmP,SAAAhmC,KAAA6qI,qBAAA7qI,KAAAytI,sBAAAjlH,EAAA,OAIA2oC,EAAAnxD,KAAA2wI,SAAAnoH,EAAA,KACA4lH,YAAAj9E,EAAAwiF,WAAAp0I,EAAA,IAAAs3B,GAAAiD,OACAq3B,EAAAk9E,cAAAl9E,EAAAyiF,aAAAM,EACA/iF,EAAAm9E,aAAAn9E,EAAA0iF,YAAAM,EACAn0I,KAAAo0I,YAAApoI,EAAAhM,KAAAyvI,YAAAt+E,EACAA,EAAAwiF,WAAAxiF,EAAAyiF,aAAAziF,EAAA0iF,gBAIArC,WAAA,SAAAxlI,GACA,IAAAwc,EAAAjpB,EAAAyM,GACAhM,KAAAo0I,YAAA5rH,EAAA,KAIA4rH,YAAA,SAAApoI,EAAAqlI,GACA,IAAA18B,EACAnsF,EAAAjpB,EAAAyM,GACAmlD,EAAAnxD,KAAA2wI,SAAAnoH,EAAA,IAEA6oH,EAAA,MAAAA,IAAArxI,KAAAyvI,YAAAt+E,GACAA,EAAA1kC,OACA0kC,EAAA1kC,MAAAlmB,IAAA8qI,GAEArxI,KAAA8vI,iBAAA3+E,IAEAwjD,EAAA30G,KAAA+uI,KAAA59E,EAAA,aAEAwjD,EAAAn0G,MAAA2wD,EAAA1kC,MAAA0kC,EAAA1kC,MAAA,SAAA4kH,EAAAlgF,IACGA,EAAA1kC,OACH0kC,EAAA1kC,MAAAlf,QAAA,UAGA4jD,EAAAu8E,OACA1tI,KAAA6vI,kBAAA1+E,IAEAnxD,KAAAmvI,kBACAnvI,KAAAkvI,WAAA/9E,EAAA1kC,MAAA,GACA,iBAAA0kC,EAAA1kC,MAAA,IACA0kC,EAAA1kC,MAAAlf,QAAA,SAEAvN,KAAAkvI,WAAA,OAKAY,iBAAA,SAAA3+E,GACA,IAAA87E,EAAAqC,EAAA+B,EACArE,EAAAhtI,KAAA+uI,KAAA59E,EAAA,YAEA67E,IACAC,EAAAjtI,KAAA+uI,KAAA59E,EAAA,cAAAnxD,KAAA+uI,KAAA59E,EAAA,cACAm+E,EAAAtvI,KAAAoxI,SAAAjgF,GACAkgF,EAAArxI,KAAAq0I,WAAApH,EAAAqC,EAAAtvI,KAAAiyI,iBAAA9gF,IACA5xD,EAAAytI,GAAAzmI,IAAA8qI,KAQAiD,WAAA,SAAAhF,GACA,IAAAiF,EAAAjF,EAAAE,SACA,OAAA+E,EAAA,GAAAA,EAAA,OAOAhI,YAAA,SAAA+C,GACA,IAAA9lB,EACAgrB,EAAA,IAAAlhH,KAAAg8G,EAAA/7G,WAQA,OALAihH,EAAAnN,QAAAmN,EAAAlN,UAAA,GAAAkN,EAAAhF,UAAA,IAEAhmB,EAAAgrB,EAAAjhH,UACAihH,EAAAjF,SAAA,GACAiF,EAAAnN,QAAA,GACA75H,KAAAygB,MAAAzgB,KAAA47D,OAAAogD,EAAAgrB,GAAA,aAgBAxC,UAAA,SAAAzxI,EAAAjC,EAAAg3B,GACA,SAAA/0B,GAAA,MAAAjC,EACA,yBAIA,SADAA,EAAA,iBAAAA,IAAAgrB,WAAAhrB,EAAA,IAEA,YAGA,IAAAm2I,EAAA1uH,EAAAyf,EAcA8pG,EAbAoF,EAAA,EACAC,GAAAr/G,IAAAk3G,gBAAA,OAAAxsI,KAAAsrI,UAAAkB,gBACAA,EAAA,iBAAAmI,KACA,IAAArhH,MAAAygH,cAAA,IAAAltH,SAAA8tH,EAAA,IACAvJ,GAAA91G,IAAA81G,cAAA,OAAAprI,KAAAsrI,UAAAF,cACA9B,GAAAh0G,IAAAg0G,SAAA,OAAAtpI,KAAAsrI,UAAAhC,SACA6B,GAAA71G,IAAA61G,gBAAA,OAAAnrI,KAAAsrI,UAAAH,gBACA1B,GAAAn0G,IAAAm0G,WAAA,OAAAzpI,KAAAsrI,UAAA7B,WACA0K,GAAA,EACAD,GAAA,EACAK,GAAA,EACAK,GAAA,EACAC,GAAA,EAIAC,EAAA,SAAA58H,GACA,IAAApR,EAAA2tI,EAAA,EAAAl0I,EAAAJ,QAAAI,EAAAoE,OAAA8vI,EAAA,KAAAv8H,EAIA,OAHApR,GACA2tI,IAEA3tI,GAIAiuI,EAAA,SAAA78H,GACA,IAAA88H,EAAAF,EAAA58H,GACA9H,EAAA,MAAA8H,EAAA,SAAAA,EAAA,GACA,MAAAA,GAAA88H,EAAA,QAAA98H,EAAA,IAEA+8H,EAAA,IAAAp6H,OAAA,SADA,MAAA3C,EAAA9H,EAAA,GACgC,IAAAA,EAAA,KAChCs1G,EAAApnH,EAAAuG,UAAA6vI,GAAAx8H,MAAA+8H,GACA,IAAAvvB,EACA,mCAAAgvB,EAGA,OADAA,GAAAhvB,EAAA,GAAAvlH,OACA0mB,SAAA6+F,EAAA,QAIAwvB,EAAA,SAAAh9H,EAAAi9H,EAAAC,GACA,IAAAlhI,GAAA,EACA5I,EAAA/L,EAAA8N,IAAAynI,EAAA58H,GAAAk9H,EAAAD,EAAA,SAAAzpH,EAAAwsD,GACA,QAAAA,EAAAxsD,MACMhY,KAAA,SAAA0S,EAAA6F,GACN,QAAA7F,EAAA,GAAAjmB,OAAA8rB,EAAA,GAAA9rB,UAWA,GARAZ,EAAAsK,KAAAyB,EAAA,SAAAjO,EAAAg4I,GACA,IAAAz3I,EAAAy3I,EAAA,GACA,GAAA/2I,EAAA05H,OAAA0c,EAAA92I,EAAAuC,QAAAyf,gBAAAhiB,EAAAgiB,cAGA,OAFA1L,EAAAmhI,EAAA,GACAX,GAAA92I,EAAAuC,QACA,KAGA,IAAA+T,EACA,OAAAA,EAAA,EAEA,iCAAAwgI,GAKAY,EAAA,WACA,GAAAh3I,EAAAqG,OAAA+vI,KAAAn0I,EAAAoE,OAAA8vI,GACA,uCAAAC,EAEAA,KAGA,IAAAD,EAAA,EAAoBA,EAAAl0I,EAAAJ,OAAyBs0I,IAC7C,GAAAI,EACA,MAAAt0I,EAAAoE,OAAA8vI,IAAAK,EAAA,KAGAQ,IAFAT,GAAA,OAKA,OAAAt0I,EAAAoE,OAAA8vI,IACA,QACAF,EAAAQ,EAAA,KACA,MACA,QACAG,EAAA,IAAA9J,EAAA9B,GACA,MACA,QACAsL,EAAAG,EAAA,KACA,MACA,QACAb,EAAAa,EAAA,KACA,MACA,QACAb,EAAAgB,EAAA,IAAA/J,EAAA1B,GACA,MACA,QACA0K,EAAAY,EAAA,KACA,MACA,QAEAZ,GADA7E,EAAA,IAAAh8G,KAAAyhH,EAAA,OACAhB,cACAG,EAAA5E,EAAAwE,WAAA,EACAS,EAAAjF,EAAAhI,UACA,MACA,QAEA6M,GADA7E,EAAA,IAAAh8G,MAAAyhH,EAAA,KAAA/0I,KAAAu1I,cAAA,MACAxB,cACAG,EAAA5E,EAAAwE,WAAA,EACAS,EAAAjF,EAAAhI,UACA,MACA,QACAwN,EAAA,KACAQ,IAEAT,GAAA,EAEA,MACA,QACAS,IAKA,GAAAZ,EAAAp2I,EAAA6B,SACAqlC,EAAAlnC,EAAA05H,OAAA0c,IACA,OAAAnpI,KAAAi6B,IACA,iDAAAA,EAWA,IAPA,IAAA2uG,EACAA,GAAA,IAAA7gH,MAAAygH,cACGI,EAAA,MACHA,IAAA,IAAA7gH,MAAAygH,eAAA,IAAAzgH,MAAAygH,cAAA,KACAI,GAAA3H,EAAA,SAGAoI,GAAA,EAGA,IAFAV,EAAA,EACAK,EAAAK,IAGAL,IADAxuH,EAAA/lB,KAAAw1I,gBAAArB,EAAAD,EAAA,MAIAA,IACAK,GAAAxuH,EAKA,IADAupH,EAAAtvI,KAAAy1I,sBAAA,IAAAniH,KAAA6gH,EAAAD,EAAA,EAAAK,KACAR,gBAAAI,GAAA7E,EAAAwE,WAAA,IAAAI,GAAA5E,EAAAhI,YAAAiN,EACA,oBAEA,OAAAjF,GAIAoG,KAAA,WACAC,OAAA,aACAC,SAAA,WACAC,QAAA,WACAC,QAAA,aACAC,SAAA,WACAC,SAAA,YACAC,SAAA,YACAC,IAAA,WACAC,MAAA,IACAC,UAAA,IACA/M,IAAA,WAEAkM,aACA,IADA,OAAA/nI,KAAAygB,MAAA,OAAAzgB,KAAAygB,MAAA,MACAzgB,KAAAygB,MAAA,kBA8BAomH,WAAA,SAAA9zI,EAAA+uI,EAAAh6G,GACA,IAAAg6G,EACA,SAGA,IAAAmF,EACArJ,GAAA91G,IAAA81G,cAAA,OAAAprI,KAAAsrI,UAAAF,cACA9B,GAAAh0G,IAAAg0G,SAAA,OAAAtpI,KAAAsrI,UAAAhC,SACA6B,GAAA71G,IAAA61G,gBAAA,OAAAnrI,KAAAsrI,UAAAH,gBACA1B,GAAAn0G,IAAAm0G,WAAA,OAAAzpI,KAAAsrI,UAAA7B,WAGAqL,EAAA,SAAA58H,GACA,IAAApR,EAAA2tI,EAAA,EAAAl0I,EAAAJ,QAAAI,EAAAoE,OAAA8vI,EAAA,KAAAv8H,EAIA,OAHApR,GACA2tI,IAEA3tI,GAIAuvI,EAAA,SAAAn+H,EAAA5Z,EAAAyuB,GACA,IAAA24F,EAAA,GAAApnH,EACA,GAAAw2I,EAAA58H,GACA,KAAAwtG,EAAAvlH,OAAA4sB,GACA24F,EAAA,IAAAA,EAGA,OAAAA,GAIA4wB,EAAA,SAAAp+H,EAAA5Z,EAAA62I,EAAAC,GACA,OAAAN,EAAA58H,GAAAk9H,EAAA92I,GAAA62I,EAAA72I,IAEAsuB,EAAA,GACAioH,GAAA,EAEA,GAAAvF,EACA,IAAAmF,EAAA,EAAqBA,EAAAl0I,EAAAJ,OAAyBs0I,IAC9C,GAAAI,EACA,MAAAt0I,EAAAoE,OAAA8vI,IAAAK,EAAA,KAGAloH,GAAArsB,EAAAoE,OAAA8vI,GAFAI,GAAA,OAKA,OAAAt0I,EAAAoE,OAAA8vI,IACA,QACA7nH,GAAAypH,EAAA,IAAA/G,EAAAhI,UAAA,GACA,MACA,QACA16G,GAAA0pH,EAAA,IAAAhH,EAAAE,SAAApE,EAAA9B,GACA,MACA,QACA18G,GAAAypH,EAAA,IACA7oI,KAAA47D,OAAA,IAAA91C,KAAAg8G,EAAAyE,cAAAzE,EAAAwE,WAAAxE,EAAAhI,WAAA/zG,UAAA,IAAAD,KAAAg8G,EAAAyE,cAAA,KAAAxgH,WAAA,UACA,MACA,QACA3G,GAAAypH,EAAA,IAAA/G,EAAAwE,WAAA,KACA,MACA,QACAlnH,GAAA0pH,EAAA,IAAAhH,EAAAwE,WAAA3I,EAAA1B,GACA,MACA,QACA78G,GAAAkoH,EAAA,KAAAxF,EAAAyE,eACAzE,EAAAyE,cAAA,eAAAzE,EAAAyE,cAAA,IACA,MACA,QACAnnH,GAAA0iH,EAAA/7G,UACA,MACA,QACA3G,GAAA,IAAA0iH,EAAA/7G,UAAAvzB,KAAAu1I,aACA,MACA,QACAT,EAAA,KACAloH,GAAA,IAEAioH,GAAA,EAEA,MACA,QACAjoH,GAAArsB,EAAAoE,OAAA8vI,GAKA,OAAA7nH,GAIAglH,eAAA,SAAArxI,GACA,IAAAk0I,EACA/C,EAAA,GACAmD,GAAA,EAGAC,EAAA,SAAA58H,GACA,IAAApR,EAAA2tI,EAAA,EAAAl0I,EAAAJ,QAAAI,EAAAoE,OAAA8vI,EAAA,KAAAv8H,EAIA,OAHApR,GACA2tI,IAEA3tI,GAGA,IAAA2tI,EAAA,EAAoBA,EAAAl0I,EAAAJ,OAAyBs0I,IAC7C,GAAAI,EACA,MAAAt0I,EAAAoE,OAAA8vI,IAAAK,EAAA,KAGApD,GAAAnxI,EAAAoE,OAAA8vI,GAFAI,GAAA,OAKA,OAAAt0I,EAAAoE,OAAA8vI,IACA,gCACA/C,GAAA,aACA,MACA,gBACA,YACA,QACAoD,EAAA,KACApD,GAAA,IAEAmD,GAAA,EAEA,MACA,QACAnD,GAAAnxI,EAAAoE,OAAA8vI,GAIA,OAAA/C,GAIA3C,KAAA,SAAA59E,EAAAvzD,GACA,YAAAiL,IAAAsoD,EAAA77B,SAAA13B,GACAuzD,EAAA77B,SAAA13B,GAAAoC,KAAAsrI,UAAA1tI,IAIAuzI,kBAAA,SAAAhgF,EAAA+/E,GACA,GAAA//E,EAAA1kC,MAAAlmB,QAAA4qD,EAAA4gF,QAAA,CAIA,IAAAnhB,EAAA5wH,KAAA+uI,KAAA59E,EAAA,cACAolF,EAAAplF,EAAA4gF,QAAA5gF,EAAA1kC,MAAA0kC,EAAA1kC,MAAAlmB,MAAA,KACAshI,EAAA7nI,KAAA4vI,gBAAAz+E,GACAm+E,EAAAzH,EACAvyG,EAAAt1B,KAAAiyI,iBAAA9gF,GAEA,IACAm+E,EAAAtvI,KAAAgyI,UAAAphB,EAAA2lB,EAAAjhH,IAAAuyG,EACG,MAAA7yH,GACHuhI,EAAArF,EAAA,GAAAqF,EAEAplF,EAAAi9E,YAAAkB,EAAAhI,UACAn2E,EAAAo9E,UAAAp9E,EAAAk9E,cAAAiB,EAAAwE,WACA3iF,EAAAq9E,SAAAr9E,EAAAm9E,aAAAgB,EAAAyE,cACA5iF,EAAAwiF,WAAA4C,EAAAjH,EAAAhI,UAAA,EACAn2E,EAAAyiF,aAAA2C,EAAAjH,EAAAwE,WAAA,EACA3iF,EAAA0iF,YAAA0C,EAAAjH,EAAAyE,cAAA,EACA/zI,KAAA0zI,gBAAAviF,KAIAy+E,gBAAA,SAAAz+E,GACA,OAAAnxD,KAAAw2I,gBAAArlF,EACAnxD,KAAAy2I,eAAAtlF,EAAAnxD,KAAA+uI,KAAA59E,EAAA,mBAAA79B,QAIAmjH,eAAA,SAAAtlF,EAAAm+E,EAAAzH,GACA,IA0CA6O,EAAA,MAAApH,GAAA,KAAAA,EAAAzH,EAAA,iBAAAyH,EArCA,SAAA95G,GACA,IACA,OAAAj2B,EAAA2nI,WAAA8K,UAAAzyI,EAAA2nI,WAAA6H,KAAA59E,EAAA,cACA37B,EAAAj2B,EAAA2nI,WAAA+K,iBAAA9gF,IAEA,MAAAjrD,IAaA,IARA,IAAAopI,GAAA95G,EAAA5V,cAAA1H,MAAA,MACA3Y,EAAA2nI,WAAAkK,SAAAjgF,GAAA,WAAA79B,KACA6gH,EAAA7E,EAAAyE,cACAG,EAAA5E,EAAAwE,WACAS,EAAAjF,EAAAhI,UACApF,EAAA,uCACAp7H,EAAAo7H,EAAApnH,KAAA0a,GAEA1uB,GAAA,CACA,OAAAA,EAAA,SACA,gBACAytI,GAAA1tH,SAAA/f,EAAA,OAA2C,MAC3C,gBACAytI,GAAA,EAAA1tH,SAAA/f,EAAA,OAA+C,MAC/C,gBACAotI,GAAArtH,SAAA/f,EAAA,OACAytI,EAAA/mI,KAAAsF,IAAAyhI,EAAAh1I,EAAA2nI,WAAAsO,gBAAArB,EAAAD,IACA,MACA,gBACAC,GAAAttH,SAAA/f,EAAA,OACAytI,EAAA/mI,KAAAsF,IAAAyhI,EAAAh1I,EAAA2nI,WAAAsO,gBAAArB,EAAAD,IAGAptI,EAAAo7H,EAAApnH,KAAA0a,GAEA,WAAAlC,KAAA6gH,EAAAD,EAAAK,GAEAoC,CAAArH,GACA,iBAAAA,EAAAxoH,MAAAwoH,GAAAzH,EA3CA,SAAAryG,GACA,IAAA85G,EAAA,IAAAh8G,KAEA,OADAg8G,EAAAjI,QAAAiI,EAAAhI,UAAA9xG,GACA85G,EAwCAsH,CAAAtH,GAAA,IAAAh8G,KAAAg8G,EAAA/7G,WASA,OAPAmjH,KAAA,iBAAAA,EAAAptH,WAAAu+G,EAAA6O,KAEAA,EAAAG,SAAA,GACAH,EAAAI,WAAA,GACAJ,EAAAK,WAAA,GACAL,EAAAM,gBAAA,IAEAh3I,KAAAy1I,sBAAAiB,IAUAjB,sBAAA,SAAAnG,GACA,OAAAA,GAGAA,EAAAuH,SAAAvH,EAAA2H,WAAA,GAAA3H,EAAA2H,WAAA,KACA3H,GAHA,MAOAK,SAAA,SAAAx+E,EAAAm+E,EAAA4H,GACA,IAAApnI,GAAAw/H,EACA6H,EAAAhmF,EAAAk9E,cACA+I,EAAAjmF,EAAAm9E,aACAoI,EAAA12I,KAAAw2I,gBAAArlF,EAAAnxD,KAAAy2I,eAAAtlF,EAAAm+E,EAAA,IAAAh8G,OAEA69B,EAAAi9E,YAAAj9E,EAAAwiF,WAAA+C,EAAApP,UACAn2E,EAAAo9E,UAAAp9E,EAAAk9E,cAAAl9E,EAAAyiF,aAAA8C,EAAA5C,WACA3iF,EAAAq9E,SAAAr9E,EAAAm9E,aAAAn9E,EAAA0iF,YAAA6C,EAAA3C,cACAoD,IAAAhmF,EAAAk9E,eAAA+I,IAAAjmF,EAAAm9E,cAAA4I,GACAl3I,KAAAg0I,cAAA7iF,GAEAnxD,KAAA0zI,gBAAAviF,GACAA,EAAA1kC,OACA0kC,EAAA1kC,MAAAlmB,IAAAuJ,EAAA,GAAA9P,KAAAyvI,YAAAt+E,KAKAigF,SAAA,SAAAjgF,GAIA,OAHAA,EAAA0iF,aAAA1iF,EAAA1kC,OAAA,KAAA0kC,EAAA1kC,MAAAlmB,MAAA,KACAvG,KAAAy1I,sBAAA,IAAAniH,KACA69B,EAAA0iF,YAAA1iF,EAAAyiF,aAAAziF,EAAAwiF,cAOAnB,gBAAA,SAAArhF,GACA,IAAA27E,EAAA9sI,KAAA+uI,KAAA59E,EAAA,cACAnlD,EAAA,IAAAmlD,EAAAnlD,GAAA7H,QAAA,cACAgtD,EAAAm8E,MAAA93H,KAAA,kBAAAnI,IAAA,WACA,IAAAL,GACA2C,KAAA,WACApQ,EAAA2nI,WAAAqK,YAAAvlI,GAAA8gI,EAAA,MAEA3lG,KAAA,WACA5nC,EAAA2nI,WAAAqK,YAAAvlI,GAAA8gI,EAAA,MAEA3oH,KAAA,WACA5kB,EAAA2nI,WAAAiI,mBAEAkI,MAAA,WACA93I,EAAA2nI,WAAAuK,WAAAzlI,IAEAsrI,UAAA,WAEA,OADA/3I,EAAA2nI,WAAAoK,WAAAtlI,GAAAhM,KAAAi5B,aAAA,eAAAj5B,KAAAi5B,aAAA,aAAAj5B,OACA,GAEAu3I,YAAA,WAEA,OADAh4I,EAAA2nI,WAAA+M,iBAAAjoI,EAAAhM,KAAA,MACA,GAEAw3I,WAAA,WAEA,OADAj4I,EAAA2nI,WAAA+M,iBAAAjoI,EAAAhM,KAAA,MACA,IAGAT,EAAAS,MAAAwL,GAAAxL,KAAAi5B,aAAA,cAAAjsB,EAAAhN,KAAAi5B,aAAA,qBAKAs5G,cAAA,SAAAphF,GACA,IAAAsmF,EAAAvP,EAAAv4H,EAAAq4H,EAAA7gG,EAAA+jG,EAAAwM,EACAC,EAAAC,EAAAxP,EAAAiE,EAAA/C,EAAAC,EACAE,EAAA0B,EAAAsB,EAAAN,EACAC,EAAAvE,EAAA/tG,EAAA+9G,EAAA/nB,EAAA5jG,EAAA2hG,EAAAiqB,EACAC,EAAAC,EAAAlhH,EAAAy9G,EAAA0D,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAA1hH,EAAA2hH,EAAAC,EAAAC,EACAC,EAAA,IAAAplH,KACA+jH,EAAAr3I,KAAAy1I,sBACA,IAAAniH,KAAAolH,EAAA3E,cAAA2E,EAAA5E,WAAA4E,EAAApR,YACAkC,EAAAxpI,KAAA+uI,KAAA59E,EAAA,SACAg8E,EAAAntI,KAAA+uI,KAAA59E,EAAA,mBACA06E,EAAA7rI,KAAA+uI,KAAA59E,EAAA,oBACA26E,EAAA9rI,KAAA+uI,KAAA59E,EAAA,0BACAuhF,EAAA1yI,KAAA2yI,mBAAAxhF,GACA07E,EAAA7sI,KAAA+uI,KAAA59E,EAAA,oBACA27E,EAAA9sI,KAAA+uI,KAAA59E,EAAA,cACAwnF,EAAA,IAAAjG,EAAA,QAAAA,EAAA,GACAkG,EAAA54I,KAAAy1I,sBAAAtkF,EAAAwiF,WACA,IAAArgH,KAAA69B,EAAA0iF,YAAA1iF,EAAAyiF,aAAAziF,EAAAwiF,YADA,IAAArgH,KAAA,WAEAy0G,EAAA/nI,KAAA8wI,eAAA3/E,EAAA,OACA22E,EAAA9nI,KAAA8wI,eAAA3/E,EAAA,OACAo9E,EAAAp9E,EAAAo9E,UAAA1B,EACA2B,GAAAr9E,EAAAq9E,SAMA,GAJAD,EAAA,IACAA,GAAA,GACAC,MAEA1G,EAIA,IAHA2P,EAAAz3I,KAAAy1I,sBAAA,IAAAniH,KAAAw0G,EAAAiM,cACAjM,EAAAgM,WAAApB,EAAA,GAAAA,EAAA,KAAA5K,EAAAR,YACAmQ,EAAA1P,GAAA0P,EAAA1P,IAAA0P,EACAz3I,KAAAy1I,sBAAA,IAAAniH,KAAAk7G,GAAAD,EAAA,IAAAkJ,KACAlJ,EACA,IACAA,EAAA,GACAC,MAqDA,IAjDAr9E,EAAAo9E,YACAp9E,EAAAq9E,YAEAtG,EAAAloI,KAAA+uI,KAAA59E,EAAA,YACA+2E,EAAA4D,EAAA9rI,KAAAq0I,WAAAnM,EACAloI,KAAAy1I,sBAAA,IAAAniH,KAAAk7G,GAAAD,EAAAzB,EAAA,IACA9sI,KAAAiyI,iBAAA9gF,IAFA+2E,EAIAv4H,EAAA3P,KAAA64I,gBAAA1nF,GAAA,EAAAq9E,GAAAD,GACA,6FACArG,EAAA,mDAAAsB,EAAA,cAAAtB,EAAA,cACA2D,EAAA,2EAAA3D,EAAA,mDAAAsB,EAAA,cAAAtB,EAAA,cAEAF,EAAAhoI,KAAA+uI,KAAA59E,EAAA,YACA62E,EAAA8D,EAAA9rI,KAAAq0I,WAAArM,EACAhoI,KAAAy1I,sBAAA,IAAAniH,KAAAk7G,GAAAD,EAAAzB,EAAA,IACA9sI,KAAAiyI,iBAAA9gF,IAFA62E,EAIA7gG,EAAAnnC,KAAA64I,gBAAA1nF,EAAA,EAAAq9E,GAAAD,GACA,6FACAvG,EAAA,mDAAAwB,EAAA,cAAAxB,EAAA,cACA6D,EAAA,2EAAA7D,EAAA,mDAAAwB,EAAA,cAAAxB,EAAA,cAEAkD,EAAAlrI,KAAA+uI,KAAA59E,EAAA,eACAumF,EAAA13I,KAAA+uI,KAAA59E,EAAA,gBAAAA,EAAAwiF,WAAAiF,EAAAvB,EACAnM,EAAAY,EACA9rI,KAAAq0I,WAAAnJ,EAAAwM,EAAA13I,KAAAiyI,iBAAA9gF,IADA+5E,EAGAyM,EAAAxmF,EAAAu8E,OACA,GADA,+IACA1tI,KAAA+uI,KAAA59E,EAAA,yBAEAymF,EAAA,8DAAApO,EAAAmO,EAAA,KACA33I,KAAA84I,WAAA3nF,EAAAumF,GAAA,oJACAxM,EAAA,iBAAA1B,EAAA,GAAAmO,GAAA,YAEAvP,EAAAvhH,SAAA7mB,KAAA+uI,KAAA59E,EAAA,gBACAi3E,EAAAthH,MAAAshH,GAAA,EAAAA,EAEAiE,EAAArsI,KAAA+uI,KAAA59E,EAAA,YACAm4E,EAAAtpI,KAAA+uI,KAAA59E,EAAA,YACAo4E,EAAAvpI,KAAA+uI,KAAA59E,EAAA,eACAs4E,EAAAzpI,KAAA+uI,KAAA59E,EAAA,cACAg6E,EAAAnrI,KAAA+uI,KAAA59E,EAAA,mBACAs7E,EAAAzsI,KAAA+uI,KAAA59E,EAAA,iBACAg7E,EAAAnsI,KAAA+uI,KAAA59E,EAAA,mBACAi7E,EAAApsI,KAAA+uI,KAAA59E,EAAA,qBACA02E,EAAA7nI,KAAA4vI,gBAAAz+E,GACAr3B,EAAA,GAEAg2F,EAAA,EAAgBA,EAAA4iB,EAAA,GAAsB5iB,IAAA,CAGtC,IAFA5jG,EAAA,GACAlsB,KAAA6tI,QAAA,EACAhgB,EAAA,EAAiBA,EAAA6kB,EAAA,GAAsB7kB,IAAA,CAIvC,GAHAiqB,EAAA93I,KAAAy1I,sBAAA,IAAAniH,KAAAk7G,GAAAD,EAAAp9E,EAAAi9E,cACA2J,EAAA,iBACAC,EAAA,GACAW,EAAA,CAEA,GADAX,GAAA,kCACAtF,EAAA,KACA,OAAA7kB,GACA,OAAAmqB,GAAA,6BACAD,EAAA,eAAAvO,EAAA,gBAAmE,MACnE,KAAAkJ,EAAA,KAAAsF,GAAA,4BACAD,EAAA,eAAAvO,EAAA,gBAAmE,MACnE,QAAAwO,GAAA,8BAA0DD,EAAA,GAG1DC,GAAA,KAUA,IARAA,GAAA,uEAAAD,EAAA,MACA,WAAAxsI,KAAAwsI,IAAA,IAAAjoB,EAAA0Z,EAAAriG,EAAAx3B,EAAA,KACA,YAAApE,KAAAwsI,IAAA,IAAAjoB,EAAA0Z,EAAA75H,EAAAw3B,EAAA,IACAnnC,KAAA+4I,yBAAA5nF,EAAAo9E,EAAAC,GAAAzG,EAAAD,EACAhY,EAAA,GAAAjC,EAAA,EAAA4b,EAAA0B,GACA,0DAEAr0G,EAAAu1G,EAAA,sCAAArsI,KAAA+uI,KAAA59E,EAAA,yBACA0mF,EAAA,EAAkBA,EAAA,EAASA,IAC3BtD,GAAAsD,EAAAzP,GAAA,EACAtxG,GAAA,oBAAA+gH,EAAAzP,EAAA,+DACAkB,EAAAiL,GAAA,KAAAhL,EAAAgL,GAAA,eAYA,IAVAyD,GAAAlhH,EAAA,uBACAmhH,EAAAj4I,KAAAw1I,gBAAAhH,GAAAD,GACAC,KAAAr9E,EAAAm9E,cAAAC,IAAAp9E,EAAAk9E,gBACAl9E,EAAAi9E,YAAA5gI,KAAAsF,IAAAq+C,EAAAi9E,YAAA6J,IAEAC,GAAAl4I,KAAAg5I,oBAAAxK,GAAAD,GAAAnG,EAAA,KACA+P,EAAA3qI,KAAA8gB,MAAA4pH,EAAAD,GAAA,GACAG,EAAAO,GAAA34I,KAAA6tI,QAAAsK,EAAAn4I,KAAA6tI,QAAAsK,EACAn4I,KAAA6tI,QAAAuK,EACAC,EAAAr4I,KAAAy1I,sBAAA,IAAAniH,KAAAk7G,GAAAD,EAAA,EAAA2J,IACAI,EAAA,EAAmBA,EAAAF,EAAgBE,IAAA,CAInC,IAHAN,GAAA,OACAphH,EAAAy1G,EAAA,sCACArsI,KAAA+uI,KAAA59E,EAAA,gBAAAnxD,CAAAq4I,GAAA,QADA,GAEAR,EAAA,EAAmBA,EAAA,EAASA,IAC5BU,EAAA9L,EACAA,EAAAjsI,MAAA2wD,EAAA1kC,MAAA0kC,EAAA1kC,MAAA,SAAA4rH,MAAA,MAEAI,GADAD,EAAAH,EAAAvE,aAAAvF,KACAnC,IAAAmM,EAAA,IACAxQ,GAAAsQ,EAAAtQ,GAAAD,GAAAuQ,EAAAvQ,EACAlxG,GAAA,gBACAihH,EAAAzP,EAAA,uCACAoQ,EAAA,kCACAH,EAAA9kH,YAAAukH,EAAAvkH,WAAAg7G,IAAAp9E,EAAAk9E,eAAAl9E,EAAAg5E,WACAtC,EAAAt0G,YAAA8kH,EAAA9kH,WAAAs0G,EAAAt0G,YAAAukH,EAAAvkH,UAGA,IAAAvzB,KAAA+qI,cAAA,KACA0N,EAAA,IAAAz4I,KAAA6qI,mBAAA,0BACA2N,IAAArM,EAAA,OAAAoM,EAAA,IACAF,EAAA9kH,YAAAqlH,EAAArlH,UAAA,IAAAvzB,KAAA8qI,cAAA,KACAuN,EAAA9kH,YAAA8jH,EAAA9jH,UAAA,iCACAilH,IAAArM,IAAAoM,EAAA,GAAqH,GAArH,WAAAA,EAAA,GAAAp0I,QAAA,cAAqH,MACrHs0I,EAAA,+DAAAJ,EAAAvE,WAAA,gBAAAuE,EAAAtE,cAAA,UACAyE,IAAArM,EAAA,SACAsM,EAAA,kCAAAJ,EAAA/Q,UAAA,wCACA+Q,EAAA9kH,YAAA8jH,EAAA9jH,UAAA,2BACA8kH,EAAA9kH,YAAAqlH,EAAArlH,UAAA,wBACAilH,EAAA,6BACA,cAAAH,EAAA/Q,UAAA,gBACA+Q,EAAAhR,QAAAgR,EAAA/Q,UAAA,GACA+Q,EAAAr4I,KAAAy1I,sBAAA4C,GAEAL,GAAAphH,EAAA,UAEA23G,EACA,KACAA,EAAA,EACAC,MAIAtiH,GAFA8rH,GAAA,oBAAAW,EAAA,UACAjG,EAAA,MAAA7kB,IAAA6kB,EAAA,2DAGA54G,GAAA5N,EAIA,OAFA4N,GAAA89G,EACAzmF,EAAAg5E,WAAA,EACArwG,GAIAi/G,yBAAA,SAAA5nF,EAAAo9E,EAAAC,EAAAzG,EAAAD,EACAv/D,EAAAkhE,EAAA0B,GAEA,IAAA8N,EAAAC,EAAAhF,EAAAiF,EAAAC,EAAAC,EAAAlF,EAAAmF,EACAtN,EAAAhsI,KAAA+uI,KAAA59E,EAAA,eACA86E,EAAAjsI,KAAA+uI,KAAA59E,EAAA,cACAu4E,EAAA1pI,KAAA+uI,KAAA59E,EAAA,sBACAr3B,EAAA,oCACAy/G,EAAA,GAGA,GAAAhxE,IAAAyjE,EACAuN,GAAA,qCAAA9P,EAAA8E,GAAA,cACG,CAIH,IAHA0K,EAAAlR,KAAAgM,gBAAAvF,EACA0K,EAAApR,KAAAiM,gBAAAvF,EACA+K,GAAA,sFACArF,EAAA,EAAmBA,EAAA,GAAYA,MAC/B+E,GAAA/E,GAAAnM,EAAA+L,eAAAoF,GAAAhF,GAAApM,EAAAgM,cACAyF,GAAA,kBAAArF,EAAA,KACAA,IAAA3F,EAAA,2BACA,IAAApD,EAAA+I,GAAA,aAGAqF,GAAA,YAQA,GALA7P,IACA5vG,GAAAy/G,IAAAhxE,GAAAyjE,GAAAC,EAA8E,GAA9E,YAIA96E,EAAA0hF,UAEA,GADA1hF,EAAA0hF,UAAA,GACAtqE,IAAA0jE,EACAnyG,GAAA,oCAAA00G,EAAA,cACI,CAgBJ,IAbA2K,EAAAn5I,KAAA+uI,KAAA59E,EAAA,aAAA/sD,MAAA,KACAg1I,GAAA,IAAA9lH,MAAAygH,cAOAI,GANAkF,EAAA,SAAA/6I,GACA,IAAA61I,EAAA71I,EAAA4Z,MAAA,YAAAs2H,EAAA3nH,SAAAvoB,EAAAuG,UAAA,OACAvG,EAAA4Z,MAAA,WAAAkhI,EAAAvyH,SAAAvoB,EAAA,IACAuoB,SAAAvoB,EAAA,IACA,OAAAwoB,MAAAqtH,GAAAiF,EAAAjF,IAEAgF,EAAA,IACAG,EAAA9rI,KAAAC,IAAA0mI,EAAAkF,EAAAF,EAAA,SACAhF,EAAApM,EAAAv6H,KAAAC,IAAA0mI,EAAApM,EAAAgM,eAAAI,EACAmF,EAAAxR,EAAAt6H,KAAAsF,IAAAwmI,EAAAxR,EAAAiM,eAAAuF,EACAnoF,EAAA0hF,WAAA,oFACWsB,GAAAmF,EAAiBnF,IAC5BhjF,EAAA0hF,WAAA,kBAAAsB,EAAA,KACAA,IAAA3F,EAAA,2BACA,IAAA2F,EAAA,YAEAhjF,EAAA0hF,WAAA,YAEA/4G,GAAAq3B,EAAA0hF,UACA1hF,EAAA0hF,UAAA,KASA,OALA/4G,GAAA95B,KAAA+uI,KAAA59E,EAAA,cACAu4E,IACA5vG,KAAAyuC,GAAAyjE,GAAAC,EAAkE,GAAlE,UAAkEsN,GAElEz/G,GAAA,UAKA45G,gBAAA,SAAAviF,EAAA37B,EAAAi+G,GACA,IAAAU,EAAAhjF,EAAAm9E,cAAA,MAAAmF,EAAAj+G,EAAA,GACA0+G,EAAA/iF,EAAAk9E,eAAA,MAAAoF,EAAAj+G,EAAA,GACA++G,EAAA/mI,KAAAsF,IAAAq+C,EAAAi9E,YAAApuI,KAAAw1I,gBAAArB,EAAAD,KAAA,MAAAT,EAAAj+G,EAAA,GACA85G,EAAAtvI,KAAAw2I,gBAAArlF,EAAAnxD,KAAAy1I,sBAAA,IAAAniH,KAAA6gH,EAAAD,EAAAK,KAEApjF,EAAAi9E,YAAAkB,EAAAhI,UACAn2E,EAAAo9E,UAAAp9E,EAAAk9E,cAAAiB,EAAAwE,WACA3iF,EAAAq9E,SAAAr9E,EAAAm9E,aAAAgB,EAAAyE,cACA,MAAAN,GAAA,MAAAA,GACAzzI,KAAAg0I,cAAA7iF,IAKAqlF,gBAAA,SAAArlF,EAAAm+E,GACA,IAAAvH,EAAA/nI,KAAA8wI,eAAA3/E,EAAA,OACA22E,EAAA9nI,KAAA8wI,eAAA3/E,EAAA,OACAulF,EAAA3O,GAAAuH,EAAAvH,IAAAuH,EACA,OAAAxH,GAAA4O,EAAA5O,IAAA4O,GAIA1C,cAAA,SAAA7iF,GACA,IAAAuuD,EAAA1/G,KAAA+uI,KAAA59E,EAAA,qBACAuuD,GACAA,EAAAl/G,MAAA2wD,EAAA1kC,MAAA0kC,EAAA1kC,MAAA,SACA0kC,EAAAm9E,aAAAn9E,EAAAk9E,cAAA,EAAAl9E,KAKAwhF,mBAAA,SAAAxhF,GACA,IAAAuhF,EAAA1yI,KAAA+uI,KAAA59E,EAAA,kBACA,aAAAuhF,GAAA,sBAAAA,GAAA,EAAAA,MAIA5B,eAAA,SAAA3/E,EAAAqoF,GACA,OAAAx5I,KAAAy2I,eAAAtlF,EAAAnxD,KAAA+uI,KAAA59E,EAAAqoF,EAAA,eAIAhE,gBAAA,SAAArB,EAAAD,GACA,UAAAl0I,KAAAy1I,sBAAA,IAAAniH,KAAA6gH,EAAAD,EAAA,KAAA5M,WAIA0R,oBAAA,SAAA7E,EAAAD,GACA,WAAA5gH,KAAA6gH,EAAAD,EAAA,GAAA1E,UAIAqJ,gBAAA,SAAA1nF,EAAA37B,EAAAikH,EAAAC,GACA,IAAAhH,EAAA1yI,KAAA2yI,mBAAAxhF,GACAm+E,EAAAtvI,KAAAy1I,sBAAA,IAAAniH,KAAAmmH,EACAC,GAAAlkH,EAAA,EAAAA,EAAAk9G,EAAA,GAAAA,EAAA,QAKA,OAHAl9G,EAAA,GACA85G,EAAAjI,QAAArnI,KAAAw1I,gBAAAlG,EAAAyE,cAAAzE,EAAAwE,aAEA9zI,KAAA84I,WAAA3nF,EAAAm+E,IAIAwJ,WAAA,SAAA3nF,EAAAm+E,GACA,IAAAqK,EAAA9F,EACA9L,EAAA/nI,KAAA8wI,eAAA3/E,EAAA,OACA22E,EAAA9nI,KAAA8wI,eAAA3/E,EAAA,OACAyoF,EAAA,KACAC,EAAA,KACAV,EAAAn5I,KAAA+uI,KAAA59E,EAAA,aAcA,OAbAgoF,IACAQ,EAAAR,EAAA/0I,MAAA,KACAyvI,GAAA,IAAAvgH,MAAAygH,cACA6F,EAAA/yH,SAAA8yH,EAAA,OACAE,EAAAhzH,SAAA8yH,EAAA,OACAA,EAAA,GAAAzhI,MAAA,aACA0hI,GAAA/F,GAEA8F,EAAA,GAAAzhI,MAAA,aACA2hI,GAAAhG,MAIA9L,GAAAuH,EAAA/7G,WAAAw0G,EAAAx0G,cACAu0G,GAAAwH,EAAA/7G,WAAAu0G,EAAAv0G,cACAqmH,GAAAtK,EAAAyE,eAAA6F,MACAC,GAAAvK,EAAAyE,eAAA8F,IAIA5H,iBAAA,SAAA9gF,GACA,IAAAq7E,EAAAxsI,KAAA+uI,KAAA59E,EAAA,mBAGA,OAAUq7E,gBAFVA,EAAA,iBAAAA,KACA,IAAAl5G,MAAAygH,cAAA,IAAAltH,SAAA2lH,EAAA,IAEApB,cAAAprI,KAAA+uI,KAAA59E,EAAA,iBAAAm4E,SAAAtpI,KAAA+uI,KAAA59E,EAAA,YACAg6E,gBAAAnrI,KAAA+uI,KAAA59E,EAAA,mBAAAs4E,WAAAzpI,KAAA+uI,KAAA59E,EAAA,gBAIAs+E,YAAA,SAAAt+E,EAAAojF,EAAAL,EAAAC,GACAI,IACApjF,EAAAwiF,WAAAxiF,EAAAi9E,YACAj9E,EAAAyiF,aAAAziF,EAAAk9E,cACAl9E,EAAA0iF,YAAA1iF,EAAAm9E,cAEA,IAAAgB,EAAAiF,EAAA,iBAAAA,IACAv0I,KAAAy1I,sBAAA,IAAAniH,KAAA6gH,EAAAD,EAAAK,IACAv0I,KAAAy1I,sBAAA,IAAAniH,KAAA69B,EAAA0iF,YAAA1iF,EAAAyiF,aAAAziF,EAAAwiF,aACA,OAAA3zI,KAAAq0I,WAAAr0I,KAAA+uI,KAAA59E,EAAA,cAAAm+E,EAAAtvI,KAAAiyI,iBAAA9gF,OAmDA5xD,EAAAmG,GAAAwhI,WAAA,SAAAxjI,GAGA,IAAA1D,KAAAG,OACA,OAAAH,KAIAT,EAAA2nI,WAAA7V,cACA9xH,EAAAwH,UAAAyE,GAAA,YAAAjM,EAAA2nI,WAAAsM,qBACAj0I,EAAA2nI,WAAA7V,aAAA,GAIA,IAAA9xH,EAAA,IAAAA,EAAA2nI,WAAAqD,YAAApqI,QACAZ,EAAA,QAAA02C,OAAA12C,EAAA2nI,WAAAoG,OAGA,IAAAwM,EAAAz5I,MAAApB,UAAAoK,MAAA7L,KAAA0C,UAAA,GACA,uBAAAwD,GAAA,eAAAA,GAAA,YAAAA,GAAA,WAAAA,EAIA,WAAAA,GAAA,IAAAxD,UAAAC,QAAA,iBAAAD,UAAA,GACAX,EAAA2nI,WAAA,IAAAxjI,EAAA,cACAlD,MAAAjB,EAAA2nI,YAAAlnI,KAAA,IAAAS,OAAAq5I,IAEA95I,KAAA6J,KAAA,WACA,iBAAAnG,EACAnE,EAAA2nI,WAAA,IAAAxjI,EAAA,cACAlD,MAAAjB,EAAA2nI,YAAAlnI,MAAAS,OAAAq5I,IACAv6I,EAAA2nI,WAAA8G,kBAAAhuI,KAAA0D,KAXAnE,EAAA2nI,WAAA,IAAAxjI,EAAA,cACAlD,MAAAjB,EAAA2nI,YAAAlnI,KAAA,IAAAS,OAAAq5I,KAcAv6I,EAAA2nI,WAAA,IAAA+C,EACA1qI,EAAA2nI,WAAA7V,aAAA,EACA9xH,EAAA2nI,WAAA1jG,MAAA,IAAAlQ,MAAAC,UACAh0B,EAAA2nI,WAAAn+H,QAAA,SAEAxJ,EAAA2nI,aAziEYx+H,EAAAlI,MAAA7D,EAAAgM,GAAAD,KAAA9L,EAAAD,QAAAiM,oBC5BZ,IAAAF,EAAAC,EAAAC,EAkBED,GAAUxL,EAAA,GAAUA,EAAA,UAAsB0L,KAAAD,EAAA,mBAATF,EAMlC,SAAAnJ,GACD,OAAAA,EAAAuJ,GAAA3H,SACAE,UAAA,EACAE,MAAA,IACAM,OAAA,GACAC,KAAA,GACAC,IAAA,GACAC,MAAA,GACAC,OAAA,GACAC,KAAA,GACAE,KAAA,GACAQ,UAAA,GACAC,QAAA,GACAC,OAAA,IACAC,MAAA,GACAE,MAAA,GACAC,IAAA,EACAC,GAAA,MAvB4CuF,EAAAlI,MAAA7D,EAAAgM,GAAAD,KAAA9L,EAAAD,QAAAiM,wQChBnCjI,WAFTxD,EAAA,IACAA,EAAA,oFCDA,QAAAA,EAAA,IACAA,EAAA,KACAA,EAAA,IACAA,EAAA,IACAA,EAAA,KACAA,EAAA,KACA,IAAYoG,0JAAZpG,EAAA,QACAA,EAAA,SACAA,EAAA,SACAA,EAAA,UACAA,EAAA,UACAA,EAAA,UACAA,EAAA,SACAA,EAAA,UACAA,EAAA,MACA48I,EAAA58I,EAAA,QACAA,EAAA,SACAA,EAAA,QACAA,EAAA,MACAqhD,EAAArhD,EAAA,QACAA,EAAA,uDAQA,IAAI20D,EAAe3oD,UAASkO,KAAK9R,QA+B7BqJ,WAAY,SAAUlL,GAClB,IAAI4G,EAAWtK,KAyBf,GAtBAsK,EAAS5G,QAAUnE,UAAEgG,QAAO,EAAM+E,EAAS0vI,mBAAmBt2I,GAAUA,GAGxE4G,EAAS0B,GAAKhM,KAAK0D,QAAQsI,GAG3B1B,EAASuoD,OAAS1nD,UAClBb,EAAS0rC,WAAaA,UACtB1rC,EAAS2vI,SAAWA,UAGpBj6I,KAAKunH,QAAS,EAAArlG,EAAAvhB,SAAE+C,EAAQsE,IACnByb,SAASzjB,KAAKg2C,WAAW1O,eACzB7jB,SAASzjB,KAAKg2C,WAAWtO,aACzBjkB,SAAS,OAEdzjB,KAAKunH,OAAO2yB,QAAQ,mCAEpBl6I,KAAKm6I,QAAS,EAAAj4H,EAAAvhB,SAAE,YAChBX,KAAKo6I,WAAY,EAAAl4H,EAAAvhB,SAAE,UAAUwkB,SAASnlB,KAAKm6I,QAC3Cn6I,KAAKq6I,QAAS,EAAAn4H,EAAAvhB,SAAE,aAEXX,KAAKunH,OAAOpnH,OACb,MAAM,IAAI4D,MAAM,4DAA8D/D,KAAKunH,OAAO/hH,SAAW,sBAGzG,IAAKxF,KAAK0D,QAAQomH,QACd,MAAM,IAAI/lH,MAAM,0EAGpB,GAAI/D,KAAK0D,QAAQ42I,8BAAgCt6I,KAAK0D,QAAQ42I,sCAAsCv5I,UAChG,MAAM,IAAIgD,MAAM,2EAIpB/D,KAAKu6I,oBACLv6I,KAAK0D,QAAQomH,QAAQziH,QAAQ,SAAU0lH,GACnC,IAAIz8D,EAAS/wD,UAAEgL,WAAWwiH,EAAOz8D,QAAUy8D,EAAOz8D,SAAWy8D,EAAOz8D,YAC9C,IAAXA,IACP/sD,EAAOtC,KAAK,+CAAiD8rH,EAAO/gH,GAAK,0BACzEskD,EAASy8D,EAAO/gH,IAGpB1B,EAAS8vI,UAAUnkG,OAAO,OAASqa,EAAS,WAIhDhmD,EAAS8vI,UAAUnkG,OAAO,sBAG1Bj2C,KAAKw6I,QAAUx6I,KAAKy6I,oBAGpBz6I,KAAK06I,UAAY16I,KAAK0D,QAAQi3I,MAAM7qB,IAEpC9vH,KAAK46I,YAEL56I,KAAKunH,OAAOpgG,QAAQ,QAAQ0zH,OAAO,SAAU30I,GACrCoE,EAASwwI,YAETxwI,EAASwwI,WAAWvtI,QAAQjD,EAASuoD,OAAO9pB,MAEhD7iC,EAAEoiB,mBAGFtoB,KAAK0D,QAAQq3I,eAEb/6I,KAAKo6I,UAAU/sE,QAAQ,UAGvBrtE,KAAKq6I,OAAO1mI,UACRqnI,OAAQ,IAAMh7I,KAAKg2C,WAAW9N,YAC9B+yG,OAAQ,SAAU/0I,EAAGg1I,GACjB,IAAID,GAAS,EAAA/4H,EAAAvhB,SAAE,UAAUgG,KAAK,QAASu0I,EAAIv0I,KAAK,UAAU8c,SAASnZ,EAAS0rC,WAAWpO,UAiBvF,OAhBAszG,EAAIrkG,WAAWhtC,KAAK,WAChB,IAAIsxI,GAAM,EAAAj5H,EAAAvhB,SAAEX,MAIRo7I,EAAav0H,SAAS,EAAIs0H,EAAI5yI,IAAI,qBAAsB,IACxD8yI,EAAcx0H,SAAS,EAAIs0H,EAAI5yI,IAAI,sBAAuB,IAC1Dwb,EAAQo3H,EAAI,GAAGn6E,YAAco6E,EAAaC,EAE9CJ,EAAOhlG,QAAO,EAAA/zB,EAAAvhB,SAAE,UAAUm5B,KAAKqhH,EAAIrhH,QAAQnzB,KAAK,QAASw0I,EAAIx0I,KAAK,UAAUod,MAAMA,MAGtFk3H,GAAS,EAAA/4H,EAAAvhB,SAAE,4CAA4Cs1C,OAAOglG,GAC9DA,EAAO1yI,KAAKwjB,KAAMmvH,EAAI1lH,SAASzJ,OAC/BkvH,EAAO91H,SAASpe,SAASqW,MAElB69H,GAEX1+H,MAAO,SAAUvH,EAAOlM,GACpB,IAAIwyI,EAAexyI,EAAGmyI,OAAO,GAAGh6E,aAC5BhhC,EAAQn3B,EAAGmmB,YAAYzZ,KAAK,MAGhC1M,EAAG8a,KACEH,SAASnZ,EAAS0rC,WAAWpO,UAC7BiP,WAAWhtC,KAAK,SAAUxM,IACvB,EAAA6kB,EAAAvhB,SAAEX,MAAM+jB,MAAMkc,EAAMvO,GAAGr0B,GAAG0mB,WAIlC,IAAI8S,EAAK,gBAAkBvsB,EAASixI,iBAAmB,gBAEvDzyI,EAAGmmB,YAAY6K,KAAKjD,GAAItuB,KACpB+X,OAAQg7H,EACRlpE,WAAY,YAIhB9nE,EAASkxI,kBAAkB1yI,EAAG8a,KAAK,IAAIrW,QAAQjD,EAASuoD,OAAO7pB,QAEnE/qB,KAAM,SAAUjJ,EAAOlM,IACf,EAAAoZ,EAAAvhB,SAAEmI,EAAG8a,KAAK,IAAIsB,GAAG,cACjBpc,EAAG8a,KACEu7B,YAAY70C,EAAS0rC,WAAWpO,UAChCiP,WAAWlwC,KAAK,QAAS,IAE9BmC,EAAGmmB,YAAYkwB,YAAY70C,EAAS0rC,WAAWzO,KAG/Cj9B,EAASkxI,kBAAkB1yI,EAAG8a,KAAK,IAAIrW,QAAQjD,EAASuoD,OAAO5pB,YAGvExvB,OAAQ,SAAUzE,EAAOlM,GACrB,IAAIkB,GACA8lH,IAAKxlH,EAASkxI,kBAAkB1yI,EAAG8a,KAAK,IACxCA,KAAM9a,EAAG8a,KACT63H,SAAU3yI,EAAG8a,KAAKujB,OAClBu0G,SAAU5yI,EAAG8a,KAAKjU,QAGtBrF,EAASqxI,KAAK3xI,IAElB81D,KAAM,IACNtwC,MAAO,EACPosH,YAAa,WACblL,OAAQ,OACRz+B,QAAQ,EACRhtF,OAAQ,MAIZjlB,KAAKq6I,OAAO7uI,GAAG,wBAAyB,SAAUwJ,GAC9C,QAAQ,EAAAkN,EAAAvhB,SAAEqU,EAAMwT,QAAQtD,GAAG,IAAM5a,EAAS0rC,WAAW9N,iBAI5B,IAA7BloC,KAAK0D,QAAQm4I,cAGb77I,KAAK87I,WAAa,IAAI97I,KAAK0D,QAAQi3I,MAAMoB,SACrCjyB,QAAS9pH,KAAK0D,QAAQomH,QACtBkyB,aAAa,EACbpxI,MAAO5K,KAAK0D,QAAQkH,MAAMrF,QACtB6L,IAAK,WACD,OAAO9G,EAAS5G,QAAQu4I,UAAUhzI,QAG1CizI,gBAAiBl8I,KAAK0D,QAAQw4I,gBAC9BC,gBAAiBn8I,KAAK0D,QAAQy4I,gBAC9BpB,aAAc/6I,KAAK0D,QAAQq3I,aAC3BqB,mBAAoBp8I,KAAK0D,QAAQ04I,qBAErCp8I,KAAK87I,WAAWtwI,GAAGxL,KAAK6yD,OAAOlqB,QAAS,SAAUj3B,QACD,IAAjCpH,EAAS5G,QAAQ24I,aAAmE,WAApC/xI,EAAS5G,QAAQ44I,gBACpC,WAAjChyI,EAAS5G,QAAQ24I,YACrB/xI,EAASiyI,OAAO7qI,GAEhBpH,EAASiyI,OAAO7qI,EAAQ,KAGhC1R,KAAK87I,WAAWtwI,GAAGxL,KAAK6yD,OAAOxpB,iBAAkB,WAC7CrpC,KAAKuN,QAAQjD,EAASuoD,OAAOhqB,SAEjC7oC,KAAK87I,WAAWnkI,QACZ6kI,UACA9qI,YAIJ1R,KAAKy8I,SAAU,EAAAv6H,EAAAvhB,SAAE,iBAAmBX,KAAKg2C,WAAW/N,OAAS,QACxDgO,OAAOj2C,KAAK87I,WAAW9zI,IAG5BhI,KAAK08I,uBAAuB18I,KAAK87I,YAGjC97I,KAAK87I,WAAWvuI,QAAQvN,KAAK6yD,OAAOhqB,QAIxC7oC,KAAKw6I,QAAQhvI,GAAG,SAAU,SAAUZ,GAChCN,EAASqyI,UAAUt1I,QAAQ,SAAUyoH,GAC7BA,EAAIllH,QAAUA,IACVklH,EAAIxhD,YAAchkE,EAASwxI,YAC3BxxI,EAASwxI,WAAWvuI,QAAQjD,EAASuoD,OAAOhqB,OAEhDv+B,EAASsyI,UAAU9sB,QAK/B9vH,KAAK68I,yBAGTA,sBAAuB,WACnB,IAAIvyI,EAAWtK,KACXT,UAAEgL,WAAWvK,KAAK0D,QAAQu4I,UAAUpuI,KACpC7N,KAAK0D,QAAQu4I,UAAUpuI,IAAI,SAAUivI,GACjCxyI,EAASokG,SAASouC,KAGtBv9I,UAAErB,IAAI8B,KAAK0D,QAAQu4I,UAAUpuI,IAAK,SAAUivI,GACxCxyI,EAASokG,SAASouC,MAK9BnB,KAAM,SAAU3xI,GAEZ,IAAIM,EAAWtK,KAEX+8I,EAAgB,SAAUC,GAC1B,OAAKA,EAAa78I,QAOVuwB,MAFapmB,EAASkxI,kBAAkBwB,GAAcpyI,MAEpCwG,QALlB8d,SAAU,UAUtB,GAAIllB,EAAQ8lH,IAAK,CAEb,IAAIh3G,EAAOxO,EAAS5G,QAAQu5I,aAAeF,EAAc/yI,EAAQyxI,UAAYsB,EAAc/yI,EAAQ0xI,UAEnGn8I,UAAEia,MACEpI,IAAKpH,EAAQ8lH,IAAIllH,MAAMwG,MAAQ,QAC/BuH,KAAM,OACNE,SAAU,OACVE,YAAa,mBACbD,KAAME,KAAKC,UAAUH,GACrBiuB,SAAU,WAEN/8B,EAAQ8lH,IAAIotB,eAEhB1sI,QAAS,SAAUS,IACf,EAAA8oI,EAAA7oF,mBAAkB5mD,EAASuoD,OAAOtqB,gBAAiBj+B,GAAW2G,KAElE/P,MAAO,SAAU+P,GACb,IAAIksI,EAAe59I,UAAE69I,UAAUnsI,EAAIosI,cAAgBpsI,EAAI6H,OACvD,EAAAihI,EAAA7oF,mBAAkB5mD,EAASuoD,OAAOnqB,aAAcp+B,GAAW6yI,EAAclsI,EAAKjR,UAKtFgK,EAAQ8lH,IAAIwtB,gBAIpB7C,kBAAmB,WACf,IAAInwI,EAAWtK,KA2Bf,OAAO,IAxBmBA,KAAK0D,QAAQsO,WAAWzM,QAG9CmO,KAAM,SAAUhQ,GAEZ,GADAA,IAAYA,OACP1D,KAAKkS,WACN,MAAM,IAAInO,MAAM,0CAQpB,OANA/D,KAAKu9I,UAAYjzI,EAASqyI,UAC1B38I,KAAKiS,OAASjS,KAAK4U,OAAO5U,KAAKkS,WAAYlS,MAC3CA,KAAKu9I,eAAY10I,EACZnF,EAAQ2L,QACTrP,KAAKuN,QAAQ,UAAWvN,KAAM0D,GAE3B1D,MAEXuS,OAAQ,WACJvS,KAAKu9I,UAAYjzI,EAASqyI,UADH,QAAA18I,EAAAC,UAAAC,OAANgK,EAAM9J,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAN6J,EAAM7J,GAAAJ,UAAAI,GAIvB,OAFA6I,UAAS6I,WAAW/S,UAAUsT,OAAO/R,MAAMR,KAAMmK,GACjDnK,KAAKu9I,eAAY10I,EACV7I,QAIR,KACHkS,WAAY,SAAU49G,GAElB,IAAI57G,EASJ,OAPwBlU,WAA2B6I,IAAnB7I,KAAKu9I,UAA2Bv9I,KAAKu9I,UAAYjzI,EAASqyI,WACzE1oI,KAAK,SAAU2P,EAAMvmB,GAClC,GAAIumB,EAAKhZ,MAAMoB,KAAO8jH,EAAI9jH,GAEtB,OADAkI,EAAQ7W,GACD,IAGR6W,MAUnBw6F,SAAU,SAAUouC,GACZ98I,KAAK0D,QAAQu5I,cACbH,EAAQt1H,UAGZxnB,KAAKw9I,oBACDV,GAAWA,EAAQ38I,QAEnBH,KAAKw6I,QAAQpoI,UAAW/C,QAAQ,IAEhCrP,KAAKy9I,WAAWX,GAEZ98I,KAAKgQ,WACLhQ,KAAK09I,oBAGT19I,KAAK09I,mBAIT19I,KAAKunH,OACAtxE,OAAOj2C,KAAKm6I,QAEmB,WAAhCn6I,KAAK0D,QAAQ44I,eACbt8I,KAAKunH,OAAOtxE,OAAOj2C,KAAKq6I,QACnBpkG,OAAOj2C,KAAKy8I,SAEjBz8I,KAAKunH,OACAtxE,OAAOj2C,KAAKy8I,SACZxmG,OAAOj2C,KAAKq6I,QAGrBr6I,KAAKunH,OAAOh6G,QAAQvN,KAAK6yD,OAAOrpB,aAAcxpC,QAE9C,EAAA+5I,EAAA7oF,mBAAkBlxD,KAAK6yD,OAAOrpB,YAAaxpC,MAAOA,OAE9CA,KAAK0D,QAAQi6I,WACb39I,KAAKunH,OAAO/xG,KAAK,qBAAqB8mB,SAS9Ci+G,kBAAmB,WAUf,OATKv6I,KAAK49I,WACN59I,KAAK49I,UAAY,EAAA17H,EAAAvhB,SAAE,6EAC6Bu1C,UAAUl2C,KAAK0D,QAAQm6I,WAAa,kBAGnF79I,KAAK49I,SAAS14H,GAAG,aAClBllB,KAAK49I,SAAShzF,YAAY5qD,KAAKunH,QAG5BvnH,MAOXw9I,kBAAmB,WAIf,OAHIx9I,KAAK49I,UACL59I,KAAK49I,SAASrrI,SAEXvS,MAWXu8I,OAAQ,SAAU7qI,EAAQwC,GACtB,IAAIkvG,EACAx4G,EAEJ,IAAK8G,EAAO1F,GACR,MAAM,IAAIjI,MAAM,uIAEEiV,KAAKC,UAAUvH,IAarC,OAVA9G,EAAQ,IAAI5K,KAAK0D,QAAQkH,MAAM8G,GAG/B0xG,EAAOpjH,KAAK89I,WAAWlzI,EAAOsJ,GAE9BlU,KAAKw6I,QAAQloI,IAAI1H,GACjB5K,KAAK+9I,sBAGL,EAAAhE,EAAA7oF,mBAAkBlxD,KAAK6yD,OAAOrqB,UAAWxoC,MAAOojH,EAAMpjH,OAC/CA,MAQX48I,UAAW,SAAU9sB,GACjB9vH,KAAKw6I,QAAQjoI,OAAOu9G,EAAIllH,OACxBklH,EAAIv9G,SAEAvS,KAAKgQ,WACLhQ,KAAK09I,oBAIT,EAAA3D,EAAA7oF,mBAAkBlxD,KAAK6yD,OAAOpqB,YAAazoC,MAAO8vH,EAAK9vH,QAQ3DgQ,QAAS,WACL,OAA+B,IAAxBhQ,KAAKw6I,QAAQr6I,QAQxB69I,UAAW,WACP,OAAOh+I,KAAKw6I,SAQhByD,SAAU,WACN,OAAOj+I,KAAKunH,QAQhB22B,aAAc,WACV,OAAOl+I,KAAKq6I,QAQhB8D,aAAc,WACV,OAAOn+I,KAAK87I,YAUhBP,eAAgB,WACZ,IAAI6C,EAAmB,EAIvB,OAHIp+I,KAAK+6I,gBACHqD,EAECp+I,KAAK0D,QAAQomH,QAAQ3pH,OAASi+I,GAUzC5C,kBAAmB,SAAUzkH,GACzB,OAAO,EAAA7U,EAAAvhB,SAAEo2B,GAAIje,KAAK9Y,KAAKi6I,SAASpkG,WAQpC6nG,iBAAkB,WAcd,OAZI19I,KAAKq+I,YACLr+I,KAAKq+I,WAAW9rI,SAGpBvS,KAAKq+I,YAAa,EAAAn8H,EAAAvhB,SAAE,QACf8iB,SAASzjB,KAAKg2C,WAAW3O,YACzB4O,QAAO,EAAA/zB,EAAAvhB,SAAE,QACLgG,KAAK,UAAW3G,KAAKu7I,kBACrBlmH,KAAKr1B,KAAK0D,QAAQ46I,eAEtBn5H,SAASnlB,KAAKq6I,QAEZr6I,MAQX+9I,mBAAoB,WAIhB,OAHI/9I,KAAKq+I,YAAcr+I,KAAKw6I,QAAQr6I,OAAS,GACzCH,KAAKq+I,WAAW9rI,SAEbvS,MAQX28I,QAAS,WACL,IAAIryI,EAAWtK,KACX26I,KAWJ,OATA36I,KAAKq6I,OAAO7kI,KAAK,IAAMxV,KAAKg2C,WAAWxO,WAAW39B,KAAK,WACnD,IACIu5G,GADO,EAAAlhG,EAAAvhB,SAAEX,MACG8Y,KAAKxO,EAAS2vI,SAASpkG,UAEnCutE,GACAu3B,EAAMp2I,KAAK6+G,KAIZu3B,GAWXmD,WAAY,SAAUlzI,EAAOsJ,GACzB,IAEIs2G,EACApH,EAHA94G,EAAWtK,KACXu+I,EAAQv+I,KAAKq6I,OAAO7kI,KAAK,IAAMxV,KAAKg2C,WAAWxO,WA8DnD,OA1DA47E,EAAO,IAAIpjH,KAAK06I,WACZ9vI,MAAOA,EACPk/G,QAAS9pH,KAAK0D,QAAQomH,QACtB00B,UAAWx+I,KAAK0D,QAAQ86I,UACxBC,YAAaz+I,KAAK0D,QAAQ+6I,YAC1B1D,aAAc/6I,KAAK0D,QAAQq3I,aAC3BT,2BAA4Bt6I,KAAK0D,QAAQ42I,6BAG7Ct6I,KAAK+9I,qBAEL36B,EAAK53G,GAAGxL,KAAK6yD,OAAOnpB,SAAU,SAAU0iB,IACpC,EAAA2tF,EAAA7oF,mBAAkBlxD,KAAK6yD,OAAO7qB,aAAehoC,KAAMsK,IACnDA,EAASo0I,KAAK1+I,KAAMosD,KAGxBo+D,EAAOpH,EAAKzrG,SAASD,KAEN,IAAXxD,IAEqB,iBAAVA,GAAuC,IAAjBqqI,EAAMp+I,OACnCqqH,EAAKltG,aAAaihI,EAAMrqI,IAExBlU,KAAKq6I,OAAOpkG,OAAOu0E,IAI3BA,EAAK1xG,KAAK9Y,KAAKi6I,SAASpkG,SAAUutE,GAIlCA,EAAK53G,GAAGxL,KAAK6yD,OAAO7pB,MAAO,WACvB1+B,EAASi9G,OAAOpoE,YAAY70C,EAAS0rC,WAAWtO,aAChDp9B,EAAS+vI,OAAO1mI,SAAS,WACzBrJ,EAASqyI,UAAUt1I,QAAQ,SAAUyoH,GAC5BxlH,EAASq0I,iBAAiB7uB,IAC3BA,EAAI73G,uBAOhBmrG,EAAK53G,GAAGxL,KAAK6yD,OAAO5pB,SAAU,WAC1B3+B,EAASi9G,OAAO9jG,SAASnZ,EAAS0rC,WAAWtO,aAC7Cp9B,EAAS+vI,OAAO1mI,SAAS,UACzBrJ,EAASqyI,UAAUt1I,QAAQ,SAAUyoH,GAC5BxlH,EAASq0I,iBAAiB7uB,IAC3BA,EAAI73G,qBAMhBjY,KAAK08I,uBAAuBt5B,GAE5BpjH,KAAKuN,QAAQvN,KAAK6yD,OAAOppB,gBAAiB25E,GAEnCA,GAUXu7B,iBAAkB,SAAU7uB,GAExB,IAAI8uB,GAAgB,EASpB,OAPA5+I,KAAK46I,SAAS3mI,KAAK,SAAU8nI,GACzB,GAAIA,EAAQ/zI,KAAO8nH,EAAI9nH,GAEnB,OADA42I,GAAgB,GACT,IAIRA,GASXlC,uBAAwB,SAAUt5B,GAC9B,IAAI94G,EAAWtK,KAgBf,OAdKojH,EAAKy7B,gBACNz7B,EAAKy7B,eAAgB,EAErBz7B,EAAK53G,GAAGxL,KAAK6yD,OAAOhqB,MAAO,WACnBv+B,EAASwwI,YAAcxwI,EAASwwI,aAAe13B,GAC/C94G,EAASwwI,WAAWvtI,QAAQjD,EAASuoD,OAAO/pB,MAEhDx+B,EAASwwI,WAAa13B,EAClBA,aAAgB07B,WAAOx0I,EAASwxI,YAChCxxI,EAASwxI,WAAW9+G,YAKzBh9B,MAUX++I,eAAgB,SAAUC,GACtB,IAAI9qI,EAAQ3U,UAAEmmC,QAAQs5G,EAAUh/I,KAAK46I,UAErC,OADA56I,KAAK46I,SAASloI,OAAOwB,EAAO,GACrBlU,MAQXi/I,qBAAsB,WAQlB,OANIj/I,KAAK46I,SAASz6I,OAAS,EACvBH,KAAK46I,SAAS56I,KAAK46I,SAASz6I,OAAS,GAAGoN,QAAQvN,KAAK6yD,OAAOhqB,OACrD7oC,KAAK87I,YACZ97I,KAAK87I,WAAWvuI,QAAQvN,KAAK6yD,OAAOhqB,OAGjC7oC,MASXk/I,mBAAoB,WAChB,OAAOl/I,KAAK46I,SAASz6I,QAAU,GAMnCg/I,gBAAiB,WACbn/I,KAAK46I,SAASvzI,QAAQ,SAAU00I,GACvBA,EAAQqD,cACTrD,EAAQxuI,QAAQvN,KAAK6yD,OAAOzpB,mBAEjCppC,OAUP0+I,KAAM,SAAU5uB,EAAK1jE,GACjB,IAAI9hD,EAAWtK,KACX+7I,EAAU,IAAI/7I,KAAK0D,QAAQi3I,MAAMoB,SACjC/zI,GAAI8nH,EAAI9nH,GACR8hH,QAAS9pH,KAAK0D,QAAQomH,QACtBu1B,cAAc,EACdtE,aAAc/6I,KAAK0D,QAAQq3I,aAC3BqB,mBAAoBp8I,KAAK0D,QAAQ04I,mBACjCxxI,MAAOklH,EAAIllH,MACXsxI,gBAAiBl8I,KAAK0D,QAAQw4I,gBAC9BC,gBAAiBn8I,KAAK0D,QAAQy4I,kBAE9BzqI,EAASo+G,EAAIllH,MAAMmE,SAmDvB,OAjDA2C,EAAO+H,QAAS,EAChBsiI,EAAQpkI,QACJ6kI,UACA/iI,QAAQ,EACR/H,OAAQA,IAEPlG,GAAGlB,EAASuoD,OAAOjqB,QAAS,SAAUh+B,EAAO00I,GAC1Ch1I,EAASy0I,eAAgB/+I,MACzBA,KAAK0M,MACLojH,EAAIn4G,SAASM,iBACb63G,EAAIviH,QAAQjD,EAASuoD,OAAOjqB,UACP,IAAjB02G,GACAh1I,EAAS20I,yBAGhBzzI,GAAGlB,EAASuoD,OAAOxpB,iBAAkB,WAClCrpC,KAAKuN,QAAQjD,EAASuoD,OAAOhqB,SAEhCr9B,GAAGlB,EAASuoD,OAAOzpB,iBAAkB,WAClC9+B,EAASy0I,eAAe/+I,MACxB8vH,EAAIn4G,SAASM,iBACbjY,KAAK0M,QAERlB,GAAGlB,EAASuoD,OAAO9qB,OAAQ,WACxBz9B,EAASy0I,eAAe/+I,MACxBA,KAAK0M,MACLojH,EAAIn4G,SAASM,iBACb3N,EAAS20I,yBAEZzzI,GAAGlB,EAASuoD,OAAO/pB,KAAM,WACtBx+B,EAAS60I,kBACL70I,EAAS40I,sBACTl/I,KAAKuN,QAAQjD,EAASuoD,OAAO9pB,MAAM,KAK/C/oC,KAAK08I,uBAAuBX,GAG5BA,EAAQxuI,QAAQjD,EAASuoD,OAAOhqB,MAAOujB,GAGnC9hD,EAASwxI,YACTxxI,EAASwxI,WAAW/+G,UAGxB/8B,KAAK46I,SAASr2I,KAAKw3I,GAEZA,GAUX0B,WAAY,WAAqB,IAAAxyE,EAAAjrE,KAAX8oH,EAAW5oH,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,MACzBgS,EAAalS,KAAKw6I,QAAQtoI,WAC1BqtI,KAEJv/I,KAAKw6I,QAAQtoI,gBAAarJ,EAE1B,IAAIoJ,EAAS62G,EAAKz7G,IAAI,SAACyiH,GACnB,IAAIllH,EAAQ,IAAIqgE,EAAKvnE,QAAQkH,MAAMklH,GAEnC,OADAyvB,EAAIh7I,KAAK0mE,EAAK6yE,WAAWlzI,GAAQ,GAAG5C,IAC7B4C,IAQX,OALA5K,KAAKw6I,QAAQloI,IAAIL,GAAS5C,QAAQ,IAClCrP,KAAKw6I,QAAQtoI,WAAaA,EAC1BlS,KAAK+9I,qBACL/9I,KAAKq6I,OAAOpkG,OAAOspG,GAEZv/I,MAQXg6I,mBAAoB,SAAUt2I,GAC1B,OACIkH,MAAOlH,EAAQkH,OAAS40I,UACxBhB,WAAW,EACX7D,OACIoB,QAAS0D,UACT3vB,IAAKgvB,WAET9sI,WAAY7I,UAAS6I,WAAWzM,QAC5B6L,IAAK1N,EAAQu4I,UAAUhzI,KACvB2B,MAAOlH,EAAQkH,OAAS40I,YAE5BzE,cAAc,EACdqB,mBAAoB,SAAUx+I,GAC1B,MAAO,eAAiBA,EAAO,OAASA,GAE5CigJ,WAAYn6I,EAAQm6I,YAAch+I,UAAKE,QAAQ,yBAK3D+xD,EAAa4tF,WAAa1pG,UAC1B8b,EAAa6tF,iBAAmBA,UAChC7tF,EAAa8tF,eAAiBA,UAC9B9tF,EAAa+tF,eAAiBA,UAC9B/tF,EAAaguF,SAAW7F,UACxBnoF,EAAa2tF,QAAUA,UACvB3tF,EAAa0tF,WAAaA,UAC1B1tF,EAAa9mD,OAASG,UACtB2mD,EAAagtF,IAAMA,WAEnB,EAAAp+I,EAAAC,SAAU,eAAgBmxD,aAEXA,uCCr6Bf,IAAAppD,EAAAE,OAmBCC,KAAAD,EAAA,mBAjBDF,GACA,SACA,SACA,sBACA,cACA,SACA,OACA,YACA,WACA,eACA,WACA,wBACA,cACA,kBACA,aACA,cACA,cACCA,EAAAlL,KAAAb,EAAAQ,EAAAR,EAAAC,GAAA8L,KAAA9L,EAAAD,QAAAiM,oBCnBD,IAAAF,EAAAC,EAAAC,EAoBED,GACCxL,EAAA,GACAA,EAAA,IACAA,EAAA,IACAA,EAAA,KACAA,EAAA,KACAA,EAAA,KACAA,EAAA,IACAA,EAAA,IACAA,EAAA,UACS0L,KAAAD,EAAA,mBAATF,EAMF,SAAAnJ,GA2rCD,OAzrCAA,EAAAqgC,OAAA,eAAArgC,EAAAuJ,GAAAi3I,OACAh3I,QAAA,SACA05B,kBAAA,OACA/+B,SACAs8I,YAAA,EACA76H,SAAA,SACA26C,MAAA,EACAmgF,mBAAA,EACArE,aAAA,EACAlL,OAAA,OACAwP,UAAA,EACAC,MAAA,EACAnF,QAAA,EACAC,OAAA,WACAmF,WAAA,EACAz/G,SAAA,EACA0/G,kBAAA,EACAC,QAAA,EACAC,eAAA,IACAlzB,MAAA,UACApb,QAAA,EACAuuC,kBAAA,GACAC,YAAA,GACA5wG,MAAA,EACA6wG,SAAA,OACAC,cAAA,GACA38I,OAAA,EACAihB,QAAA,EAGA27H,KAAA,KACArkI,MAAA,KACA0B,KAAA,MAEAimB,QAAA,WAEA,aAAAlkC,KAAA0D,QAAAu3I,QACAj7I,KAAA6gJ,uBAEA7gJ,KAAA0D,QAAAs8I,YACAhgJ,KAAA2lC,UAAA,gBAEA3lC,KAAA8gJ,sBAEA9gJ,KAAA6zC,cAGAhP,WAAA,SAAAjmC,EAAAN,GACA0B,KAAAoiC,OAAAxjC,EAAAN,GACA,WAAAM,IACAoB,KAAA+gJ,yBACA/gJ,KAAA8gJ,wBAIAx8G,SAAA,YACAtkC,KAAAi7I,QAAAj7I,KAAA8X,SAAAoN,GAAA,0BACAllB,KAAAghJ,gBAAA,GAGAhhJ,KAAA+gJ,yBACA/gJ,KAAAg0C,kBAGAS,cAAA,SAAAz/B,GACA,IAAAlX,EAAAkC,KAAA0D,QAGA,QAAA1D,KAAAi7I,QAAAn9I,EAAAylC,UACAhkC,EAAAyV,EAAAwT,QAAArB,QAAA,wBAAAhnB,OAAA,IAKAH,KAAAg7I,OAAAh7I,KAAAihJ,WAAAjsI,IACAhV,KAAAg7I,SAIAh7I,KAAAkhJ,mBAAAlsI,GAEAhV,KAAAmhJ,cAAA,IAAArjJ,EAAAsiJ,UAAA,SAAAtiJ,EAAAsiJ,WAEA,MAIAe,aAAA,SAAA37I,GACAxF,KAAAohJ,aAAAphJ,KAAA+G,SAAAyO,KAAAhQ,GAAA6H,IAAA,WACA,IAAA0P,EAAAxd,EAAAS,MAEA,OAAAT,EAAA,SACAgJ,IAAA,uBACA4c,SAAApI,EAAA6B,UACA0vC,WAAAvxC,EAAAuxC,cACA8d,YAAArvD,EAAAqvD,eACA52C,OAAAzY,EAAAyY,UAAA,MAIA6rH,eAAA,WACArhJ,KAAAohJ,eACAphJ,KAAAohJ,aAAA7uI,gBACAvS,KAAAohJ,eAIAF,mBAAA,SAAAlsI,GACA,IAAAynB,EAAAl9B,EAAAuJ,GAAAw4I,kBAAAthJ,KAAA+G,SAAA,IACAxH,EAAAyV,EAAAwT,QAKArB,QAAAsV,GAAAt8B,QAKAZ,EAAAuJ,GAAAy4I,SAAA9kH,IAGAqY,YAAA,SAAA9/B,GAEA,IAAAlX,EAAAkC,KAAA0D,QA+CA,OA5CA1D,KAAAi7I,OAAAj7I,KAAAwhJ,cAAAxsI,GAEAhV,KAAA2lC,UAAA3lC,KAAAi7I,OAAA,yBAGAj7I,KAAAyhJ,0BAGAliJ,EAAAuJ,GAAA44I,YACAniJ,EAAAuJ,GAAA44I,UAAAhyI,QAAA1P,MASAA,KAAA2hJ,gBAGA3hJ,KAAA4hJ,YAAA5hJ,KAAAi7I,OAAA1yI,IAAA,YACAvI,KAAA0wD,aAAA1wD,KAAAi7I,OAAAvqF,cAAA,GACA1wD,KAAAw+D,aAAAx+D,KAAAi7I,OAAAz8E,eACAx+D,KAAA6hJ,iBAAA7hJ,KAAAi7I,OAAAr1F,UAAAlwC,OAAA,WACA,gBAAAnW,EAAAS,MAAAuI,IAAA,cACIpI,OAAA,EAGJH,KAAA8hJ,YAAA9hJ,KAAA8X,QAAA0d,SACAx1B,KAAA+hJ,gBAAA/sI,GAGAhV,KAAAgiJ,iBAAAhiJ,KAAAkvB,SAAAlvB,KAAAiiJ,kBAAAjtI,GAAA,GACAhV,KAAAkiJ,cAAAltI,EAAA0gC,MACA11C,KAAAmiJ,cAAAntI,EAAA2gC,MAGA73C,EAAAoiJ,UAAAlgJ,KAAAoiJ,wBAAAtkJ,EAAAoiJ,UAGAlgJ,KAAAqiJ,mBAGA,IAAAriJ,KAAA4hB,SAAA,QAAA5M,IACAhV,KAAAsiJ,UACA,IAIAtiJ,KAAAyhJ,0BAGAliJ,EAAAuJ,GAAA44I,YAAA5jJ,EAAAykJ,eACAhjJ,EAAAuJ,GAAA44I,UAAAc,eAAAxiJ,KAAAgV,GAKAhV,KAAAu1C,WAAAvgC,GAAA,GAIAzV,EAAAuJ,GAAA44I,WACAniJ,EAAAuJ,GAAA44I,UAAAe,UAAAziJ,KAAAgV,IAGA,IAGA+sI,gBAAA,SAAA/sI,GACAhV,KAAAw1B,QACA5U,IAAA5gB,KAAA8hJ,YAAAlhI,IAAA5gB,KAAA0iJ,QAAA9hI,IACAmL,KAAA/rB,KAAA8hJ,YAAA/1H,KAAA/rB,KAAA0iJ,QAAA32H,KACAkmF,QAAA,EACArzF,OAAA5e,KAAA2iJ,mBACAC,SAAA5iJ,KAAA6iJ,sBAGA7iJ,KAAAw1B,OAAAwG,OACAjQ,KAAA/W,EAAA0gC,MAAA11C,KAAAw1B,OAAAzJ,KACAnL,IAAA5L,EAAA2gC,MAAA31C,KAAAw1B,OAAA5U,MAIA20B,WAAA,SAAAvgC,EAAA8tI,GAYA,GATA9iJ,KAAA6hJ,mBACA7hJ,KAAAw1B,OAAA5W,OAAA5e,KAAA2iJ,oBAIA3iJ,KAAAkvB,SAAAlvB,KAAAiiJ,kBAAAjtI,GAAA,GACAhV,KAAA8hJ,YAAA9hJ,KAAA+iJ,mBAAA,aAGAD,EAAA,CACA,IAAAh6I,EAAA9I,KAAAgjJ,UACA,QAAAhjJ,KAAA4hB,SAAA,OAAA5M,EAAAlM,GAEA,OADA9I,KAAAq0C,SAAA,IAAA90C,EAAAujB,MAAA,UAAA9N,KACA,EAEAhV,KAAAkvB,SAAApmB,EAAAomB,SAUA,OAPAlvB,KAAAi7I,OAAA,GAAAh+H,MAAA8O,KAAA/rB,KAAAkvB,SAAAnD,KAAA,KACA/rB,KAAAi7I,OAAA,GAAAh+H,MAAA2D,IAAA5gB,KAAAkvB,SAAAtO,IAAA,KAEArhB,EAAAuJ,GAAA44I,WACAniJ,EAAAuJ,GAAA44I,UAAAd,KAAA5gJ,KAAAgV,IAGA,GAGAwgC,WAAA,SAAAxgC,GAGA,IAAAqvB,EAAArkC,KACAijJ,GAAA,EA+BA,OA9BA1jJ,EAAAuJ,GAAA44I,YAAA1hJ,KAAA0D,QAAA6+I,gBACAU,EAAA1jJ,EAAAuJ,GAAA44I,UAAAlrI,KAAAxW,KAAAgV,IAIAhV,KAAAijJ,UACAA,EAAAjjJ,KAAAijJ,QACAjjJ,KAAAijJ,SAAA,GAGA,YAAAjjJ,KAAA0D,QAAA48I,SAAA2C,GACA,UAAAjjJ,KAAA0D,QAAA48I,QAAA2C,IACA,IAAAjjJ,KAAA0D,QAAA48I,QAAA/gJ,EAAAgL,WAAAvK,KAAA0D,QAAA48I,SACAtgJ,KAAA0D,QAAA48I,OAAA9iJ,KAAAwC,KAAA8X,QAAAmrI,GAEA1jJ,EAAAS,KAAAi7I,QAAAnoE,QACA9yE,KAAAgiJ,iBACAn7H,SAAA7mB,KAAA0D,QAAA68I,eAAA,IACA,YACA,IAAAl8G,EAAAziB,SAAA,OAAA5M,IACAqvB,EAAAi+G,YAKA,IAAAtiJ,KAAA4hB,SAAA,OAAA5M,IACAhV,KAAAsiJ,UAIA,GAGAjuG,SAAA,SAAAr/B,GAiBA,OAhBAhV,KAAAqhJ,iBAIA9hJ,EAAAuJ,GAAA44I,WACAniJ,EAAAuJ,GAAA44I,UAAAwB,SAAAljJ,KAAAgV,GAIAhV,KAAAmjJ,cAAAj+H,GAAAlQ,EAAAwT,SAIAxoB,KAAA8X,QAAAvK,QAAA,SAGAhO,EAAAuJ,GAAAi3I,MAAA9gJ,UAAAo1C,SAAA72C,KAAAwC,KAAAgV,IAGAkb,OAAA,WAQA,OANAlwB,KAAAi7I,OAAA/1H,GAAA,0BACAllB,KAAAq0C,SAAA,IAAA90C,EAAAujB,MAAA,WAA2C0F,OAAAxoB,KAAA8X,QAAA,MAE3C9X,KAAAsiJ,SAGAtiJ,MAIAihJ,WAAA,SAAAjsI,GACA,OAAAhV,KAAA0D,QAAAs3I,UACAz7I,EAAAyV,EAAAwT,QAAArB,QAAAnnB,KAAA8X,QAAAtC,KAAAxV,KAAA0D,QAAAs3I,SAAA76I,QAIA2gJ,oBAAA,WACA9gJ,KAAAmjJ,cAAAnjJ,KAAA0D,QAAAs3I,OACAh7I,KAAA8X,QAAAtC,KAAAxV,KAAA0D,QAAAs3I,QAAAh7I,KAAA8X,QACA9X,KAAA2lC,UAAA3lC,KAAAmjJ,cAAA,wBAGApC,uBAAA,WACA/gJ,KAAAukC,aAAAvkC,KAAAmjJ,cAAA,wBAGA3B,cAAA,SAAAxsI,GAEA,IAAAlX,EAAAkC,KAAA0D,QACA0/I,EAAA7jJ,EAAAgL,WAAAzM,EAAAm9I,QACAA,EAAAmI,EACA7jJ,EAAAzB,EAAAm9I,OAAAz6I,MAAAR,KAAA8X,QAAA,IAAA9C,KACA,UAAAlX,EAAAm9I,OACAj7I,KAAA8X,QAAA9I,QAAAy1B,WAAA,MACAzkC,KAAA8X,QAoBA,OAlBAmjI,EAAAr1F,QAAA,QAAAzlD,QACA86I,EAAA91H,SAAA,WAAArnB,EAAAqnB,SACAnlB,KAAA8X,QAAA,GAAAyI,WACAziB,EAAAqnB,UAMAi+H,GAAAnI,EAAA,KAAAj7I,KAAA8X,QAAA,IACA9X,KAAA6gJ,uBAGA5F,EAAA,KAAAj7I,KAAA8X,QAAA,IACA,mBAAAvM,KAAA0vI,EAAA1yI,IAAA,cACA0yI,EAAA1yI,IAAA,uBAGA0yI,GAIA4F,qBAAA,WACA,aAAAt1I,KAAAvL,KAAA8X,QAAAvP,IAAA,eACAvI,KAAA8X,QAAA,GAAAmF,MAAAiS,SAAA,aAIAkzH,wBAAA,SAAAh8I,GACA,iBAAAA,IACAA,IAAAhC,MAAA,MAEA7E,EAAA0T,QAAA7M,KACAA,GAAU2lB,MAAA3lB,EAAA,GAAAwa,KAAAxa,EAAA,QAEV,SAAAA,IACApG,KAAAw1B,OAAAwG,MAAAjQ,KAAA3lB,EAAA2lB,KAAA/rB,KAAA0iJ,QAAA32H,MAEA,UAAA3lB,IACApG,KAAAw1B,OAAAwG,MAAAjQ,KAAA/rB,KAAAqjJ,kBAAAt/H,MAAA3d,EAAA4lB,MAAAhsB,KAAA0iJ,QAAA32H,MAEA,QAAA3lB,IACApG,KAAAw1B,OAAAwG,MAAApb,IAAAxa,EAAAwa,IAAA5gB,KAAA0iJ,QAAA9hI,KAEA,WAAAxa,IACApG,KAAAw1B,OAAAwG,MAAApb,IAAA5gB,KAAAqjJ,kBAAA/iI,OAAAla,EAAA+pC,OAAAnwC,KAAA0iJ,QAAA9hI,MAIA0iI,YAAA,SAAAxrI,GACA,qBAAAvM,KAAAuM,EAAAL,UAAAK,IAAA9X,KAAA+G,SAAA,IAGA47I,iBAAA,WAGA,IAAAY,EAAAvjJ,KAAAw+D,aAAAhpC,SACAzuB,EAAA/G,KAAA+G,SAAA,GAmBA,MAVA,aAAA/G,KAAA4hJ,aAAA5hJ,KAAA0wD,aAAA,KAAA3pD,GACAxH,EAAA0W,SAAAjW,KAAA0wD,aAAA,GAAA1wD,KAAAw+D,aAAA,MACA+kF,EAAAx3H,MAAA/rB,KAAA0wD,aAAAoQ,aACAyiF,EAAA3iI,KAAA5gB,KAAA0wD,aAAAmQ,aAGA7gE,KAAAsjJ,YAAAtjJ,KAAAw+D,aAAA,MACA+kF,GAAS3iI,IAAA,EAAAmL,KAAA,KAITnL,IAAA2iI,EAAA3iI,KAAAiG,SAAA7mB,KAAAw+D,aAAAj2D,IAAA,0BACAwjB,KAAAw3H,EAAAx3H,MAAAlF,SAAA7mB,KAAAw+D,aAAAj2D,IAAA,6BAKAs6I,mBAAA,WACA,gBAAA7iJ,KAAA4hJ,YACA,OAAWhhI,IAAA,EAAAmL,KAAA,GAGX,IAAA5sB,EAAAa,KAAA8X,QAAAoX,WACAs0H,EAAAxjJ,KAAAsjJ,YAAAtjJ,KAAA0wD,aAAA,IAEA,OACA9vC,IAAAzhB,EAAAyhB,KAAAiG,SAAA7mB,KAAAi7I,OAAA1yI,IAAA,gBACAi7I,EAAA,EAAAxjJ,KAAA0wD,aAAAmQ,aACA90C,KAAA5sB,EAAA4sB,MAAAlF,SAAA7mB,KAAAi7I,OAAA1yI,IAAA,iBACAi7I,EAAA,EAAAxjJ,KAAA0wD,aAAAoQ,gBAKA6gF,cAAA,WACA3hJ,KAAA0iJ,SACA32H,KAAAlF,SAAA7mB,KAAA8X,QAAAvP,IAAA,qBACAqY,IAAAiG,SAAA7mB,KAAA8X,QAAAvP,IAAA,oBACAyjB,MAAAnF,SAAA7mB,KAAA8X,QAAAvP,IAAA,sBACA4nC,OAAAtpB,SAAA7mB,KAAA8X,QAAAvP,IAAA,yBAIAk5I,wBAAA,WACAzhJ,KAAAqjJ,mBACAt/H,MAAA/jB,KAAAi7I,OAAA3sF,aACAhuC,OAAAtgB,KAAAi7I,OAAA7uE,gBAIAi2E,gBAAA,WAEA,IAAAoB,EAAA/lJ,EAAAirB,EACA7qB,EAAAkC,KAAA0D,QACAqD,EAAA/G,KAAA+G,SAAA,GAEA/G,KAAA0jJ,kBAAA,KAEA5lJ,EAAA89I,YAKA,WAAA99I,EAAA89I,YAaA,aAAA99I,EAAA89I,YAWA99I,EAAA89I,YAAApqI,cAAAnR,OAKA,WAAAvC,EAAA89I,cACA99I,EAAA89I,YAAA57I,KAAAi7I,OAAA,GAAA16H,aAIAoI,GADAjrB,EAAA6B,EAAAzB,EAAA89I,cACA,MAMA6H,EAAA,gBAAAl4I,KAAA7N,EAAA6K,IAAA,aAEAvI,KAAA47I,cACA/0H,SAAAnpB,EAAA6K,IAAA,4BACAse,SAAAnpB,EAAA6K,IAAA,wBACAse,SAAAnpB,EAAA6K,IAAA,2BACAse,SAAAnpB,EAAA6K,IAAA,uBACAk7I,EAAAj2I,KAAAC,IAAAkb,EAAAg7H,YAAAh7H,EAAAw4C,aAAAx4C,EAAAw4C,cACAt6C,SAAAnpB,EAAA6K,IAAA,6BACAse,SAAAnpB,EAAA6K,IAAA,wBACAvI,KAAAqjJ,kBAAAt/H,MACA/jB,KAAA0iJ,QAAA32H,KACA/rB,KAAA0iJ,QAAA12H,OACAy3H,EAAAj2I,KAAAC,IAAAkb,EAAA2kF,aAAA3kF,EAAA04C,cAAA14C,EAAA04C,eACAx6C,SAAAnpB,EAAA6K,IAAA,8BACAse,SAAAnpB,EAAA6K,IAAA,yBACAvI,KAAAqjJ,kBAAA/iI,OACAtgB,KAAA0iJ,QAAA9hI,IACA5gB,KAAA0iJ,QAAAvyG,QAEAnwC,KAAA0jJ,kBAAAhmJ,IAnCAsC,KAAA47I,YAAA99I,EAAA89I,YAXA57I,KAAA47I,aACA,EACA,EACAr8I,EAAAwH,GAAAgd,QAAA/jB,KAAAqjJ,kBAAAt/H,MAAA/jB,KAAA0iJ,QAAA32H,MACAxsB,EAAAwH,GAAAuZ,UAAAvZ,EAAAqW,KAAAmD,WAAA+sF,cACAttG,KAAAqjJ,kBAAA/iI,OAAAtgB,KAAA0iJ,QAAA9hI,KAlBA5gB,KAAA47I,aACAr8I,EAAAvC,QAAA8jE,aAAA9gE,KAAAw1B,OAAAotH,SAAA72H,KAAA/rB,KAAAw1B,OAAA5W,OAAAmN,KACAxsB,EAAAvC,QAAA6jE,YAAA7gE,KAAAw1B,OAAAotH,SAAAhiI,IAAA5gB,KAAAw1B,OAAA5W,OAAAgC,IACArhB,EAAAvC,QAAA8jE,aAAAvhE,EAAAvC,QAAA+mB,QACA/jB,KAAAqjJ,kBAAAt/H,MAAA/jB,KAAA0iJ,QAAA32H,KACAxsB,EAAAvC,QAAA6jE,aACAthE,EAAAvC,QAAAsjB,UAAAvZ,EAAAqW,KAAAmD,WAAA+sF,cACAttG,KAAAqjJ,kBAAA/iI,OAAAtgB,KAAA0iJ,QAAA9hI,KAZA5gB,KAAA47I,YAAA,MAmEAmH,mBAAA,SAAAplJ,EAAA60E,GAEAA,IACAA,EAAAxyE,KAAAkvB,UAGA,IAAA00H,EAAA,aAAAjmJ,EAAA,KACA6lJ,EAAAxjJ,KAAAsjJ,YAAAtjJ,KAAA0wD,aAAA,IAEA,OACA9vC,IAGA4xD,EAAA5xD,IAGA5gB,KAAAw1B,OAAAotH,SAAAhiI,IAAAgjI,EAGA5jJ,KAAAw1B,OAAA5W,OAAAgC,IAAAgjI,GACA,UAAA5jJ,KAAA4hJ,aACA5hJ,KAAAw1B,OAAAy8E,OAAArxF,IACA4iI,EAAA,EAAAxjJ,KAAAw1B,OAAAy8E,OAAArxF,KAAAgjI,EAEA73H,KAGAymD,EAAAzmD,KAGA/rB,KAAAw1B,OAAAotH,SAAA72H,KAAA63H,EAGA5jJ,KAAAw1B,OAAA5W,OAAAmN,KAAA63H,GACA,UAAA5jJ,KAAA4hJ,aACA5hJ,KAAAw1B,OAAAy8E,OAAAlmF,KACAy3H,EAAA,EAAAxjJ,KAAAw1B,OAAAy8E,OAAAlmF,MAAA63H,IAMA3B,kBAAA,SAAAjtI,EAAA6uI,GAEA,IAAAjI,EAAAkI,EAAAljI,EAAAmL,EACAjuB,EAAAkC,KAAA0D,QACA8/I,EAAAxjJ,KAAAsjJ,YAAAtjJ,KAAA0wD,aAAA,IACAhb,EAAA1gC,EAAA0gC,MACAC,EAAA3gC,EAAA2gC,MA2EA,OAxEA6tG,GAAAxjJ,KAAAw1B,OAAAy8E,SACAjyG,KAAAw1B,OAAAy8E,QACArxF,IAAA5gB,KAAA0wD,aAAAmQ,YACA90C,KAAA/rB,KAAA0wD,aAAAoQ,eAUA+iF,IACA7jJ,KAAA47I,cACA57I,KAAA0jJ,mBACAI,EAAA9jJ,KAAA0jJ,kBAAAluH,SACAomH,GACA57I,KAAA47I,YAAA,GAAAkI,EAAA/3H,KACA/rB,KAAA47I,YAAA,GAAAkI,EAAAljI,IACA5gB,KAAA47I,YAAA,GAAAkI,EAAA/3H,KACA/rB,KAAA47I,YAAA,GAAAkI,EAAAljI,MAGAg7H,EAAA57I,KAAA47I,YAGA5mI,EAAA0gC,MAAA11C,KAAAw1B,OAAAwG,MAAAjQ,KAAA6vH,EAAA,KACAlmG,EAAAkmG,EAAA,GAAA57I,KAAAw1B,OAAAwG,MAAAjQ,MAEA/W,EAAA2gC,MAAA31C,KAAAw1B,OAAAwG,MAAApb,IAAAg7H,EAAA,KACAjmG,EAAAimG,EAAA,GAAA57I,KAAAw1B,OAAAwG,MAAApb,KAEA5L,EAAA0gC,MAAA11C,KAAAw1B,OAAAwG,MAAAjQ,KAAA6vH,EAAA,KACAlmG,EAAAkmG,EAAA,GAAA57I,KAAAw1B,OAAAwG,MAAAjQ,MAEA/W,EAAA2gC,MAAA31C,KAAAw1B,OAAAwG,MAAApb,IAAAg7H,EAAA,KACAjmG,EAAAimG,EAAA,GAAA57I,KAAAw1B,OAAAwG,MAAApb,MAIA9iB,EAAAqiJ,OAIAv/H,EAAA9iB,EAAAqiJ,KAAA,GAAAngJ,KAAAmiJ,cAAA30I,KAAA47D,OAAAzzB,EACA31C,KAAAmiJ,eAAArkJ,EAAAqiJ,KAAA,IAAAriJ,EAAAqiJ,KAAA,GAAAngJ,KAAAmiJ,cACAxsG,EAAAimG,EAAAh7H,EAAA5gB,KAAAw1B,OAAAwG,MAAApb,KAAAg7H,EAAA,IACAh7H,EAAA5gB,KAAAw1B,OAAAwG,MAAApb,IAAAg7H,EAAA,GACAh7H,EACAA,EAAA5gB,KAAAw1B,OAAAwG,MAAApb,KAAAg7H,EAAA,GACAh7H,EAAA9iB,EAAAqiJ,KAAA,GAAAv/H,EAAA9iB,EAAAqiJ,KAAA,GAAAv/H,EAEAmL,EAAAjuB,EAAAqiJ,KAAA,GAAAngJ,KAAAkiJ,cACA10I,KAAA47D,OAAA1zB,EAAA11C,KAAAkiJ,eAAApkJ,EAAAqiJ,KAAA,IAAAriJ,EAAAqiJ,KAAA,GACAngJ,KAAAkiJ,cACAxsG,EAAAkmG,EAAA7vH,EAAA/rB,KAAAw1B,OAAAwG,MAAAjQ,MAAA6vH,EAAA,IACA7vH,EAAA/rB,KAAAw1B,OAAAwG,MAAAjQ,KAAA6vH,EAAA,GACA7vH,EACAA,EAAA/rB,KAAAw1B,OAAAwG,MAAAjQ,MAAA6vH,EAAA,GACA7vH,EAAAjuB,EAAAqiJ,KAAA,GAAAp0H,EAAAjuB,EAAAqiJ,KAAA,GAAAp0H,GAGA,MAAAjuB,EAAAgiE,OACApqB,EAAA11C,KAAAkiJ,eAGA,MAAApkJ,EAAAgiE,OACAnqB,EAAA31C,KAAAmiJ,iBAKAvhI,IAGA+0B,EAGA31C,KAAAw1B,OAAAwG,MAAApb,IAGA5gB,KAAAw1B,OAAAotH,SAAAhiI,IAGA5gB,KAAAw1B,OAAA5W,OAAAgC,KACA,UAAA5gB,KAAA4hJ,aACA5hJ,KAAAw1B,OAAAy8E,OAAArxF,IACA4iI,EAAA,EAAAxjJ,KAAAw1B,OAAAy8E,OAAArxF,KAEAmL,KAGA2pB,EAGA11C,KAAAw1B,OAAAwG,MAAAjQ,KAGA/rB,KAAAw1B,OAAAotH,SAAA72H,KAGA/rB,KAAAw1B,OAAA5W,OAAAmN,MACA,UAAA/rB,KAAA4hJ,aACA5hJ,KAAAw1B,OAAAy8E,OAAAlmF,KACAy3H,EAAA,EAAAxjJ,KAAAw1B,OAAAy8E,OAAAlmF,QAMAu2H,OAAA,WACAtiJ,KAAAukC,aAAAvkC,KAAAi7I,OAAA,yBACAj7I,KAAAi7I,OAAA,KAAAj7I,KAAA8X,QAAA,IAAA9X,KAAA+jJ,qBACA/jJ,KAAAi7I,OAAA1oI,SAEAvS,KAAAi7I,OAAA,KACAj7I,KAAA+jJ,qBAAA,EACA/jJ,KAAAghJ,gBACAhhJ,KAAAkR,WAMA0Q,SAAA,SAAAjJ,EAAA3D,EAAAlM,GASA,OARAA,KAAA9I,KAAAgjJ,UACAzjJ,EAAAuJ,GAAAk7I,OAAAxmJ,KAAAwC,KAAA2Y,GAAA3D,EAAAlM,EAAA9I,OAAA,GAGA,qBAAAuL,KAAAoN,KACA3Y,KAAA8hJ,YAAA9hJ,KAAA+iJ,mBAAA,YACAj6I,EAAA0sB,OAAAx1B,KAAA8hJ,aAEAviJ,EAAAyiC,OAAA/iC,UAAA2iB,SAAApkB,KAAAwC,KAAA2Y,EAAA3D,EAAAlM,IAGAm7I,WAEAjB,QAAA,WACA,OACA/H,OAAAj7I,KAAAi7I,OACA/rH,SAAAlvB,KAAAkvB,SACA8yH,iBAAAhiJ,KAAAgiJ,iBACAxsH,OAAAx1B,KAAA8hJ,gBAMAviJ,EAAAuJ,GAAAk7I,OAAA1xI,IAAA,iCACAiK,MAAA,SAAAvH,EAAAlM,EAAAo7I,GACA,IAAAC,EAAA5kJ,EAAAgG,UAA+BuD,GAC/B8a,KAAAsgI,EAAApsI,UAGAosI,EAAAE,aACA7kJ,EAAA2kJ,EAAAxgJ,QAAAu8I,mBAAAp2I,KAAA,WACA,IAAA8J,EAAApU,EAAAS,MAAA2T,SAAA,YAEAA,MAAAjQ,QAAA6/B,WACA2gH,EAAAE,UAAA7/I,KAAAoP,GAKAA,EAAA0sI,mBACA1sI,EAAAiO,SAAA,WAAA5M,EAAAmvI,OAIAlmI,KAAA,SAAAjJ,EAAAlM,EAAAo7I,GACA,IAAAC,EAAA5kJ,EAAAgG,UAA+BuD,GAC/B8a,KAAAsgI,EAAApsI,UAGAosI,EAAAH,qBAAA,EAEAxkJ,EAAAsK,KAAAq6I,EAAAE,UAAA,WACApkJ,KAEAqkJ,QAFArkJ,KAGAqkJ,OAAA,EAGAH,EAAAH,qBAAA,EANA/jJ,KAOA+jJ,qBAAA,EAPA/jJ,KAYAskJ,YACAp1H,SAbAlvB,KAaAivB,YAAA1mB,IAAA,YACAqY,IAdA5gB,KAcAivB,YAAA1mB,IAAA,OACAwjB,KAfA/rB,KAeAivB,YAAA1mB,IAAA,SAfAvI,KAkBAw1C,WAAAxgC,GAlBAhV,KAsBA0D,QAAAu3I,OAtBAj7I,KAsBA0D,QAAA6gJ,UAtBAvkJ,KA4BA+jJ,qBAAA,EA5BA/jJ,KA8BA4hB,SAAA,aAAA5M,EAAAmvI,OAIAvD,KAAA,SAAA5rI,EAAAlM,EAAAo7I,GACA3kJ,EAAAsK,KAAAq6I,EAAAE,UAAA,WACA,IAAAI,GAAA,EACA7wI,EAAA3T,KAGA2T,EAAAmuI,YAAAoC,EAAApC,YACAnuI,EAAA0vI,kBAAAa,EAAAb,kBACA1vI,EAAA6hB,OAAAwG,MAAAkoH,EAAA1uH,OAAAwG,MAEAroB,EAAA8wI,gBAAA9wI,EAAA+wI,kBACAF,GAAA,EAEAjlJ,EAAAsK,KAAAq6I,EAAAE,UAAA,WAaA,OAVApkJ,KAAA8hJ,YAAAoC,EAAApC,YACA9hJ,KAAAqjJ,kBAAAa,EAAAb,kBACArjJ,KAAAw1B,OAAAwG,MAAAkoH,EAAA1uH,OAAAwG,MAEAh8B,OAAA2T,GACA3T,KAAAykJ,gBAAAzkJ,KAAA0kJ,iBACAnlJ,EAAA0W,SAAAtC,EAAAmE,QAAA,GAAA9X,KAAA8X,QAAA,MACA0sI,GAAA,GAGAA,KAIAA,GAIA7wI,EAAA0wI,SACA1wI,EAAA0wI,OAAA,EAGAH,EAAAS,QAAA77I,EAAAmyI,OAAAr8H,SAEAjL,EAAAixI,YAAA97I,EAAAmyI,OACA91H,SAAAxR,EAAAmE,SACAgB,KAAA,uBAGAnF,EAAAjQ,QAAA6gJ,QAAA5wI,EAAAjQ,QAAAu3I,OAEAtnI,EAAAjQ,QAAAu3I,OAAA,WACA,OAAAnyI,EAAAmyI,OAAA,IAKAjmI,EAAAwT,OAAA7U,EAAAixI,YAAA,GACAjxI,EAAA8gC,cAAAz/B,GAAA,GACArB,EAAAmhC,YAAA9/B,GAAA,MAIArB,EAAA6hB,OAAAwG,MAAApb,IAAAsjI,EAAA1uH,OAAAwG,MAAApb,IACAjN,EAAA6hB,OAAAwG,MAAAjQ,KAAAm4H,EAAA1uH,OAAAwG,MAAAjQ,KACApY,EAAA6hB,OAAA5W,OAAAmN,MAAAm4H,EAAA1uH,OAAA5W,OAAAmN,KACApY,EAAA6hB,OAAA5W,OAAAmN,KACApY,EAAA6hB,OAAA5W,OAAAgC,KAAAsjI,EAAA1uH,OAAA5W,OAAAgC,IACAjN,EAAA6hB,OAAA5W,OAAAgC,IAEAsjI,EAAAtiI,SAAA,aAAA5M,GAIAkvI,EAAAjB,QAAAtvI,EAAAmE,QAIAvY,EAAAsK,KAAAq6I,EAAAE,UAAA,WACApkJ,KAAAqgJ,qBAIA6D,EAAAU,YAAAV,EAAApsI,QACAnE,EAAAkxI,YAAAX,GAGAvwI,EAAAixI,cACAjxI,EAAA4hC,WAAAvgC,GAKAlM,EAAAomB,SAAAvb,EAAAub,WAOAvb,EAAA0wI,SAEA1wI,EAAA0wI,OAAA,EACA1wI,EAAAowI,qBAAA,EAIApwI,EAAAjQ,QAAAohJ,QAAAnxI,EAAAjQ,QAAA48I,OACA3sI,EAAAjQ,QAAA48I,QAAA,EAEA3sI,EAAAiO,SAAA,MAAA5M,EAAArB,EAAAqvI,QAAArvI,IACAA,EAAA6hC,WAAAxgC,GAAA,GAIArB,EAAAjQ,QAAA48I,OAAA3sI,EAAAjQ,QAAAohJ,QACAnxI,EAAAjQ,QAAAu3I,OAAAtnI,EAAAjQ,QAAA6gJ,QAEA5wI,EAAAsb,aACAtb,EAAAsb,YAAA1c,SAKAzJ,EAAAmyI,OAAA91H,SAAA++H,EAAAS,SACAT,EAAAnC,gBAAA/sI,GACAlM,EAAAomB,SAAAg1H,EAAAjC,kBAAAjtI,GAAA,GAEAkvI,EAAAtiI,SAAA,eAAA5M,GAGAkvI,EAAAjB,SAAA,EAIA1jJ,EAAAsK,KAAAq6I,EAAAE,UAAA,WACApkJ,KAAAqgJ,2BAQA9gJ,EAAAuJ,GAAAk7I,OAAA1xI,IAAA,sBACAiK,MAAA,SAAAvH,EAAAlM,EAAAwB,GACA,IAAA/L,EAAAgB,EAAA,QACAzB,EAAAwM,EAAA5G,QAEAnF,EAAAgK,IAAA,YACAzK,EAAAinJ,QAAAxmJ,EAAAgK,IAAA,WAEAhK,EAAAgK,IAAA,SAAAzK,EAAA4yI,SAEAzyH,KAAA,SAAAjJ,EAAAlM,EAAAwB,GACA,IAAAxM,EAAAwM,EAAA5G,QACA5F,EAAAinJ,SACAxlJ,EAAA,QAAAgJ,IAAA,SAAAzK,EAAAinJ,YAKAxlJ,EAAAuJ,GAAAk7I,OAAA1xI,IAAA,uBACAiK,MAAA,SAAAvH,EAAAlM,EAAAwB,GACA,IAAA/L,EAAAgB,EAAAuJ,EAAAmyI,QACAn9I,EAAAwM,EAAA5G,QACAnF,EAAAgK,IAAA,aACAzK,EAAAknJ,SAAAzmJ,EAAAgK,IAAA,YAEAhK,EAAAgK,IAAA,UAAAzK,EAAA6iC,UAEA1iB,KAAA,SAAAjJ,EAAAlM,EAAAwB,GACA,IAAAxM,EAAAwM,EAAA5G,QACA5F,EAAAknJ,UACAzlJ,EAAAuJ,EAAAmyI,QAAA1yI,IAAA,UAAAzK,EAAAknJ,aAKAzlJ,EAAAuJ,GAAAk7I,OAAA1xI,IAAA,sBACAiK,MAAA,SAAAvH,EAAAlM,EAAAzL,GACAA,EAAA4nJ,wBACA5nJ,EAAA4nJ,sBAAA5nJ,EAAA49I,OAAAvqF,cAAA,IAGArzD,EAAA4nJ,sBAAA,KAAA5nJ,EAAA0J,SAAA,IACA,SAAA1J,EAAA4nJ,sBAAA,GAAAxtI,UACApa,EAAA6nJ,eAAA7nJ,EAAA4nJ,sBAAAzvH,WAGAorH,KAAA,SAAA5rI,EAAAlM,EAAAzL,GAEA,IAAAS,EAAAT,EAAAqG,QACAyhJ,GAAA,EACAz0F,EAAArzD,EAAA4nJ,sBAAA,GACAl+I,EAAA1J,EAAA0J,SAAA,GAEA2pD,IAAA3pD,GAAA,SAAA2pD,EAAAj5C,SACA3Z,EAAAgiE,MAAA,MAAAhiE,EAAAgiE,OACAziE,EAAA6nJ,eAAAtkI,IAAA8vC,EAAA2Q,aAAArsD,EAAA2gC,MACA73C,EAAA0iJ,kBACA9vF,EAAAmQ,UAAAskF,EAAAz0F,EAAAmQ,UAAA/iE,EAAA2iJ,YACKzrI,EAAA2gC,MAAAt4C,EAAA6nJ,eAAAtkI,IAAA9iB,EAAA0iJ,oBACL9vF,EAAAmQ,UAAAskF,EAAAz0F,EAAAmQ,UAAA/iE,EAAA2iJ,cAIA3iJ,EAAAgiE,MAAA,MAAAhiE,EAAAgiE,OACAziE,EAAA6nJ,eAAAn5H,KAAA2kC,EAAAyQ,YAAAnsD,EAAA0gC,MACA53C,EAAA0iJ,kBACA9vF,EAAAoQ,WAAAqkF,EAAAz0F,EAAAoQ,WAAAhjE,EAAA2iJ,YACKzrI,EAAA0gC,MAAAr4C,EAAA6nJ,eAAAn5H,KAAAjuB,EAAA0iJ,oBACL9vF,EAAAoQ,WAAAqkF,EAAAz0F,EAAAoQ,WAAAhjE,EAAA2iJ,gBAMA3iJ,EAAAgiE,MAAA,MAAAhiE,EAAAgiE,OACA9qD,EAAA2gC,MAAAp2C,EAAAwH,GAAA85D,YAAA/iE,EAAA0iJ,kBACA2E,EAAA5lJ,EAAAwH,GAAA85D,UAAAthE,EAAAwH,GAAA85D,YAAA/iE,EAAA2iJ,aACKlhJ,EAAAvC,QAAAsjB,UAAAtL,EAAA2gC,MAAAp2C,EAAAwH,GAAA85D,aACL/iE,EAAA0iJ,oBACA2E,EAAA5lJ,EAAAwH,GAAA85D,UAAAthE,EAAAwH,GAAA85D,YAAA/iE,EAAA2iJ,eAIA3iJ,EAAAgiE,MAAA,MAAAhiE,EAAAgiE,OACA9qD,EAAA0gC,MAAAn2C,EAAAwH,GAAA+5D,aAAAhjE,EAAA0iJ,kBACA2E,EAAA5lJ,EAAAwH,GAAA+5D,WACAvhE,EAAAwH,GAAA+5D,aAAAhjE,EAAA2iJ,aAEKlhJ,EAAAvC,QAAA+mB,SAAA/O,EAAA0gC,MAAAn2C,EAAAwH,GAAA+5D,cACLhjE,EAAA0iJ,oBACA2E,EAAA5lJ,EAAAwH,GAAA+5D,WACAvhE,EAAAwH,GAAA+5D,aAAAhjE,EAAA2iJ,iBAOA,IAAA0E,GAAA5lJ,EAAAuJ,GAAA44I,YAAA5jJ,EAAAykJ,eACAhjJ,EAAAuJ,GAAA44I,UAAAc,eAAAnlJ,EAAA2X,MAMAzV,EAAAuJ,GAAAk7I,OAAA1xI,IAAA,oBACAiK,MAAA,SAAAvH,EAAAlM,EAAAzL,GAEA,IAAAS,EAAAT,EAAAqG,QAEArG,EAAA+nJ,gBAEA7lJ,EAAAzB,EAAA+xC,KAAAr+B,cAAAqgB,OAAA/zB,EAAA+xC,KAAAmQ,OAAA,sBAAAliD,EAAA+xC,MACAhmC,KAAA,WACA,IAAAuiH,EAAA7sH,EAAAS,MACAqlJ,EAAAj5B,EAAA52F,SACAx1B,OAAA3C,EAAAya,QAAA,IACAza,EAAA+nJ,aAAA7gJ,MACAqf,KAAA5jB,KACA+jB,MAAAqoG,EAAA99D,aAAAhuC,OAAA8rG,EAAAhgD,cACAxrD,IAAAykI,EAAAzkI,IAAAmL,KAAAs5H,EAAAt5H,UAMA60H,KAAA,SAAA5rI,EAAAlM,EAAAqoD,GAEA,IAAA+2D,EAAAo9B,EAAAC,EAAAC,EAAAloJ,EAAAa,EAAAI,EAAA0tB,EAAA5uB,EAAAqX,EACA5W,EAAAqzD,EAAAztD,QACA/F,EAAAG,EAAA6iJ,cACA8E,EAAA38I,EAAA0sB,OAAAzJ,KAAA25H,EAAAD,EAAAt0F,EAAAkyF,kBAAAt/H,MACA4hI,EAAA78I,EAAA0sB,OAAA5U,IAAAglI,EAAAD,EAAAx0F,EAAAkyF,kBAAA/iI,OAEA,IAAAjjB,EAAA8zD,EAAAi0F,aAAAjlJ,OAAA,EAAyC9C,GAAA,EAAQA,IAGjDc,GADAb,EAAA6zD,EAAAi0F,aAAA/nJ,GAAA0uB,KAAAolC,EAAAuxF,QAAA32H,MACAolC,EAAAi0F,aAAA/nJ,GAAA0mB,MAEAkI,GADA1tB,EAAA4yD,EAAAi0F,aAAA/nJ,GAAAujB,IAAAuwC,EAAAuxF,QAAA9hI,KACAuwC,EAAAi0F,aAAA/nJ,GAAAijB,OAEAolI,EAAApoJ,EAAAK,GAAA8nJ,EAAAtnJ,EAAAR,GAAAioJ,EAAArnJ,EAAAZ,GAAAgoJ,EAAA15H,EAAAtuB,IACA4B,EAAA0W,SAAAk7C,EAAAi0F,aAAA/nJ,GAAAumB,KAAAkgB,cACAqtB,EAAAi0F,aAAA/nJ,GAAAumB,OACAutC,EAAAi0F,aAAA/nJ,GAAAwoJ,UACA10F,EAAAztD,QAAAmsC,KAAAi2G,SACA30F,EAAAztD,QAAAmsC,KAAAi2G,QAAAtoJ,KACA2zD,EAAAr5C,QACA9C,EACAzV,EAAAgG,OAAA4rD,EAAA6xF,WAAkC+C,SAAA50F,EAAAi0F,aAAA/nJ,GAAAumB,QAGlCutC,EAAAi0F,aAAA/nJ,GAAAwoJ,UAAA,IAIA,UAAA/nJ,EAAA4iJ,WACAx4B,EAAA16G,KAAAioC,IAAAl3C,EAAAqnJ,IAAAjoJ,EACA2nJ,EAAA93I,KAAAioC,IAAAxpB,EAAA05H,IAAAhoJ,EACA4nJ,EAAA/3I,KAAAioC,IAAAn4C,EAAAooJ,IAAA/nJ,EACA6nJ,EAAAh4I,KAAAioC,IAAAt3C,EAAAsnJ,IAAA9nJ,EACAuqH,IACAp/G,EAAAomB,SAAAtO,IAAAuwC,EAAA4xF,mBAAA,YACAniI,IAAAriB,EAAA4yD,EAAAkyF,kBAAA/iI,OACAyL,KAAA,IACMnL,KAEN0kI,IACAx8I,EAAAomB,SAAAtO,IAAAuwC,EAAA4xF,mBAAA,YACAniI,IAAAqL,EACAF,KAAA,IACMnL,KAEN2kI,IACAz8I,EAAAomB,SAAAnD,KAAAolC,EAAA4xF,mBAAA,YACAniI,IAAA,EACAmL,KAAAzuB,EAAA6zD,EAAAkyF,kBAAAt/H,QACMgI,MAENy5H,IACA18I,EAAAomB,SAAAnD,KAAAolC,EAAA4xF,mBAAA,YACAniI,IAAA,EACAmL,KAAA5tB,IACM4tB,OAINrX,EAAAwzG,GAAAo9B,GAAAC,GAAAC,EAEA,UAAA1nJ,EAAA4iJ,WACAx4B,EAAA16G,KAAAioC,IAAAl3C,EAAAonJ,IAAAhoJ,EACA2nJ,EAAA93I,KAAAioC,IAAAxpB,EAAA25H,IAAAjoJ,EACA4nJ,EAAA/3I,KAAAioC,IAAAn4C,EAAAmoJ,IAAA9nJ,EACA6nJ,EAAAh4I,KAAAioC,IAAAt3C,EAAAunJ,IAAA/nJ,EACAuqH,IACAp/G,EAAAomB,SAAAtO,IAAAuwC,EAAA4xF,mBAAA,YACAniI,IAAAriB,EACAwtB,KAAA,IACMnL,KAEN0kI,IACAx8I,EAAAomB,SAAAtO,IAAAuwC,EAAA4xF,mBAAA,YACAniI,IAAAqL,EAAAklC,EAAAkyF,kBAAA/iI,OACAyL,KAAA,IACMnL,KAEN2kI,IACAz8I,EAAAomB,SAAAnD,KAAAolC,EAAA4xF,mBAAA,YACAniI,IAAA,EACAmL,KAAAzuB,IACMyuB,MAENy5H,IACA18I,EAAAomB,SAAAnD,KAAAolC,EAAA4xF,mBAAA,YACAniI,IAAA,EACAmL,KAAA5tB,EAAAgzD,EAAAkyF,kBAAAt/H,QACMgI,QAINolC,EAAAi0F,aAAA/nJ,GAAAwoJ,WAAA39B,GAAAo9B,GAAAC,GAAAC,GAAA9wI,IACAy8C,EAAAztD,QAAAmsC,WACAshB,EAAAztD,QAAAmsC,UAAAryC,KACA2zD,EAAAr5C,QACA9C,EACAzV,EAAAgG,OAAA4rD,EAAA6xF,WACA+C,SAAA50F,EAAAi0F,aAAA/nJ,GAAAumB,QAGAutC,EAAAi0F,aAAA/nJ,GAAAwoJ,SAAA39B,GAAAo9B,GAAAC,GAAAC,GAAA9wI,MAOAnV,EAAAuJ,GAAAk7I,OAAA1xI,IAAA,qBACAiK,MAAA,SAAAvH,EAAAlM,EAAAwB,GACA,IAAAwI,EACAhV,EAAAwM,EAAA5G,QACAwoB,EAAA3sB,EAAAymJ,UAAAzmJ,EAAAzB,EAAAkG,QAAA0P,KAAA,SAAA0S,EAAA6F,GACA,OAAApF,SAAAtnB,EAAA6mB,GAAA7d,IAAA,mBACAse,SAAAtnB,EAAA0sB,GAAA1jB,IAAA,oBAGA2jB,EAAA/rB,SAEA2S,EAAA+T,SAAAtnB,EAAA2sB,EAAA,IAAA3jB,IAAA,iBACAhJ,EAAA2sB,GAAAriB,KAAA,SAAAxM,GACAkC,EAAAS,MAAAuI,IAAA,SAAAuK,EAAAzV,KAEA2C,KAAAuI,IAAA,SAAAuK,EAAAoZ,EAAA/rB,YAIAZ,EAAAuJ,GAAAk7I,OAAA1xI,IAAA,sBACAiK,MAAA,SAAAvH,EAAAlM,EAAAwB,GACA,IAAA/L,EAAAgB,EAAAuJ,EAAAmyI,QACAn9I,EAAAwM,EAAA5G,QAEAnF,EAAAgK,IAAA,YACAzK,EAAAmoJ,QAAA1nJ,EAAAgK,IAAA,WAEAhK,EAAAgK,IAAA,SAAAzK,EAAAmnB,SAEAhH,KAAA,SAAAjJ,EAAAlM,EAAAwB,GACA,IAAAxM,EAAAwM,EAAA5G,QAEA5F,EAAAmoJ,SACA1mJ,EAAAuJ,EAAAmyI,QAAA1yI,IAAA,SAAAzK,EAAAmoJ,YAKA1mJ,EAAAuJ,GAAAo7I,YAjsCYx7I,EAAAlI,MAAA7D,EAAAgM,GAAAD,KAAA9L,EAAAD,QAAAiM,oBC9BZ,IAAAF,EAAAC,EAAAC,EAIED,GAAUxL,EAAA,GAAUA,EAAA,UAAsB0L,KAAAD,EAAA,mBAATF,EAMlC,SAAAnJ,GAGD,OAAAA,EAAAuJ,GAAAk7I,QACA1xI,IAAA,SAAA1V,EAAAumC,EAAAn9B,GACA,IAAA3I,EACA6zB,EAAA3xB,EAAAuJ,GAAAlM,GAAAqC,UACA,IAAA5B,KAAA2I,EACAkrB,EAAA+yH,QAAA5mJ,GAAA6zB,EAAA+yH,QAAA5mJ,OACA6zB,EAAA+yH,QAAA5mJ,GAAAkH,MAAA4+B,EAAAn9B,EAAA3I,MAGAG,KAAA,SAAA8M,EAAA1M,EAAAuM,EAAA+7I,GACA,IAAA7oJ,EACA2I,EAAAsE,EAAA25I,QAAArmJ,GAEA,GAAAoI,IAIAkgJ,GAAA57I,EAAAwN,QAAA,GAAAyI,YACA,KAAAjW,EAAAwN,QAAA,GAAAyI,WAAA/Y,UAIA,IAAAnK,EAAA,EAAcA,EAAA2I,EAAA7F,OAAgB9C,IAC9BiN,EAAA5G,QAAAsC,EAAA3I,GAAA,KACA2I,EAAA3I,GAAA,GAAAmD,MAAA8J,EAAAwN,QAAA3N,OAjC4CzB,EAAAlI,MAAA7D,EAAAgM,GAAAD,KAAA9L,EAAAD,QAAAiM,oBCJ5C,IAAAF,EAAAC,EAAAC,EAIED,GAAUxL,EAAA,GAAUA,EAAA,UAAsB0L,KAAAD,EAAA,mBAATF,EAMlC,SAAAnJ,GACD,OAAAA,EAAAuJ,GAAAw4I,kBAAA,SAAAv6I,GACA,IAAA01B,EAIA,IACAA,EAAA11B,EAAA01B,cACE,MAAAv7B,GACFu7B,EAAA11B,EAAAqW,KAiBA,OAXAqf,IACAA,EAAA11B,EAAAqW,MAMAqf,EAAArC,WACAqC,EAAA11B,EAAAqW,MAGAqf,KAhC4C/zB,EAAAlI,MAAA7D,EAAAgM,GAAAD,KAAA9L,EAAAD,QAAAiM,oBCJ5C,IAAAF,EAAAC,EAAAC,EAIED,GAAUxL,EAAA,GAAUA,EAAA,UAAsB0L,KAAAD,EAAA,mBAATF,EAMlC,SAAAnJ,GACD,OAAAA,EAAAuJ,GAAAy4I,SAAA,SAAAzpI,GAIAA,GAAA,SAAAA,EAAAsiB,SAAAxa,eACArgB,EAAAuY,GAAAvK,QAAA,WAZ4C7E,EAAAlI,MAAA7D,EAAAgM,GAAAD,KAAA9L,EAAAD,QAAAiM,oBCJ5C,IAAAF,EAAAC,EAAAC,EAoBED,GACCxL,EAAA,GACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,UACS0L,KAAAD,EAAA,mBAATF,EAMF,SAAAnJ,GAED,OAAAA,EAAAqgC,OAAA,cAAArgC,EAAAuJ,GAAAi3I,OACAh3I,QAAA,SACA05B,kBAAA,OACAm0B,OAAA,EACAlzD,SACAyhB,SAAA,SACA26C,MAAA,EACAqmF,aAAA,EACAvK,aAAA,EACAlL,OAAA,OACAwP,UAAA,EACAkG,aAAA,EACAC,sBAAA,EACAC,iBAAA,EACAnG,MAAA,EACAnF,QAAA,EACAC,OAAA,WACAj7F,MAAA,MACArf,SAAA,EACA1R,aAAA,EACAqxH,QAAA,EACAruC,QAAA,EACAuuC,kBAAA,GACAC,YAAA,GACApzB,MAAA,UACAk5B,UAAA,YACAthI,OAAA,IAGAuhI,SAAA,KACAC,WAAA,KACAniG,OAAA,KACAoiG,WAAA,KACAC,IAAA,KACAC,KAAA,KACAC,QAAA,KACAt0I,OAAA,KACAmB,KAAA,KACA6I,MAAA,KACA0B,KAAA,KACAxE,OAAA,MAGAqtI,YAAA,SAAAj+H,EAAA2pB,EAAApiC,GACA,OAAAyY,GAAA2pB,GAAA3pB,EAAA2pB,EAAApiC,GAGA22I,YAAA,SAAAnjI,GACA,mBAAArY,KAAAqY,EAAArb,IAAA,WACA,oBAAAgD,KAAAqY,EAAArb,IAAA,aAGA27B,QAAA,WACAlkC,KAAA0kJ,kBACA1kJ,KAAA2lC,UAAA,eAGA3lC,KAAA6f,UAGA7f,KAAAw1B,OAAAx1B,KAAA8X,QAAA0d,SAGAx1B,KAAA6zC,aAEA7zC,KAAA8gJ,sBAGA9gJ,KAAA42D,OAAA,GAIA/xB,WAAA,SAAAjmC,EAAAN,GACA0B,KAAAoiC,OAAAxjC,EAAAN,GAEA,WAAAM,GACAoB,KAAA8gJ,uBAIAA,oBAAA,WACA,IAAAz8G,EAAArkC,KACAA,KAAAukC,aAAAvkC,KAAA8X,QAAAtC,KAAA,6CACAjW,EAAAsK,KAAA7J,KAAAggD,MAAA,WACA3b,EAAAsB,UACA3lC,KAAAsK,SAAA5G,QAAAs3I,OACAh7I,KAAA4jB,KAAApO,KAAAxV,KAAAsK,SAAA5G,QAAAs3I,QACAh7I,KAAA4jB,KACA,yBAKA0gB,SAAA,WACAtkC,KAAAg0C,gBAEA,QAAA32C,EAAA2C,KAAAggD,MAAA7/C,OAAA,EAAsC9C,GAAA,EAAQA,IAC9C2C,KAAAggD,MAAA3iD,GAAAumB,KAAA4gB,WAAAxkC,KAAA0iC,WAAA,SAGA,OAAA1iC,MAGAy0C,cAAA,SAAAz/B,EAAAgyI,GACA,IAAApC,EAAA,KACAqC,GAAA,EACA5iH,EAAArkC,KAEA,QAAAA,KAAAknJ,WAIAlnJ,KAAA0D,QAAA6/B,UAAA,WAAAvjC,KAAA0D,QAAAiV,OAKA3Y,KAAAmnJ,cAAAnyI,GAGAzV,EAAAyV,EAAAwT,QAAAo9B,UAAA/7C,KAAA,WACA,GAAAtK,EAAAuZ,KAAA9Y,KAAAqkC,EAAA3B,WAAA,WAAA2B,EAEA,OADAugH,EAAArlJ,EAAAS,OACA,IAGAT,EAAAuZ,KAAA9D,EAAAwT,OAAA6b,EAAA3B,WAAA,WAAA2B,IACAugH,EAAArlJ,EAAAyV,EAAAwT,UAGAo8H,GAGA5kJ,KAAA0D,QAAAs3I,SAAAgM,IACAznJ,EAAAS,KAAA0D,QAAAs3I,OAAA4J,GAAApvI,KAAA,KAAA4xI,UAAAv9I,KAAA,WACA7J,OAAAgV,EAAAwT,SACAy+H,GAAA,MAGAA,KAKAjnJ,KAAA4kJ,cACA5kJ,KAAAqnJ,2BACA,MAIAvyG,YAAA,SAAA9/B,EAAAgyI,EAAAM,GAEA,IAAAjqJ,EAAA+f,EACAtf,EAAAkC,KAAA0D,QAqHA,GAnHA1D,KAAAunJ,iBAAAvnJ,KAIAA,KAAAqgJ,mBAGArgJ,KAAAi7I,OAAAj7I,KAAAwhJ,cAAAxsI,GAGAhV,KAAAyhJ,0BAQAzhJ,KAAA2hJ,gBAGA3hJ,KAAA0wD,aAAA1wD,KAAAi7I,OAAAvqF,eAGA1wD,KAAAw1B,OAAAx1B,KAAA4kJ,YAAApvH,SACAx1B,KAAAw1B,QACA5U,IAAA5gB,KAAAw1B,OAAA5U,IAAA5gB,KAAA0iJ,QAAA9hI,IACAmL,KAAA/rB,KAAAw1B,OAAAzJ,KAAA/rB,KAAA0iJ,QAAA32H,MAGAxsB,EAAAgG,OAAAvF,KAAAw1B,QACAwG,OACAjQ,KAAA/W,EAAA0gC,MAAA11C,KAAAw1B,OAAAzJ,KACAnL,IAAA5L,EAAA2gC,MAAA31C,KAAAw1B,OAAA5U,KAEAhC,OAAA5e,KAAA2iJ,mBAIAC,SAAA5iJ,KAAA6iJ,uBAKA7iJ,KAAAi7I,OAAA1yI,IAAA,uBACAvI,KAAA4hJ,YAAA5hJ,KAAAi7I,OAAA1yI,IAAA,YAGAvI,KAAAgiJ,iBAAAhiJ,KAAAiiJ,kBAAAjtI,GACAhV,KAAAkiJ,cAAAltI,EAAA0gC,MACA11C,KAAAmiJ,cAAAntI,EAAA2gC,MAGA73C,EAAAoiJ,UAAAlgJ,KAAAoiJ,wBAAAtkJ,EAAAoiJ,UAGAlgJ,KAAAwnJ,aACA73I,KAAA3P,KAAA4kJ,YAAAj1I,OAAA,GACAiP,OAAA5e,KAAA4kJ,YAAAhmI,SAAA,IAKA5e,KAAAi7I,OAAA,KAAAj7I,KAAA4kJ,YAAA,IACA5kJ,KAAA4kJ,YAAAzgI,OAIAnkB,KAAAynJ,qBAGA3pJ,EAAA89I,aACA57I,KAAAqiJ,kBAGAvkJ,EAAA4yI,QAAA,SAAA5yI,EAAA4yI,SACAtzH,EAAApd,KAAA+G,SAAAyO,KAAA,QAGAxV,KAAA0nJ,aAAAtqI,EAAA7U,IAAA,UACA6U,EAAA7U,IAAA,SAAAzK,EAAA4yI,QAEA1wI,KAAA2nJ,iBACApoJ,EAAA,qBAAiBzB,EAAA4yI,OAAA,0BAAuCvrH,SAAA/H,IAGxDtf,EAAA6iC,UACA3gC,KAAAi7I,OAAA1yI,IAAA,aACAvI,KAAA4nJ,eAAA5nJ,KAAAi7I,OAAA1yI,IAAA,YAEAvI,KAAAi7I,OAAA1yI,IAAA,UAAAzK,EAAA6iC,UAGA7iC,EAAAmnB,SACAjlB,KAAAi7I,OAAA1yI,IAAA,YACAvI,KAAA6nJ,cAAA7nJ,KAAAi7I,OAAA1yI,IAAA,WAEAvI,KAAAi7I,OAAA1yI,IAAA,SAAAzK,EAAAmnB,SAIAjlB,KAAA0wD,aAAA,KAAA1wD,KAAA+G,SAAA,IACA,SAAA/G,KAAA0wD,aAAA,GAAAj5C,UACAzX,KAAAklJ,eAAAllJ,KAAA0wD,aAAAl7B,UAIAx1B,KAAA4hB,SAAA,QAAA5M,EAAAhV,KAAAgjJ,WAGAhjJ,KAAA8nJ,4BACA9nJ,KAAAyhJ,2BAIA6F,EACA,IAAAjqJ,EAAA2C,KAAA+nJ,WAAA5nJ,OAAA,EAAwC9C,GAAA,EAAQA,IAChD2C,KAAA+nJ,WAAA1qJ,GAAAukB,SAAA,WAAA5M,EAAAhV,KAAAgjJ,QAAAhjJ,OAoBA,OAfAT,EAAAuJ,GAAA44I,YACAniJ,EAAAuJ,GAAA44I,UAAAhyI,QAAA1P,MAGAT,EAAAuJ,GAAA44I,YAAA5jJ,EAAAykJ,eACAhjJ,EAAAuJ,GAAA44I,UAAAc,eAAAxiJ,KAAAgV,GAGAhV,KAAAgoJ,UAAA,EAEAhoJ,KAAA2lC,UAAA3lC,KAAAi7I,OAAA,sBAIAj7I,KAAAu1C,WAAAvgC,IACA,GAIAugC,WAAA,SAAAvgC,GACA,IAAA3X,EAAAumB,EAAAqkI,EAAAz6H,EACA1vB,EAAAkC,KAAA0D,QACAyhJ,GAAA,EAwEA,IArEAnlJ,KAAAkvB,SAAAlvB,KAAAiiJ,kBAAAjtI,GACAhV,KAAA8hJ,YAAA9hJ,KAAA+iJ,mBAAA,YAEA/iJ,KAAAkoJ,kBACAloJ,KAAAkoJ,gBAAAloJ,KAAA8hJ,aAIA9hJ,KAAA0D,QAAAuuG,SACAjyG,KAAA0wD,aAAA,KAAA1wD,KAAA+G,SAAA,IACA,SAAA/G,KAAA0wD,aAAA,GAAAj5C,SAEAzX,KAAAklJ,eAAAtkI,IAAA5gB,KAAA0wD,aAAA,GAAA2Q,aACArsD,EAAA2gC,MAAA73C,EAAA0iJ,kBACAxgJ,KAAA0wD,aAAA,GAAAmQ,UACAskF,EAAAnlJ,KAAA0wD,aAAA,GAAAmQ,UAAA/iE,EAAA2iJ,YACKzrI,EAAA2gC,MAAA31C,KAAAklJ,eAAAtkI,IAAA9iB,EAAA0iJ,oBACLxgJ,KAAA0wD,aAAA,GAAAmQ,UACAskF,EAAAnlJ,KAAA0wD,aAAA,GAAAmQ,UAAA/iE,EAAA2iJ,aAGAzgJ,KAAAklJ,eAAAn5H,KAAA/rB,KAAA0wD,aAAA,GAAAyQ,YACAnsD,EAAA0gC,MAAA53C,EAAA0iJ,kBACAxgJ,KAAA0wD,aAAA,GAAAoQ,WAAAqkF,EACAnlJ,KAAA0wD,aAAA,GAAAoQ,WAAAhjE,EAAA2iJ,YACKzrI,EAAA0gC,MAAA11C,KAAAklJ,eAAAn5H,KAAAjuB,EAAA0iJ,oBACLxgJ,KAAA0wD,aAAA,GAAAoQ,WAAAqkF,EACAnlJ,KAAA0wD,aAAA,GAAAoQ,WAAAhjE,EAAA2iJ,eAKAzrI,EAAA2gC,MAAA31C,KAAA+G,SAAA85D,YAAA/iE,EAAA0iJ,kBACA2E,EAAAnlJ,KAAA+G,SAAA85D,UAAA7gE,KAAA+G,SAAA85D,YAAA/iE,EAAA2iJ,aACKzgJ,KAAAhD,OAAAsjB,UAAAtL,EAAA2gC,MAAA31C,KAAA+G,SAAA85D,aACL/iE,EAAA0iJ,oBACA2E,EAAAnlJ,KAAA+G,SAAA85D,UAAA7gE,KAAA+G,SAAA85D,YAAA/iE,EAAA2iJ,cAGAzrI,EAAA0gC,MAAA11C,KAAA+G,SAAA+5D,aAAAhjE,EAAA0iJ,kBACA2E,EAAAnlJ,KAAA+G,SAAA+5D,WACA9gE,KAAA+G,SAAA+5D,aAAAhjE,EAAA2iJ,aAEKzgJ,KAAAhD,OAAA+mB,SAAA/O,EAAA0gC,MAAA11C,KAAA+G,SAAA+5D,cACLhjE,EAAA0iJ,oBACA2E,EAAAnlJ,KAAA+G,SAAA+5D,WACA9gE,KAAA+G,SAAA+5D,aAAAhjE,EAAA2iJ,gBAMA,IAAA0E,GAAA5lJ,EAAAuJ,GAAA44I,YAAA5jJ,EAAAykJ,eACAhjJ,EAAAuJ,GAAA44I,UAAAc,eAAAxiJ,KAAAgV,IAKAhV,KAAA8hJ,YAAA9hJ,KAAA+iJ,mBAAA,YAGA/iJ,KAAA0D,QAAAo8D,MAAA,MAAA9/D,KAAA0D,QAAAo8D,OACA9/D,KAAAi7I,OAAA,GAAAh+H,MAAA8O,KAAA/rB,KAAAkvB,SAAAnD,KAAA,MAEA/rB,KAAA0D,QAAAo8D,MAAA,MAAA9/D,KAAA0D,QAAAo8D,OACA9/D,KAAAi7I,OAAA,GAAAh+H,MAAA2D,IAAA5gB,KAAAkvB,SAAAtO,IAAA,MAIAvjB,EAAA2C,KAAAggD,MAAA7/C,OAAA,EAAkC9C,GAAA,EAAQA,IAM1C,GAHAumB,EAAA5jB,KAAAggD,MAAA3iD,GACA4qJ,EAAArkI,OAAA,IACA4J,EAAAxtB,KAAAmoJ,uBAAAvkI,KAYAA,EAAAtZ,WAAAtK,KAAAunJ,oBAOAU,IAAAjoJ,KAAA4kJ,YAAA,IACA5kJ,KAAAivB,YAAA,IAAAzB,EAAA,sBAAAy6H,GACA1oJ,EAAA0W,SAAAjW,KAAAivB,YAAA,GAAAg5H,IACA,iBAAAjoJ,KAAA0D,QAAAiV,MACApZ,EAAA0W,SAAAjW,KAAA8X,QAAA,GAAAmwI,IAGA,CAIA,GAFAjoJ,KAAAooJ,UAAA,IAAA56H,EAAA,YAEA,YAAAxtB,KAAA0D,QAAA6iJ,YAAAvmJ,KAAAqoJ,qBAAAzkI,GAGA,MAFA5jB,KAAAsoJ,WAAAtzI,EAAA4O,GAKA5jB,KAAA4hB,SAAA,SAAA5M,EAAAhV,KAAAgjJ,WACA,MAgBA,OAXAhjJ,KAAAuoJ,mBAAAvzI,GAGAzV,EAAAuJ,GAAA44I,WACAniJ,EAAAuJ,GAAA44I,UAAAd,KAAA5gJ,KAAAgV,GAIAhV,KAAA4hB,SAAA,OAAA5M,EAAAhV,KAAAgjJ,WAEAhjJ,KAAAkoJ,gBAAAloJ,KAAA8hJ,aACA,GAIAtsG,WAAA,SAAAxgC,EAAA8tI,GAEA,GAAA9tI,EAAA,CASA,GAJAzV,EAAAuJ,GAAA44I,YAAA1hJ,KAAA0D,QAAA6+I,eACAhjJ,EAAAuJ,GAAA44I,UAAAlrI,KAAAxW,KAAAgV,GAGAhV,KAAA0D,QAAA48I,OAAA,CACA,IAAAj8G,EAAArkC,KACA2kE,EAAA3kE,KAAAivB,YAAAuG,SACAsqC,EAAA9/D,KAAA0D,QAAAo8D,KACA0oF,KAEA1oF,GAAA,MAAAA,IACA0oF,EAAAz8H,KAAA44C,EAAA54C,KAAA/rB,KAAAw1B,OAAA5W,OAAAmN,KAAA/rB,KAAA0iJ,QAAA32H,MACA/rB,KAAAw+D,aAAA,KAAAx+D,KAAA+G,SAAA,GAAAqW,KACA,EACApd,KAAAw+D,aAAA,GAAAsC,aAGAhB,GAAA,MAAAA,IACA0oF,EAAA5nI,IAAA+jD,EAAA/jD,IAAA5gB,KAAAw1B,OAAA5W,OAAAgC,IAAA5gB,KAAA0iJ,QAAA9hI,KACA5gB,KAAAw+D,aAAA,KAAAx+D,KAAA+G,SAAA,GAAAqW,KACA,EACApd,KAAAw+D,aAAA,GAAAqC,YAGA7gE,KAAAknJ,WAAA,EACA3nJ,EAAAS,KAAAi7I,QAAAnoE,QACA01E,EACA3hI,SAAA7mB,KAAA0D,QAAA48I,OAAA,SACA,WACAj8G,EAAAi+G,OAAAttI,UAIAhV,KAAAsiJ,OAAAttI,EAAA8tI,GAGA,WAIA5yH,OAAA,WAEA,GAAAlwB,KAAAgoJ,SAAA,CAEAhoJ,KAAAq0C,SAAA,IAAA90C,EAAAujB,MAAA,WAA2C0F,OAAA,QAE3C,aAAAxoB,KAAA0D,QAAAu3I,QACAj7I,KAAA4kJ,YAAAr8I,IAAAvI,KAAAskJ,YACAtkJ,KAAAukC,aAAAvkC,KAAA4kJ,YAAA,uBAEA5kJ,KAAA4kJ,YAAA5gI,OAIA,QAAA3mB,EAAA2C,KAAA+nJ,WAAA5nJ,OAAA,EAA4C9C,GAAA,EAAQA,IACpD2C,KAAA+nJ,WAAA1qJ,GAAAukB,SAAA,kBAAA5hB,KAAAgjJ,QAAAhjJ,OACAA,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAAkC,OACA5mJ,KAAA+nJ,WAAA1qJ,GAAAukB,SAAA,WAAA5hB,KAAAgjJ,QAAAhjJ,OACAA,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAAkC,KAAA,GAgCA,OA1BA5mJ,KAAAivB,cAIAjvB,KAAAivB,YAAA,GAAA1O,YACAvgB,KAAAivB,YAAA,GAAA1O,WAAAnC,YAAApe,KAAAivB,YAAA,IAEA,aAAAjvB,KAAA0D,QAAAu3I,QAAAj7I,KAAAi7I,QACAj7I,KAAAi7I,OAAA,GAAA16H,YACAvgB,KAAAi7I,OAAA1oI,SAGAhT,EAAAgG,OAAAvF,MACAi7I,OAAA,KACA+M,UAAA,EACAd,WAAA,EACAuB,aAAA,OAGAzoJ,KAAAwnJ,YAAA73I,KACApQ,EAAAS,KAAAwnJ,YAAA73I,MAAA+gB,MAAA1wB,KAAA4kJ,aAEArlJ,EAAAS,KAAAwnJ,YAAA5oI,QAAAyuD,QAAArtE,KAAA4kJ,cAIA5kJ,MAIAk9G,UAAA,SAAAp/G,GAEA,IAAAkiD,EAAAhgD,KAAA0oJ,kBAAA5qJ,KAAA6qJ,WACAjkJ,KAiBA,OAhBA5G,QAEAyB,EAAAygD,GAAAn2C,KAAA,WACA,IAAAqgC,GAAA3qC,EAAAzB,EAAA8lB,MAAA5jB,MAAA2G,KAAA7I,EAAA8L,WAAA,WACAsO,MAAApa,EAAA8qJ,YAAA,kBACA1+G,GACAxlC,EAAAH,MACAzG,EAAAc,KAAAsrC,EAAA,SACA,KAAApsC,EAAAc,KAAAd,EAAA8qJ,WAAA1+G,EAAA,GAAAA,EAAA,QAIAxlC,EAAAvE,QAAArC,EAAAc,KACA8F,EAAAH,KAAAzG,EAAAc,IAAA,KAGA8F,EAAAwvB,KAAA,MAIA/d,QAAA,SAAArY,GAEA,IAAAkiD,EAAAhgD,KAAA0oJ,kBAAA5qJ,KAAA6qJ,WACA/uC,KAOA,OALA97G,QAEAkiD,EAAAn2C,KAAA,WACA+vG,EAAAr1G,KAAAhF,EAAAzB,EAAA8lB,MAAA5jB,MAAA2G,KAAA7I,EAAA8L,WAAA,aAEAgwG,GAKA6qC,gBAAA,SAAA7gI,GAEA,IAAA6hI,EAAAzlJ,KAAA8hJ,YAAA/1H,KACA25H,EAAAD,EAAAzlJ,KAAAqjJ,kBAAAt/H,MACA4hI,EAAA3lJ,KAAA8hJ,YAAAlhI,IACAglI,EAAAD,EAAA3lJ,KAAAqjJ,kBAAA/iI,OACAhjB,EAAAsmB,EAAAmI,KACA5tB,EAAAb,EAAAsmB,EAAAG,MACAxlB,EAAAqlB,EAAAhD,IACAqL,EAAA1tB,EAAAqlB,EAAAtD,OACAuoI,EAAA7oJ,KAAAw1B,OAAAwG,MAAApb,IACAkoI,EAAA9oJ,KAAAw1B,OAAAwG,MAAAjQ,KACAg9H,EAAA,MAAA/oJ,KAAA0D,QAAAo8D,MAAA6lF,EAAAkD,EAAAtqJ,GACAonJ,EAAAkD,EAAA58H,EACA+8H,EAAA,MAAAhpJ,KAAA0D,QAAAo8D,MAAA2lF,EAAAqD,EAAAxrJ,GACAmoJ,EAAAqD,EAAA3qJ,EACA8qJ,EAAAF,GAAAC,EAEA,kBAAAhpJ,KAAA0D,QAAA6iJ,WACAvmJ,KAAA0D,QAAAwlJ,2BACA,YAAAlpJ,KAAA0D,QAAA6iJ,WACAvmJ,KAAAqjJ,kBAAArjJ,KAAAmpJ,SAAA,kBACAvlI,EAAA5jB,KAAAmpJ,SAAA,kBAEAF,EAGA3rJ,EAAAmoJ,EAAAzlJ,KAAAqjJ,kBAAAt/H,MAAA,GACA2hI,EAAA1lJ,KAAAqjJ,kBAAAt/H,MAAA,EAAA5lB,GACAI,EAAAonJ,EAAA3lJ,KAAAqjJ,kBAAA/iI,OAAA,GACAslI,EAAA5lJ,KAAAqjJ,kBAAA/iI,OAAA,EAAA2L,GAKAk8H,uBAAA,SAAAvkI,GACA,IAAAwlI,EAAAC,EACAN,EAAA,MAAA/oJ,KAAA0D,QAAAo8D,MACA9/D,KAAA8mJ,YACA9mJ,KAAA8hJ,YAAAlhI,IAAA5gB,KAAAw1B,OAAAwG,MAAApb,IAAAgD,EAAAhD,IAAAgD,EAAAtD,QACA0oI,EAAA,MAAAhpJ,KAAA0D,QAAAo8D,MACA9/D,KAAA8mJ,YACA9mJ,KAAA8hJ,YAAA/1H,KAAA/rB,KAAAw1B,OAAAwG,MAAAjQ,KAAAnI,EAAAmI,KAAAnI,EAAAG,OACAklI,EAAAF,GAAAC,EAEA,QAAAC,IAIAG,EAAAppJ,KAAAspJ,4BACAD,EAAArpJ,KAAAupJ,8BAEAvpJ,KAAAmpJ,SACA,UAAAE,GAAA,SAAAD,EAAA,IACAA,IAAA,SAAAA,EAAA,OAIAf,qBAAA,SAAAzkI,GAEA,IAAA4lI,EAAAxpJ,KAAA8mJ,YAAA9mJ,KAAA8hJ,YAAAlhI,IACA5gB,KAAAw1B,OAAAwG,MAAApb,IAAAgD,EAAAhD,IAAAgD,EAAAtD,OAAA,EAAAsD,EAAAtD,QACAmpI,EAAAzpJ,KAAA8mJ,YAAA9mJ,KAAA8hJ,YAAA/1H,KACA/rB,KAAAw1B,OAAAwG,MAAAjQ,KAAAnI,EAAAmI,KAAAnI,EAAAG,MAAA,EAAAH,EAAAG,OACAqlI,EAAAppJ,KAAAspJ,4BACAD,EAAArpJ,KAAAupJ,8BAEA,OAAAvpJ,KAAAmpJ,UAAAE,EACA,UAAAA,GAAAI,GACA,SAAAJ,IAAAI,EAEAL,IAAA,SAAAA,GAAAI,GACA,OAAAJ,IAAAI,IAKAF,0BAAA,WACA,IAAAn8C,EAAAntG,KAAA8hJ,YAAAlhI,IAAA5gB,KAAAkoJ,gBAAAtnI,IACA,WAAAusF,MAAA,gBAGAo8C,4BAAA,WACA,IAAAp8C,EAAAntG,KAAA8hJ,YAAA/1H,KAAA/rB,KAAAkoJ,gBAAAn8H,KACA,WAAAohF,MAAA,mBAGAttF,QAAA,SAAA7K,GAIA,OAHAhV,KAAAmnJ,cAAAnyI,GACAhV,KAAA8gJ,sBACA9gJ,KAAAqgJ,mBACArgJ,MAGA0pJ,aAAA,WACA,IAAAhmJ,EAAA1D,KAAA0D,QACA,OAAAA,EAAAyiJ,YAAA30I,cAAAqgB,QACAnuB,EAAAyiJ,aACAziJ,EAAAyiJ,aAGAuC,kBAAA,SAAAC,GAEA,IAAAtrJ,EAAA0P,EAAA43D,EAAAxT,EACAnR,KACA2pG,KACAxD,EAAAnmJ,KAAA0pJ,eAEA,GAAAvD,GAAAwC,EACA,IAAAtrJ,EAAA8oJ,EAAAhmJ,OAAA,EAAoC9C,GAAA,EAAQA,IAE5C,IADAsnE,EAAAplE,EAAA4mJ,EAAA9oJ,GAAA2C,KAAA+G,SAAA,IACAgG,EAAA43D,EAAAxkE,OAAA,EAA6B4M,GAAA,EAAQA,KACrCokD,EAAA5xD,EAAAuZ,KAAA6rD,EAAA53D,GAAA/M,KAAA2iC,kBACAwuB,IAAAnxD,OAAAmxD,EAAAztD,QAAA6/B,UACAomH,EAAAplJ,MAAAhF,EAAAgL,WAAA4mD,EAAAztD,QAAAs8C,OACAmR,EAAAztD,QAAAs8C,MAAAxiD,KAAA2zD,EAAAr5C,SACAvY,EAAA4xD,EAAAztD,QAAAs8C,MAAAmR,EAAAr5C,SACAytB,IAAA,uBACAA,IAAA,4BAAA4rB,IAaA,SAAAy4F,IACA5pG,EAAAz7C,KAAAvE,MAEA,IAVA2pJ,EAAAplJ,MAAAhF,EAAAgL,WAAAvK,KAAA0D,QAAAs8C,OACAhgD,KAAA0D,QAAAs8C,MACAxiD,KAAAwC,KAAA8X,QAAA,MAAgCpU,QAAA1D,KAAA0D,QAAAkgB,KAAA5jB,KAAA4kJ,cAChCrlJ,EAAAS,KAAA0D,QAAAs8C,MAAAhgD,KAAA8X,SACAytB,IAAA,uBACAA,IAAA,4BAAAvlC,OAKA3C,EAAAssJ,EAAAxpJ,OAAA,EAA+B9C,GAAA,EAAQA,IACvCssJ,EAAAtsJ,GAAA,GAAAwM,KAAA+/I,GAGA,OAAArqJ,EAAAygD,IAIAqnG,yBAAA,WAEA,IAAAl8H,EAAAnrB,KAAA4kJ,YAAApvI,KAAA,SAAAxV,KAAA0iC,WAAA,UAEA1iC,KAAAggD,MAAAzgD,EAAAs2G,KAAA71G,KAAAggD,MAAA,SAAAp8B,GACA,QAAA7W,EAAA,EAAmBA,EAAAoe,EAAAhrB,OAAiB4M,IACpC,GAAAoe,EAAApe,KAAA6W,OAAA,GACA,SAGA,YAKAujI,cAAA,SAAAnyI,GAEAhV,KAAAggD,SACAhgD,KAAA+nJ,YAAA/nJ,MAEA,IAAA3C,EAAA0P,EAAA43D,EAAAxT,EAAA7Y,EAAAuxG,EAAAjmI,EAAAkmI,EACA9pG,EAAAhgD,KAAAggD,MACA2pG,IAAApqJ,EAAAgL,WAAAvK,KAAA0D,QAAAs8C,OACAhgD,KAAA0D,QAAAs8C,MAAAxiD,KAAAwC,KAAA8X,QAAA,GAAA9C,GAAwD4O,KAAA5jB,KAAA4kJ,cACxDrlJ,EAAAS,KAAA0D,QAAAs8C,MAAAhgD,KAAA8X,SAAA9X,OACAmmJ,EAAAnmJ,KAAA0pJ,eAGA,GAAAvD,GAAAnmJ,KAAA42D,MACA,IAAAv5D,EAAA8oJ,EAAAhmJ,OAAA,EAAoC9C,GAAA,EAAQA,IAE5C,IADAsnE,EAAAplE,EAAA4mJ,EAAA9oJ,GAAA2C,KAAA+G,SAAA,IACAgG,EAAA43D,EAAAxkE,OAAA,EAA6B4M,GAAA,EAAQA,KACrCokD,EAAA5xD,EAAAuZ,KAAA6rD,EAAA53D,GAAA/M,KAAA2iC,kBACAwuB,IAAAnxD,OAAAmxD,EAAAztD,QAAA6/B,WACAomH,EAAAplJ,MAAAhF,EAAAgL,WAAA4mD,EAAAztD,QAAAs8C,OACAmR,EAAAztD,QAAAs8C,MACAxiD,KAAA2zD,EAAAr5C,QAAA,GAAA9C,GAA0C4O,KAAA5jB,KAAA4kJ,cAC1CrlJ,EAAA4xD,EAAAztD,QAAAs8C,MAAAmR,EAAAr5C,SAAAq5C,IACAnxD,KAAA+nJ,WAAAxjJ,KAAA4sD,IAMA,IAAA9zD,EAAAssJ,EAAAxpJ,OAAA,EAA+B9C,GAAA,EAAQA,IAIvC,IAHAi7C,EAAAqxG,EAAAtsJ,GAAA,GACAwsJ,EAAAF,EAAAtsJ,GAAA,GAEA0P,EAAA,EAAA+8I,EAAAD,EAAA1pJ,OAAgD4M,EAAA+8I,EAAmB/8I,KACnE6W,EAAArkB,EAAAsqJ,EAAA98I,KAGA+L,KAAA9Y,KAAA0iC,WAAA,QAAA4V,GAEA0H,EAAAz7C,MACAqf,OACAtZ,SAAAguC,EACAv0B,MAAA,EAAAzD,OAAA,EACAyL,KAAA,EAAAnL,IAAA,KAOAy/H,iBAAA,SAAA0J,GAaA,IAAA1sJ,EAAAumB,EAAArlB,EAAAY,EAEA,IAZAa,KAAAmpJ,WAAAnpJ,KAAAggD,MAAA7/C,SACA,MAAAH,KAAA0D,QAAAo8D,MAAA9/D,KAAA+mJ,YAAA/mJ,KAAAggD,MAAA,GAAAp8B,OAKA5jB,KAAAw+D,cAAAx+D,KAAAi7I,SACAj7I,KAAAw1B,OAAA5W,OAAA5e,KAAA2iJ,oBAKAtlJ,EAAA2C,KAAAggD,MAAA7/C,OAAA,EAAkC9C,GAAA,EAAQA,KAC1CumB,EAAA5jB,KAAAggD,MAAA3iD,IAGAiN,WAAAtK,KAAAunJ,kBAAAvnJ,KAAAunJ,kBACA3jI,OAAA,KAAA5jB,KAAA4kJ,YAAA,KAIArmJ,EAAAyB,KAAA0D,QAAAsmJ,iBACAzqJ,EAAAS,KAAA0D,QAAAsmJ,iBAAApmI,QACAA,OAEAmmI,IACAnmI,EAAAG,MAAAxlB,EAAA+vD,aACA1qC,EAAAtD,OAAA/hB,EAAA6tE,eAGAjtE,EAAAZ,EAAAi3B,SACA5R,EAAAmI,KAAA5sB,EAAA4sB,KACAnI,EAAAhD,IAAAzhB,EAAAyhB,KAGA,GAAA5gB,KAAA0D,QAAAumJ,QAAAjqJ,KAAA0D,QAAAumJ,OAAAC,kBACAlqJ,KAAA0D,QAAAumJ,OAAAC,kBAAA1sJ,KAAAwC,WAEA,IAAA3C,EAAA2C,KAAA+nJ,WAAA5nJ,OAAA,EAAwC9C,GAAA,EAAQA,IAChD8B,EAAAa,KAAA+nJ,WAAA1qJ,GAAAya,QAAA0d,SACAx1B,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAA34H,KAAA5sB,EAAA4sB,KACA/rB,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAA9jI,IAAAzhB,EAAAyhB,IACA5gB,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAA3gI,MACA/jB,KAAA+nJ,WAAA1qJ,GAAAya,QAAAw2C,aACAtuD,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAApkI,OACAtgB,KAAA+nJ,WAAA1qJ,GAAAya,QAAAs0D,cAIA,OAAApsE,MAGAynJ,mBAAA,SAAApjH,GAEA,IAAA5rB,EACA3a,GAFAumC,KAAArkC,MAEA0D,QAEA5F,EAAAmxB,aAAAnxB,EAAAmxB,YAAAzd,cAAAqgB,SACApZ,EAAA3a,EAAAmxB,YACAnxB,EAAAmxB,aACAnX,QAAA,WAEA,IAAAsiB,EAAAiK,EAAAugH,YAAA,GAAAxqH,SAAAxa,cACA9H,EAAAvY,EAAA,IAAA66B,EAAA,IAAAiK,EAAAt9B,SAAA,IAqBA,OAnBAs9B,EAAAsB,UAAA7tB,EAAA,0BACAW,GAAA4rB,EAAAugH,YAAA,GAAAnsI,WACA8rB,aAAAzsB,EAAA,sBAEA,UAAAsiB,EACAiK,EAAA8lH,qBACA9lH,EAAAugH,YAAApvI,KAAA,MAAAkc,GAAA,GACAnyB,EAAA,OAAA8kC,EAAAt9B,SAAA,IAAAoe,SAAArN,IAEM,OAAAsiB,EACNiK,EAAA8lH,qBAAA9lH,EAAAugH,YAAA9sI,GACM,QAAAsiB,GACNtiB,EAAAnR,KAAA,MAAA09B,EAAAugH,YAAAj+I,KAAA,QAGA8R,GACAX,EAAAvP,IAAA,uBAGAuP,GAEA2B,OAAA,SAAA4e,EAAAl5B,GAMAsZ,IAAA3a,EAAAuoJ,uBAMAlnJ,EAAAmhB,UACAnhB,EAAAmhB,OACA+jB,EAAAugH,YAAApiF,cACA37C,SAAAwd,EAAAugH,YAAAr8I,IAAA,qBACAse,SAAAwd,EAAAugH,YAAAr8I,IAAA,yBAEApJ,EAAA4kB,SACA5kB,EAAA4kB,MACAsgB,EAAAugH,YAAAriF,aACA17C,SAAAwd,EAAAugH,YAAAr8I,IAAA,sBACAse,SAAAwd,EAAAugH,YAAAr8I,IAAA,4BAOA87B,EAAApV,YAAA1vB,EAAAzB,EAAAmxB,YAAAnX,QAAAta,KAAA6mC,EAAAvsB,QAAAusB,EAAAugH,cAGAvgH,EAAAugH,YAAAl0H,MAAA2T,EAAApV,aAGAnxB,EAAAmxB,YAAAxV,OAAA4qB,IAAApV,cAIAk7H,qBAAA,SAAAC,EAAAC,GACA,IAAAhmH,EAAArkC,KAEAoqJ,EAAAvzG,WAAAhtC,KAAA,WACAtK,EAAA,kBAAiB8kC,EAAAt9B,SAAA,IACjBJ,KAAA,UAAApH,EAAAS,MAAA2G,KAAA,eACAwe,SAAAklI,MAIA9B,mBAAA,SAAAvzI,GACA,IAAA3X,EAAA0P,EAAAu9I,EAAAC,EAAAC,EAAAC,EAAA9lF,EAAA+lF,EACAvB,EAAArpF,EACA6qF,EAAA,KACAC,EAAA,KAGA,IAAAvtJ,EAAA2C,KAAA+nJ,WAAA5nJ,OAAA,EAAuC9C,GAAA,EAAQA,IAG/C,IAAAkC,EAAA0W,SAAAjW,KAAA4kJ,YAAA,GAAA5kJ,KAAA+nJ,WAAA1qJ,GAAAya,QAAA,IAIA,GAAA9X,KAAAykJ,gBAAAzkJ,KAAA+nJ,WAAA1qJ,GAAAqnJ,gBAAA,CAGA,GAAAiG,GACAprJ,EAAA0W,SACAjW,KAAA+nJ,WAAA1qJ,GAAAya,QAAA,GACA6yI,EAAA7yI,QAAA,IACA,SAGA6yI,EAAA3qJ,KAAA+nJ,WAAA1qJ,GACAutJ,EAAAvtJ,OAKA2C,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAAkC,OACA5mJ,KAAA+nJ,WAAA1qJ,GAAAukB,SAAA,MAAA5M,EAAAhV,KAAAgjJ,QAAAhjJ,OACAA,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAAkC,KAAA,GAOA,GAAA+D,EAKA,OAAA3qJ,KAAA+nJ,WAAA5nJ,OACAH,KAAA+nJ,WAAA6C,GAAAlG,eAAAkC,OACA5mJ,KAAA+nJ,WAAA6C,GAAAhpI,SAAA,OAAA5M,EAAAhV,KAAAgjJ,QAAAhjJ,OACAA,KAAA+nJ,WAAA6C,GAAAlG,eAAAkC,KAAA,OAEG,CAWH,IAPA0D,EAAA,IACAC,EAAA,KACApB,EAAAwB,EAAAxB,UAAAnpJ,KAAA+mJ,YAAA/mJ,KAAA4kJ,aACA4F,EAAArB,EAAA,aACAsB,EAAAtB,EAAA,iBACArpF,EAAAqpF,EAAA,gBAEAp8I,EAAA/M,KAAAggD,MAAA7/C,OAAA,EAAmC4M,GAAA,EAAQA,IAC3CxN,EAAA0W,SACAjW,KAAA+nJ,WAAA6C,GAAA9yI,QAAA,GAAA9X,KAAAggD,MAAAjzC,GAAA6W,KAAA,KAIA5jB,KAAAggD,MAAAjzC,GAAA6W,KAAA,KAAA5jB,KAAA4kJ,YAAA,KAIAjgF,EAAA3kE,KAAAggD,MAAAjzC,GAAA6W,KAAA4R,SAAAg1H,GACAE,GAAA,EACA11I,EAAA8qD,GAAA6E,EAAA3kE,KAAAggD,MAAAjzC,GAAA09I,GAAA,IACAC,GAAA,GAGAl9I,KAAAioC,IAAAzgC,EAAA8qD,GAAA6E,GAAA2lF,IACAA,EAAA98I,KAAAioC,IAAAzgC,EAAA8qD,GAAA6E,GACA4lF,EAAAvqJ,KAAAggD,MAAAjzC,GACA/M,KAAAooJ,UAAAsC,EAAA,cAKA,IAAAH,IAAAvqJ,KAAA0D,QAAA0iJ,YACA,OAGA,GAAApmJ,KAAAunJ,mBAAAvnJ,KAAA+nJ,WAAA6C,GAKA,YAJA5qJ,KAAAunJ,iBAAA7C,eAAAkC,OACA5mJ,KAAA+nJ,WAAA6C,GAAAhpI,SAAA,OAAA5M,EAAAhV,KAAAgjJ,WACAhjJ,KAAAunJ,iBAAA7C,eAAAkC,KAAA,IAKA2D,EACAvqJ,KAAAsoJ,WAAAtzI,EAAAu1I,EAAA,SACAvqJ,KAAAsoJ,WAAAtzI,EAAA,KAAAhV,KAAA+nJ,WAAA6C,GAAA9yI,SAAA,GACA9X,KAAA4hB,SAAA,SAAA5M,EAAAhV,KAAAgjJ,WACAhjJ,KAAA+nJ,WAAA6C,GAAAhpI,SAAA,SAAA5M,EAAAhV,KAAAgjJ,QAAAhjJ,OACAA,KAAAunJ,iBAAAvnJ,KAAA+nJ,WAAA6C,GAGA5qJ,KAAA0D,QAAAurB,YAAAxV,OAAAzZ,KAAAunJ,iBAAAvnJ,KAAAivB,aAEAjvB,KAAA+nJ,WAAA6C,GAAAhpI,SAAA,OAAA5M,EAAAhV,KAAAgjJ,QAAAhjJ,OACAA,KAAA+nJ,WAAA6C,GAAAlG,eAAAkC,KAAA,IAKApF,cAAA,SAAAxsI,GAEA,IAAAlX,EAAAkC,KAAA0D,QACAu3I,EAAA17I,EAAAgL,WAAAzM,EAAAm9I,QACA17I,EAAAzB,EAAAm9I,OAAAz6I,MAAAR,KAAA8X,QAAA,IAAA9C,EAAAhV,KAAA4kJ,eACA,UAAA9mJ,EAAAm9I,OAAAj7I,KAAA4kJ,YAAA51I,QAAAhP,KAAA4kJ,YA0BA,OAvBA3J,EAAAr1F,QAAA,QAAAzlD,QACAZ,EAAA,WAAAzB,EAAAqnB,SACArnB,EAAAqnB,SACAnlB,KAAA4kJ,YAAA,GAAArkI,YAAA,GAAA6W,YAAA6jH,EAAA,IAGAA,EAAA,KAAAj7I,KAAA4kJ,YAAA,KACA5kJ,KAAAskJ,YACAvgI,MAAA/jB,KAAA4kJ,YAAA,GAAA3nI,MAAA8G,MACAzD,OAAAtgB,KAAA4kJ,YAAA,GAAA3nI,MAAAqD,OACA4O,SAAAlvB,KAAA4kJ,YAAAr8I,IAAA,YACAqY,IAAA5gB,KAAA4kJ,YAAAr8I,IAAA,OACAwjB,KAAA/rB,KAAA4kJ,YAAAr8I,IAAA,UAIA0yI,EAAA,GAAAh+H,MAAA8G,QAAAjmB,EAAAwoJ,iBACArL,EAAAl3H,MAAA/jB,KAAA4kJ,YAAA7gI,SAEAk3H,EAAA,GAAAh+H,MAAAqD,SAAAxiB,EAAAwoJ,iBACArL,EAAA36H,OAAAtgB,KAAA4kJ,YAAAtkI,UAGA26H,GAIAmH,wBAAA,SAAAh8I,GACA,iBAAAA,IACAA,IAAAhC,MAAA,MAEA7E,EAAA0T,QAAA7M,KACAA,GAAU2lB,MAAA3lB,EAAA,GAAAwa,KAAAxa,EAAA,QAEV,SAAAA,IACApG,KAAAw1B,OAAAwG,MAAAjQ,KAAA3lB,EAAA2lB,KAAA/rB,KAAA0iJ,QAAA32H,MAEA,UAAA3lB,IACApG,KAAAw1B,OAAAwG,MAAAjQ,KAAA/rB,KAAAqjJ,kBAAAt/H,MAAA3d,EAAA4lB,MAAAhsB,KAAA0iJ,QAAA32H,MAEA,QAAA3lB,IACApG,KAAAw1B,OAAAwG,MAAApb,IAAAxa,EAAAwa,IAAA5gB,KAAA0iJ,QAAA9hI,KAEA,WAAAxa,IACApG,KAAAw1B,OAAAwG,MAAApb,IAAA5gB,KAAAqjJ,kBAAA/iI,OAAAla,EAAA+pC,OAAAnwC,KAAA0iJ,QAAA9hI,MAIA+hI,iBAAA,WAGA3iJ,KAAAw+D,aAAAx+D,KAAAi7I,OAAAz8E,eACA,IAAA+kF,EAAAvjJ,KAAAw+D,aAAAhpC,SAuBA,MAdA,aAAAx1B,KAAA4hJ,aAAA5hJ,KAAA0wD,aAAA,KAAA1wD,KAAA+G,SAAA,IACAxH,EAAA0W,SAAAjW,KAAA0wD,aAAA,GAAA1wD,KAAAw+D,aAAA,MACA+kF,EAAAx3H,MAAA/rB,KAAA0wD,aAAAoQ,aACAyiF,EAAA3iI,KAAA5gB,KAAA0wD,aAAAmQ,cAKA7gE,KAAAw+D,aAAA,KAAAx+D,KAAA+G,SAAA,GAAAqW,MACApd,KAAAw+D,aAAA,GAAA/mD,SACA,SAAAzX,KAAAw+D,aAAA,GAAA/mD,QAAAmI,eAAArgB,EAAAuJ,GAAAksC,MACAuuG,GAAS3iI,IAAA,EAAAmL,KAAA,KAITnL,IAAA2iI,EAAA3iI,KAAAiG,SAAA7mB,KAAAw+D,aAAAj2D,IAAA,0BACAwjB,KAAAw3H,EAAAx3H,MAAAlF,SAAA7mB,KAAAw+D,aAAAj2D,IAAA,6BAKAs6I,mBAAA,WAEA,gBAAA7iJ,KAAA4hJ,YAAA,CACA,IAAAziJ,EAAAa,KAAA4kJ,YAAA11H,WACA,OACAtO,IAAAzhB,EAAAyhB,KAAAiG,SAAA7mB,KAAAi7I,OAAA1yI,IAAA,eACAvI,KAAA0wD,aAAAmQ,YACA90C,KAAA5sB,EAAA4sB,MAAAlF,SAAA7mB,KAAAi7I,OAAA1yI,IAAA,gBACAvI,KAAA0wD,aAAAoQ,cAGA,OAAWlgD,IAAA,EAAAmL,KAAA,IAKX41H,cAAA,WACA3hJ,KAAA0iJ,SACA32H,KAAAlF,SAAA7mB,KAAA4kJ,YAAAr8I,IAAA,qBACAqY,IAAAiG,SAAA7mB,KAAA4kJ,YAAAr8I,IAAA,sBAIAk5I,wBAAA,WACAzhJ,KAAAqjJ,mBACAt/H,MAAA/jB,KAAAi7I,OAAA3sF,aACAhuC,OAAAtgB,KAAAi7I,OAAA7uE,gBAIAi2E,gBAAA,WAEA,IAAA15H,EAAAm7H,EAAA8C,EACA9oJ,EAAAkC,KAAA0D,QACA,WAAA5F,EAAA89I,cACA99I,EAAA89I,YAAA57I,KAAAi7I,OAAA,GAAA16H,YAEA,aAAAziB,EAAA89I,aAAA,WAAA99I,EAAA89I,cACA57I,KAAA47I,aACA,EAAA57I,KAAAw1B,OAAAotH,SAAA72H,KAAA/rB,KAAAw1B,OAAA5W,OAAAmN,KACA,EAAA/rB,KAAAw1B,OAAAotH,SAAAhiI,IAAA5gB,KAAAw1B,OAAA5W,OAAAgC,IACA,aAAA9iB,EAAA89I,YACA57I,KAAA+G,SAAAgd,QACA/jB,KAAAhD,OAAA+mB,QAAA/jB,KAAAqjJ,kBAAAt/H,MAAA/jB,KAAA0iJ,QAAA32H,MACA,aAAAjuB,EAAA89I,YACA57I,KAAA+G,SAAAuZ,UAAAvZ,SAAAqW,KAAAmD,WAAA+sF,aACAttG,KAAAhD,OAAAsjB,UAAAtgB,KAAA+G,SAAA,GAAAqW,KAAAmD,WAAA+sF,cACAttG,KAAAqjJ,kBAAA/iI,OAAAtgB,KAAA0iJ,QAAA9hI,MAIA,6BAAArV,KAAAzN,EAAA89I,eACAjzH,EAAAppB,EAAAzB,EAAA89I,aAAA,GACAkI,EAAAvkJ,EAAAzB,EAAA89I,aAAApmH,SACAoxH,EAAA,WAAArnJ,EAAAopB,GAAApgB,IAAA,YAEAvI,KAAA47I,aACAkI,EAAA/3H,MAAAlF,SAAAtnB,EAAAopB,GAAApgB,IAAA,4BACAse,SAAAtnB,EAAAopB,GAAApgB,IAAA,uBAAAvI,KAAA0iJ,QAAA32H,KACA+3H,EAAAljI,KAAAiG,SAAAtnB,EAAAopB,GAAApgB,IAAA,2BACAse,SAAAtnB,EAAAopB,GAAApgB,IAAA,sBAAAvI,KAAA0iJ,QAAA9hI,IACAkjI,EAAA/3H,MAAA66H,EAAAp5I,KAAAC,IAAAkb,EAAAg7H,YAAAh7H,EAAAw4C,aAAAx4C,EAAAw4C,cACAt6C,SAAAtnB,EAAAopB,GAAApgB,IAAA,4BACAse,SAAAtnB,EAAAopB,GAAApgB,IAAA,wBACAvI,KAAAqjJ,kBAAAt/H,MAAA/jB,KAAA0iJ,QAAA32H,KACA+3H,EAAAljI,KAAAgmI,EAAAp5I,KAAAC,IAAAkb,EAAA2kF,aAAA3kF,EAAA04C,cAAA14C,EAAA04C,eACAx6C,SAAAtnB,EAAAopB,GAAApgB,IAAA,2BACAse,SAAAtnB,EAAAopB,GAAApgB,IAAA,yBACAvI,KAAAqjJ,kBAAA/iI,OAAAtgB,KAAA0iJ,QAAA9hI,OAMAmiI,mBAAA,SAAAplJ,EAAA60E,GAEAA,IACAA,EAAAxyE,KAAAkvB,UAEA,IAAA00H,EAAA,aAAAjmJ,EAAA,KACAs0G,EAAA,aAAAjyG,KAAA4hJ,aACA5hJ,KAAA0wD,aAAA,KAAA1wD,KAAA+G,SAAA,IACAxH,EAAA0W,SAAAjW,KAAA0wD,aAAA,GAAA1wD,KAAAw+D,aAAA,IAEAx+D,KAAA0wD,aADA1wD,KAAAw+D,aAEAglF,EAAA,eAAAj4I,KAAA0mG,EAAA,GAAAx6F,SAEA,OACAmJ,IAGA4xD,EAAA5xD,IAGA5gB,KAAAw1B,OAAAotH,SAAAhiI,IAAAgjI,EAGA5jJ,KAAAw1B,OAAA5W,OAAAgC,IAAAgjI,GACA,UAAA5jJ,KAAA4hJ,aACA5hJ,KAAA0wD,aAAAmQ,YACA2iF,EAAA,EAAAvxC,EAAApxC,aAAA+iF,EAEA73H,KAGAymD,EAAAzmD,KAGA/rB,KAAAw1B,OAAAotH,SAAA72H,KAAA63H,EAGA5jJ,KAAAw1B,OAAA5W,OAAAmN,KAAA63H,GACA,UAAA5jJ,KAAA4hJ,aACA5hJ,KAAA0wD,aAAAoQ,aAAA0iF,EAAA,EACAvxC,EAAAnxC,cAAA8iF,IAMA3B,kBAAA,SAAAjtI,GAEA,IAAA4L,EAAAmL,EACAjuB,EAAAkC,KAAA0D,QACAgyC,EAAA1gC,EAAA0gC,MACAC,EAAA3gC,EAAA2gC,MACAs8D,EAAA,aAAAjyG,KAAA4hJ,aACA5hJ,KAAA0wD,aAAA,KAAA1wD,KAAA+G,SAAA,IACAxH,EAAA0W,SAAAjW,KAAA0wD,aAAA,GAAA1wD,KAAAw+D,aAAA,IAEAx+D,KAAA0wD,aADA1wD,KAAAw+D,aAEAglF,EAAA,eAAAj4I,KAAA0mG,EAAA,GAAAx6F,SAyDA,MAnDA,aAAAzX,KAAA4hJ,aAAA5hJ,KAAA0wD,aAAA,KAAA1wD,KAAA+G,SAAA,IACA/G,KAAA0wD,aAAA,KAAA1wD,KAAAw+D,aAAA,KACAx+D,KAAAw1B,OAAAotH,SAAA5iJ,KAAA6iJ,sBAQA7iJ,KAAAgiJ,mBAEAhiJ,KAAA47I,cACA5mI,EAAA0gC,MAAA11C,KAAAw1B,OAAAwG,MAAAjQ,KAAA/rB,KAAA47I,YAAA,KACAlmG,EAAA11C,KAAA47I,YAAA,GAAA57I,KAAAw1B,OAAAwG,MAAAjQ,MAEA/W,EAAA2gC,MAAA31C,KAAAw1B,OAAAwG,MAAApb,IAAA5gB,KAAA47I,YAAA,KACAjmG,EAAA31C,KAAA47I,YAAA,GAAA57I,KAAAw1B,OAAAwG,MAAApb,KAEA5L,EAAA0gC,MAAA11C,KAAAw1B,OAAAwG,MAAAjQ,KAAA/rB,KAAA47I,YAAA,KACAlmG,EAAA11C,KAAA47I,YAAA,GAAA57I,KAAAw1B,OAAAwG,MAAAjQ,MAEA/W,EAAA2gC,MAAA31C,KAAAw1B,OAAAwG,MAAApb,IAAA5gB,KAAA47I,YAAA,KACAjmG,EAAA31C,KAAA47I,YAAA,GAAA57I,KAAAw1B,OAAAwG,MAAApb,MAIA9iB,EAAAqiJ,OACAv/H,EAAA5gB,KAAAmiJ,cAAA30I,KAAA47D,OAAAzzB,EAAA31C,KAAAmiJ,eACArkJ,EAAAqiJ,KAAA,IAAAriJ,EAAAqiJ,KAAA,GACAxqG,EAAA31C,KAAA47I,YACAh7H,EAAA5gB,KAAAw1B,OAAAwG,MAAApb,KAAA5gB,KAAA47I,YAAA,IACAh7H,EAAA5gB,KAAAw1B,OAAAwG,MAAApb,KAAA5gB,KAAA47I,YAAA,GACAh7H,EACAA,EAAA5gB,KAAAw1B,OAAAwG,MAAApb,KAAA5gB,KAAA47I,YAAA,GACAh7H,EAAA9iB,EAAAqiJ,KAAA,GAAAv/H,EAAA9iB,EAAAqiJ,KAAA,GACAv/H,EAEAmL,EAAA/rB,KAAAkiJ,cAAA10I,KAAA47D,OAAA1zB,EAAA11C,KAAAkiJ,eACApkJ,EAAAqiJ,KAAA,IAAAriJ,EAAAqiJ,KAAA,GACAzqG,EAAA11C,KAAA47I,YACA7vH,EAAA/rB,KAAAw1B,OAAAwG,MAAAjQ,MAAA/rB,KAAA47I,YAAA,IACA7vH,EAAA/rB,KAAAw1B,OAAAwG,MAAAjQ,MAAA/rB,KAAA47I,YAAA,GACA7vH,EACAA,EAAA/rB,KAAAw1B,OAAAwG,MAAAjQ,MAAA/rB,KAAA47I,YAAA,GACA7vH,EAAAjuB,EAAAqiJ,KAAA,GAAAp0H,EAAAjuB,EAAAqiJ,KAAA,GACAp0H,KAMAnL,IAGA+0B,EAGA31C,KAAAw1B,OAAAwG,MAAApb,IAGA5gB,KAAAw1B,OAAAotH,SAAAhiI,IAGA5gB,KAAAw1B,OAAA5W,OAAAgC,KACA,UAAA5gB,KAAA4hJ,aACA5hJ,KAAA0wD,aAAAmQ,YACA2iF,EAAA,EAAAvxC,EAAApxC,aAEA90C,KAGA2pB,EAGA11C,KAAAw1B,OAAAwG,MAAAjQ,KAGA/rB,KAAAw1B,OAAAotH,SAAA72H,KAGA/rB,KAAAw1B,OAAA5W,OAAAmN,MACA,UAAA/rB,KAAA4hJ,aACA5hJ,KAAA0wD,aAAAoQ,aACA0iF,EAAA,EAAAvxC,EAAAnxC,gBAMAwnF,WAAA,SAAAtzI,EAAA3X,EAAA+oB,EAAAykI,GAEAzkI,IAAA,GAAAgR,YAAAp3B,KAAAivB,YAAA,IACA5xB,EAAAumB,KAAA,GAAArD,WAAAjD,aAAAtd,KAAAivB,YAAA,GACA,SAAAjvB,KAAAooJ,UAAA/qJ,EAAAumB,KAAA,GAAAvmB,EAAAumB,KAAA,GAAA8T,aAQA13B,KAAAy5C,QAAAz5C,KAAAy5C,UAAAz5C,KAAAy5C,QAAA,EACA,IAAAA,EAAAz5C,KAAAy5C,QAEAz5C,KAAAmmC,OAAA,WACAsT,IAAAz5C,KAAAy5C,SAGAz5C,KAAAqgJ,kBAAAwK,MAMAvI,OAAA,SAAAttI,EAAA8tI,GAEA9iJ,KAAAknJ,WAAA,EAIA,IAAA7pJ,EACAytJ,KAUA,IALA9qJ,KAAAyoJ,cAAAzoJ,KAAA4kJ,YAAAhmI,SAAAze,QACAH,KAAAivB,YAAA2B,OAAA5wB,KAAA4kJ,aAEA5kJ,KAAAyoJ,aAAA,KAEAzoJ,KAAAi7I,OAAA,KAAAj7I,KAAA4kJ,YAAA,IACA,IAAAvnJ,KAAA2C,KAAAskJ,WACA,SAAAtkJ,KAAAskJ,WAAAjnJ,IAAA,WAAA2C,KAAAskJ,WAAAjnJ,KACA2C,KAAAskJ,WAAAjnJ,GAAA,IAGA2C,KAAA4kJ,YAAAr8I,IAAAvI,KAAAskJ,YACAtkJ,KAAAukC,aAAAvkC,KAAA4kJ,YAAA,2BAEA5kJ,KAAA4kJ,YAAA5gI,OAwCA,SAAA+mI,EAAApyI,EAAArO,EAAA+tB,GACA,gBAAArjB,GACAqjB,EAAAzW,SAAAjJ,EAAA3D,EAAA1K,EAAA04I,QAAA14I,KAGA,IA1CAtK,KAAA6kJ,cAAA/B,GACAgI,EAAAvmJ,KAAA,SAAAyQ,GACAhV,KAAA4hB,SAAA,UAAA5M,EAAAhV,KAAAgjJ,QAAAhjJ,KAAA6kJ,iBAGA7kJ,KAAA6kJ,aACA7kJ,KAAAwnJ,YAAA73I,OACA3P,KAAA4kJ,YAAAj1I,OAAA41B,IAAA,2BACAvlC,KAAAwnJ,YAAA5oI,SAAA5e,KAAA4kJ,YAAAhmI,SAAA,IAAAkkI,GAGAgI,EAAAvmJ,KAAA,SAAAyQ,GACAhV,KAAA4hB,SAAA,SAAA5M,EAAAhV,KAAAgjJ,aAMAhjJ,YAAAunJ,mBACAzE,IACAgI,EAAAvmJ,KAAA,SAAAyQ,GACAhV,KAAA4hB,SAAA,SAAA5M,EAAAhV,KAAAgjJ,aAEA8H,EAAAvmJ,KAAA,SAAA7G,GACA,gBAAAsX,GACAtX,EAAAkkB,SAAA,UAAA5M,EAAAhV,KAAAgjJ,QAAAhjJ,SAEKxC,KAAAwC,UAAAunJ,mBACLuD,EAAAvmJ,KAAA,SAAA7G,GACA,gBAAAsX,GACAtX,EAAAkkB,SAAA,SAAA5M,EAAAhV,KAAAgjJ,QAAAhjJ,SAEKxC,KAAAwC,UAAAunJ,qBAULlqJ,EAAA2C,KAAA+nJ,WAAA5nJ,OAAA,EAAuC9C,GAAA,EAAQA,IAC/CylJ,GACAgI,EAAAvmJ,KAAAwmJ,EAAA,aAAA/qJ,UAAA+nJ,WAAA1qJ,KAEA2C,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAAkC,OACAkE,EAAAvmJ,KAAAwmJ,EAAA,MAAA/qJ,UAAA+nJ,WAAA1qJ,KACA2C,KAAA+nJ,WAAA1qJ,GAAAqnJ,eAAAkC,KAAA,GAiCA,GA5BA5mJ,KAAA0nJ,eACA1nJ,KAAA+G,SAAAyO,KAAA,QAAAjN,IAAA,SAAAvI,KAAA0nJ,cACA1nJ,KAAA2nJ,iBAAAp1I,UAEAvS,KAAA4nJ,gBACA5nJ,KAAAi7I,OAAA1yI,IAAA,UAAAvI,KAAA4nJ,gBAEA5nJ,KAAA6nJ,eACA7nJ,KAAAi7I,OAAA1yI,IAAA,kBAAAvI,KAAA6nJ,cAAA,GAAA7nJ,KAAA6nJ,eAGA7nJ,KAAAgoJ,UAAA,EAEAlF,GACA9iJ,KAAA4hB,SAAA,aAAA5M,EAAAhV,KAAAgjJ,WAKAhjJ,KAAAivB,YAAA,GAAA1O,WAAAnC,YAAApe,KAAAivB,YAAA,IAEAjvB,KAAA+jJ,sBACA/jJ,KAAAi7I,OAAA,KAAAj7I,KAAA4kJ,YAAA,IACA5kJ,KAAAi7I,OAAA1oI,SAEAvS,KAAAi7I,OAAA,OAGA6H,EAAA,CACA,IAAAzlJ,EAAA,EAAeA,EAAAytJ,EAAA3qJ,OAA4B9C,IAG3CytJ,EAAAztJ,GAAAG,KAAAwC,KAAAgV,GAEAhV,KAAA4hB,SAAA,OAAA5M,EAAAhV,KAAAgjJ,WAIA,OADAhjJ,KAAA6kJ,aAAA,GACA7kJ,KAAA+jJ,qBAIAniI,SAAA,YACA,IAAAriB,EAAAyiC,OAAA/iC,UAAA2iB,SAAAphB,MAAAR,KAAAE,YACAF,KAAAkwB,UAIA8yH,QAAA,SAAAgI,GACA,IAAA75F,EAAA65F,GAAAhrJ,KACA,OACAi7I,OAAA9pF,EAAA8pF,OACAhsH,YAAAkiC,EAAAliC,aAAA1vB,MACA2vB,SAAAiiC,EAAAjiC,SACA8yH,iBAAA7wF,EAAA6wF,iBACAxsH,OAAA27B,EAAA2wF,YACAl+H,KAAAutC,EAAAyzF,YACAqG,OAAAD,IAAAlzI,QAAA,WA/+CYpP,EAAAlI,MAAA7D,EAAAgM,GAAAD,KAAA9L,EAAAD,QAAAiM,kFC5BZ,wDAAAzL,EAAA,eACegM,UAASkO,wGCDxB,wDAAAla,EAAA,eACegM,UAASkO,wGCDxB,wDAAAla,EAAA,eACegM,UAASkO,4TCDxBla,EAAA,IACAA,EAAA,KACA,QAAAA,EAAA,SACAA,EAAA,SACAA,EAAA,SACAA,EAAA,SACAA,EAAA,IACAqhD,EAAArhD,EAAA,uDAEA,IAAI+tJ,GAAsE,IAA1D78G,UAAUC,UAAU1uB,cAActb,QAAQ,qBAM3C6E,UAASkO,KAAK9R,QACzBkS,QAAS,KAGTtM,QACIm7B,QAAW,SACXtK,MAAS,SACTmvH,MAAS,qBAObv8I,WAAY,SAAUlL,GAAS,IAAAunE,EAAAjrE,KAC3BA,KAAK0X,KAAM,EAAAwK,EAAAvhB,SAAEX,KAAKgI,IAGlBhI,KAAK6yD,OAAS1nD,UACdnL,KAAKg2C,WAAaA,UAClBh2C,KAAKi6I,SAAWA,UAChBj6I,KAAK8pH,QAAUpmH,EAAQomH,QACvB9pH,KAAKg8I,YAAct4I,EAAQs4I,YAC3Bh8I,KAAK+6I,aAAer3I,EAAQq3I,aAG5B/6I,KAAKmL,OAAO,UAAYnL,KAAKg2C,WAAWjO,QAAU,UAClD/nC,KAAKiY,iBAEDvU,EAAQ27I,aACRr/I,KAAKq/I,cAAe,GAEpBr/I,KAAKorJ,YAAc1nJ,EAAQkH,MAC3B5K,KAAK4K,MAAQ,IAAI5K,KAAKorJ,aAG1BprJ,KAAKo8I,mBAAqB14I,EAAQ04I,mBAClCp8I,KACKwL,GAAGxL,KAAK6yD,OAAO9qB,OAAQ,kBAAMkjC,EAAK1nC,UAAW,IAC7C/3B,GAAGxL,KAAK6yD,OAAO9pB,KAAM,SAACu2G,GAAD,OAAmBr0E,EAAK1nC,UAAa0nC,EAAK4vE,OAAOyE,KACtE9zI,GAAGxL,KAAK6yD,OAAOhqB,MAAO,SAACjrC,GAAD,OAAUqtE,EAAK3uC,MAAM1+B,KAC3C4N,GAAGxL,KAAK6yD,OAAO/pB,KAAM,WAClBmiC,EAAKvzD,IAAIynC,YAAY8rB,EAAKj1B,WAAWrO,SACrCsjC,EAAKluC,YAERvxB,GAAGxL,KAAK6yD,OAAOvpB,eAAgB,kBAAM2hC,EAAKogF,mBAC1C7/I,GAAGxL,KAAK6yD,OAAOtpB,gBAAiB,kBAAM0hC,EAAKqgF,qBAQpDC,sBAAuB,SAAUzyI,GAC7B,OAAuB,IAAnBA,EAAK0lI,WACE,EAAAt8H,EAAAvhB,SAAE,yBACJ8iB,SAAS,QACT9c,MACG/I,KAAMkb,EAAKlb,KACXU,MAAOwa,EAAKxa,MACZktJ,aAAc1yI,EAAK2yI,YAEpB3yI,EAAKxa,MACLyI,SAASyzB,eAAe1hB,EAAKxa,YADjC,GASXotJ,iBAAkB,WACd,MAAO,gBAAkB1rJ,KAAKg2C,WAAW9N,YAAc,kBAQ3DyjH,kBAAmB,SAAUzlJ,GACP,KAAdA,EAAE/E,SACFnB,KAAKuN,QAAQvN,KAAK6yD,OAAO9qB,SAWjC6jH,QAAS,SAAU1lJ,GAGf,OAFAlG,KAAKuN,QAAQvN,KAAK6yD,OAAO9qB,QACzB7hC,EAAEoiB,iBACKtoB,MAQXqrJ,eAAgB,WAMZ,OALArrJ,KAAK6rJ,YAAa,EAClB7rJ,KAAKs9I,cACAvgH,UACA9kB,mBAEEjY,MAQXsrJ,gBAAiB,WAMb,OALAtrJ,KAAK6rJ,YAAa,EAClB7rJ,KAAKk9I,cACAlgH,SACA/kB,eAAejY,KAAKmL,QAElBnL,MAUX8rJ,OAAQ,SAAU5lJ,GAId,OAHKlG,KAAKsuE,YACNtuE,KAAKuN,QAAQvN,KAAK6yD,OAAOhqB,MAAO3iC,EAAEsiB,OAAO5qB,MAEtCoC,MASXsuE,SAAU,WACN,OAAOtuE,KAAK0X,IAAIsuB,SAAShmC,KAAKg2C,WAAWrO,UAU7CrL,MAAO,SAAU1+B,GACb,IAAImuJ,EACAC,EAoBJ,OAlBAhsJ,KAAKg9B,SAGD+uH,EADAnuJ,EACSoC,KAAK0X,IAAIlC,KAAKxV,KAAKo8I,mBAAmBx+I,IAKzB,KAFtBouJ,EAAShsJ,KAAK0X,IAAIlC,KAAKxV,KAAKg2C,WAAW3N,MAAQ,WAEpCloC,OACEH,KAAK0X,IAAIlC,KAAK,qBAEdw2I,EAAOptI,SAASpJ,KAAK,UAItCxV,KAAK0X,IAAI+L,SAASzjB,KAAKg2C,WAAWrO,SAClCokH,EAAOzvH,QAAQ/uB,QAAQ,UAEhBvN,MAQX+8B,QAAS,WACL,IAAIkvH,EACAC,EAqBJ,OAjBIhB,IACAgB,EAAUlsJ,KAAK0X,IAAIlC,KAAK,YAEZrV,SACR8rJ,GAAqB,EAAA/pI,EAAAvhB,SAAE,+BAAiCX,KAAKg2C,WAAWlO,OAAS,QAC5ErkB,SAASyoI,EAAQvlJ,KAAK,UACtBJ,IAAI2lJ,EAAQ3lJ,OACZuS,KAAK9Y,KAAKi6I,SAASrkG,eAAgBs2G,GAExCA,EAAQ90C,YAAY60C,IAI5BjsJ,KAAK0X,IAAI+L,SAASzjB,KAAKg2C,WAAWnO,UAC7BryB,KAAK,WACL7O,KAAK,WAAY,YAEf3G,MAQXg9B,OAAQ,WACJ,IAAImvH,EACAD,EAiBJ,OAbIhB,IAEAgB,GADAC,EAAqBnsJ,KAAK0X,IAAIlC,KAAKxV,KAAKg2C,WAAWlO,SACtBhvB,KAAK9Y,KAAKi6I,SAASrkG,kBAEjCu2G,EAAmBhsJ,QAC9BgsJ,EAAmB/0C,YAAY80C,GAIvClsJ,KAAK0X,IAAIynC,YAAYn/C,KAAKg2C,WAAWnO,UAChCryB,KAAK,WACLivB,WAAW,YAETzkC,MAQXs9I,YAAa,WAET,OADA,EAAA9+F,EAAA1I,qBAAoB91C,KAAK0X,KAClB1X,MAQXk9I,YAAa,WAET,OADA,EAAA1+F,EAAArI,qBAAoBn2C,KAAK0X,KAClB1X,MAQXo/I,WAAY,WACR,QAASp/I,KAAKosJ,gBAAgBpsJ,KAAKqsJ,oBASvCA,gBAAiB,WACb,IAAI30I,EAAM1X,KAAK0X,IACf,OAAOA,EAAI20I,gBACP30I,EAAI20I,kBACJ30I,EAAIwlG,aAGZkvC,gBAAiB,SAAUhsJ,GACvB,OAAOJ,KAAK4K,MAAMqF,kBAAkB7P,IAUxCy6I,OAAQ,SAAUyE,GACd,IACI5tI,EADApH,EAAWtK,KAQf,GAJI+G,SAAS01B,gBAAkBz/B,SAC3B,EAAAklB,EAAAvhB,SAAEoG,SAAS01B,eAAeF,OAG1Bv8B,KAAKq/I,cAGL,KAFA3tI,EAAS1R,KAAKosJ,gBAAgBpsJ,KAAKqsJ,oBAG/B,OAAO/hJ,EAASiD,QAAQjD,EAASuoD,OAAO9qB,aAG5C/nC,KAAK4K,MAAMkF,QACX4B,EAAS1R,KAAKosJ,gBAAgBpsJ,KAAKqsJ,mBAmCvC,OAhCArsJ,KAAKuN,QAAQvN,KAAK6yD,OAAOvpB,gBAIzBtpC,KAAK4K,MAAMgG,KAAKc,GACZlB,QAAS,WACDlG,EAAS+0I,aACT/0I,EAASiD,QAAQjD,EAASuoD,OAAOjqB,QAASt+B,EAASM,MAAO00I,IAE1Dh1I,EAASiD,QAAQjD,EAASuoD,OAAOlqB,QAASr+B,EAASM,MAAMmE,UAEzDzE,EAASM,MAAQ,IAAIN,EAAS8gJ,YAE9B9gJ,EAASqN,QAAQ6kI,UAAY9qI,YAC7BpH,EAASiD,QAAQjD,EAASuoD,OAAOhqB,QAGrCv+B,EAASiD,QAAQjD,EAASuoD,OAAOtpB,kBAGrCroC,MAAO,SAAU0J,EAAOkO,EAAM7H,GACP,MAAfA,EAAI4uC,SACJv1C,EAASgiJ,aAAaxzI,EAAK0jI,QAC3BlyI,EAASiD,QAAQjD,EAASuoD,OAAOxpB,iBAAkBvwB,EAAK0jI,SAG5DlyI,EAASiD,QAAQjD,EAASuoD,OAAOtpB,kBAGrCl6B,QAAQ,IAGLrP,MAUXusJ,YAAa,SAAU3uJ,EAAMi/B,GACzB,OAAO,EAAA3a,EAAAvhB,SAAE,WAAWgG,KAAK,aAAc/I,GAAM6lB,SAASzjB,KAAKg2C,WAAW3N,OAAOhT,KAAKwH,IAStFyvH,aAAc,SAAU9P,GACpB,IAAIlyI,EAAWtK,KAYf,OAVAA,KAAKT,EAAE,IAAMS,KAAKg2C,WAAW3N,OAAO91B,SAEhCiqI,GACAj9I,UAAEsK,KAAK2yI,EAAQ,SAAU5+I,EAAMi/B,GAC3BvyB,EAASoN,IAAIlC,KAAK,UAAY5X,EAAO,MAChCupB,QAAQ,MACR8uB,OAAO3rC,EAASiiJ,YAAY3uJ,EAAMi/B,MAIxC78B,MAUX2X,OAAQ,SAAW60I,GACf,IAAIliJ,EAAWtK,KA2Df,OAzDAA,KAAK0X,IAAI46F,QAELtyG,KAAK+6I,eACL,EAAA74H,EAAAvhB,SAAE,eAAiBX,KAAKg2C,WAAW7N,MAAQ,QAAQ8N,OAAOj2C,KAAK0rJ,oBAAoBvmI,SAAS7a,EAASoN,KAGzGnY,UAAEsK,KAAK7J,KAAK8pH,QAAS,SAAUzsH,EAAG0vH,GAC9B,IAAI0/B,EACAz8B,EACA1xH,EAAQkuJ,EAAW96I,OAAOq7G,EAAO/gH,IACjC7B,IACCvM,KAAMmvH,EAAO/gH,GAAIy/I,UAAW1+B,EAAO2/B,eAAiB3/B,EAAO2/B,eAAiB3/B,EAAOz8D,OAAQhyD,MAAOA,EAAOkgJ,UAAWzxB,EAAOyxB,WAC5HgO,EAAW96I,OACXpH,EAASM,OAETtM,GACAgM,EAASoN,IAAI/Q,KAAK,QAAUomH,EAAO/gH,GAAI1N,GAKvCmuJ,EAFAniJ,EAAS0xI,aAAejvB,EAAO4/B,WAEpB,IAAI5/B,EAAO4/B,YAClB/hJ,MAAON,EAASM,QACjB+M,OAAOxN,EAAK,IAER4iH,EAAOiyB,SACH,IAAIjyB,EAAOiyB,UAClBp0I,MAAON,EAASM,QACjB+M,OAAOxN,EAAK,IAEJG,EAASihJ,sBAAsB/qJ,MAAM8J,EAAUH,GAG9D6lH,GAAQ,EAAA9tG,EAAAvhB,SAAE,UAEc,iBAApB,IAAO8rJ,EAAP,YAAAjtJ,EAAOitJ,KAAyBA,EAAS9sG,KACzC8sG,EAAS9sG,KAAK,SAAU8sG,GACpBz8B,EAAM/5E,OAAOw2G,KAGjBz8B,EAAM/5E,OAAOw2G,GAGb1/B,EAAO19C,YACP2gD,EAAMvsG,SAASspG,EAAO19C,YAG1B2gD,EAAM7qG,SAAS7a,EAASoN,OAG5B1X,KAAK0X,IACAu+B,OAAOj2C,KAAK4sJ,iBAAiBJ,EAAW/yI,OAAQ+yI,EAAW96I,SAC3D+R,SAASzjB,KAAKg2C,WAAWzO,IAAM,IAAMvnC,KAAKg2C,WAAWhO,UAE1DhoC,KAAKuN,QAAQvN,KAAK6yD,OAAO1pB,OAAQnpC,KAAK0X,IAAK80I,EAAW96I,QACtD1R,KAAK0X,IAAInK,QAAQvN,KAAK6yD,OAAO3pB,mBAAoBlpC,KAAK0X,MAE/C1X,MAQX4sJ,iBAAkB,SAAUnzI,GACxB,IAAIozI,GAAc,EAAA3qI,EAAAvhB,SAAE,8CAoBpB,OAlBI8Y,EACAozI,EAAY52G,QAAO,EAAA/zB,EAAAvhB,SAAE,iEAAiEgG,MAClFmmJ,UAAW9sJ,KAAKm8I,gBAChB79I,MAAOuB,UAAKE,QAAQ,uBAEnBk2C,QAAO,EAAA/zB,EAAAvhB,SAAE,qDACL8iB,SAASzjB,KAAKg2C,WAAWjO,QACzB1S,KAAKx1B,UAAKE,QAAQ,qBAClB4G,MACGmmJ,UAAW9sJ,KAAKk8I,mBAG5B2Q,EAAY52G,QAAO,EAAA/zB,EAAAvhB,SAAE,iEAAiEgG,MAClFmmJ,UAAW9sJ,KAAKm8I,gBAChB79I,MAAOuB,UAAKE,QAAQ,oBAIrB8sJ,EAAYv6I,KAAI,EAAA4P,EAAAvhB,SAAA,cAAgBX,KAAKg2C,WAAW1N,OAAhC,+CCre/BjpC,OAAAqG,GAAA2mJ,gBAAA,WAEA,IAAAvzI,KAyCA,OAvCA9Y,KAAAwV,KAAA,wEAAA3L,KAAA,WAEA,KAAA7J,KAAApC,OAIA,OAAAoC,KAAA1B,QACA0B,KAAA1B,MAAA,IAGAwa,EAAA9Y,KAAApC,MAAAoC,KAAA1B,MAAA4Z,MAAA,kBACA,QAAAlY,KAAA1B,MAAAshB,cAAA5f,KAAA1B,SAGA0B,KAAAwV,KAAA,uBAAA3L,KAAA,WACAiP,EAAA9Y,KAAApC,MAAAoC,KAAA1B,QAGA0B,KAAAwV,KAAA,oBAAA3L,KAAA,WAEA,IAAA8lE,EAAAtwE,OAAAW,MACAuG,EAAAopE,EAAAppE,MAEAopE,EAAA72D,KAAA,UAEAA,EAAA9Y,KAAApC,MADA2I,EACAA,EAAA,GAEA,GAKAuS,EAAA9Y,KAAApC,MADA,OAAA2I,EACAA,OAOAuS,sSCpDA3b,EAAA,IACA48I,EAAA58I,EAAA,IACA4hB,EAAA5hB,EAAA,QACAA,EAAA,SACAA,EAAA,wDAMA,IAAIqiJ,EAAar2I,UAASiF,MAAM7I,QAC5B0J,KAAM,SAAUnF,EAAQc,EAAOlH,GAC3B,IAAI4G,EAAWtK,KACX+sJ,EAAWrpJ,EAAQxC,MASvB,OAPAwC,EAAQxC,MAAQ,SAAU+P,GACtB3G,EAAS0iJ,oBAAoB/7I,EAAKjR,MAC9B+sJ,GACAA,EAASvsJ,MAAMR,KAAME,YAItBiJ,UAAS8F,KAAKzO,MAAM2I,UAAUjJ,YAWzC0Q,KAAM,SAAU7F,EAAYrH,GAGxB,IAEIupJ,EAFA3iJ,EAAWtK,KAGXkB,GALJwC,EAAUA,OAKUxC,MAChBsP,EAAU9M,EAAQ8M,QAItB9M,EAAQxC,MAAQ,SAAU0J,EAAOqG,GAE7B,IAAI6H,EAAOvZ,UAAE69I,UAAUnsI,EAAIosI,cAAgBpsI,EAAI6H,MAG3C5X,GACAA,EAAM1D,KAAK8M,EAAUA,EAAUwO,EAAM7H,IAKzCjR,KAAK+Q,QAGL5H,UAASiF,MAAMnP,UAAU2R,KAAKpT,KAAKwC,KAAM+K,EAAYrH,GAG9CqH,KAMPkiJ,EAAY,IAJJzN,EAAWj6I,QACf6L,IAAKpR,KAAKoR,QAGF,EACRpF,GAAIhM,KAAKgM,MAGH4E,KAAOzH,UAASiF,MAAMnP,UAAU2R,KAE1ClN,EAAQ8M,QAAU,SAAU5F,EAAOqG,GAG/B3G,EAASwF,QAAQ9J,IAAI4E,EAAMmE,UAGvByB,GACAA,EAAQhT,KAAK8M,EAAUA,EAAU2G,IAKzCg8I,EAAUr8I,KAAK7F,EAAYrH,KAgBnCwN,QAAS,SAAUxN,GACfA,EAAUA,MAEV,IAAI4G,EAAWtK,KACXoR,EAAMpR,KAAKoR,MAwBf,OAtBA7R,UAAEia,MACEpI,IAAKA,EACLuH,KAAM,SACNE,SAAU,OACVC,KAAMpV,EAAQoV,SACdC,YAAa,mBACbvI,QANG,SAMKsI,GACAxO,EAASiE,YACTjE,EAASiE,WAAWgE,OAAOjI,GAE3B5G,EAAQ8M,SACR9M,EAAQ8M,QAAQhT,KAAK8M,EAAUwO,IAGvC5X,MAdG,SAcG+P,GACF3G,EAAS0iJ,oBAAoB/7I,EAAKjR,MAC9B0D,EAAQxC,OACRwC,EAAQxC,MAAM1D,KAAK8M,EAAU2G,MAKlCjR,MASXiQ,kBAAmB,SAAUlF,GACzB,IAAI4D,KACAe,EAAU1P,KAAK+O,SA4BnB,GA1BAxP,UAAEsK,KAAKkB,EAAY,SAAUnN,EAAMU,GAE1BoR,EAAQ9R,GAYF8R,EAAQ9R,IAAS8R,EAAQ9R,KAAUU,IAErB,iBAAjB,IAAOA,EAAP,YAAAkB,EAAOlB,MACF,EAAAygB,EAAAnP,SAAQtR,EAAOoR,EAAQ9R,MAI5B+Q,EAAQ/Q,GAAQU,IAlBC,iBAAVA,EACe,KAAlBiB,UAAE0nE,KAAK3oE,KACPqQ,EAAQ/Q,GAAQU,GAEbiB,UAAE0T,QAAQ3U,GACI,IAAjBA,EAAM6B,SACNwO,EAAQ/Q,GAAQU,GAGpBqQ,EAAQ/Q,GAAQU,MAcvB,EAAAygB,EAAA/O,SAAQrB,GAET,OADA3O,KAAKktJ,UAAUv+I,GACRA,GASfu+I,UAAW,SAAUv+I,KAQrBq+I,oBAAqB,SAAU/7I,EAAKk8I,GAChC,IAAIr0I,EACe,MAAf7H,EAAI4uC,SACJ/mC,EAAOvZ,UAAE69I,UAAUnsI,EAAIosI,cAAgBpsI,EAAI6H,OAC3C,EAAAihI,EAAA7oF,mBAAkB/lD,UAAOu9B,aAAc1oC,MAAO8Y,EAAM7H,EAAKk8I,MAUjE58I,MAAO,SAAU7M,GACbA,EAAUA,MAGV1D,KAAK8P,QAGL3G,UAASiF,MAAMnP,UAAUsR,MAAM/S,KAAKwC,KAAM0D,gBAInC87I,qGCpNf,QAAAriJ,EAAA,QACAA,EAAA,QACAA,EAAA,SACAA,EAAA,SACAA,EAAA,SACAA,EAAA,KACAqhD,EAAArhD,EAAA,iEAMegM,UAASkO,KAAK9R,QACzBkS,QAAS,KAETtM,QACIiiJ,mCAAoC,QAGxCx+I,WAAY,SAAUlL,GAAS,IAAAunE,EAAAjrE,KAU3B,GATA0D,EAAUA,MAEV1D,KAAK6yD,OAAS1nD,UACdnL,KAAKg2C,WAAaA,UAClBh2C,KAAKi6I,SAAWA,UAChBj6I,KAAK8pH,QAAUpmH,EAAQomH,QACvB9pH,KAAKw+I,UAAY96I,EAAQ86I,UACzBx+I,KAAKy+I,YAAc/6I,EAAQ+6I,aAEtBz+I,KAAKmL,OAAO,oCACb,MAAM,IAAIpH,MAAM,6JAIpB/D,KAAKkU,MAAQxQ,EAAQwQ,OAAS,EAC9BlU,KAAKs6I,2BAA6B52I,EAAQ42I,2BAC1Ct6I,KAAK+6I,aAAer3I,EAAQq3I,aAC5B/6I,KAAK0X,KAAM,EAAAwK,EAAAvhB,SAAEX,KAAKgI,IAElBhI,KACKwL,GAAGxL,KAAK6yD,OAAO9qB,OAAQ,kBAAMkjC,EAAK1nC,UAAW,IAC7C/3B,GAAGxL,KAAK6yD,OAAOhqB,MAAO,SAAAujB,GAAA,OAAS6e,EAAK3uC,MAAM8vB,KAC1C5gD,GAAGxL,KAAK6yD,OAAO/pB,KAAM,kBAAMmiC,EAAKoiF,YAChC7hJ,GAAGxL,KAAK6yD,OAAO7pB,MAAO,kBAAMiiC,EAAKvzD,IAAI+L,SAASwnD,EAAKj1B,WAAWvO,UAC9Dj8B,GAAGxL,KAAK6yD,OAAO5pB,SAAU,kBAAMgiC,EAAKvzD,IAAIynC,YAAY8rB,EAAKj1B,WAAWvO,WAQ7EikH,iBAAkB,WACd,MAAO,gBAAkB1rJ,KAAKg2C,WAAW9N,YAAc,kBAU3DqjH,sBAAuB,SAAUzyI,GAC7B,GAAIA,EAAKxa,MACL,OAAOyI,SAASyzB,eAAe1hB,EAAKxa,MAAMgrB,aAWlDra,KAAM,SAAUtI,GACZ,IAAI2D,EAAWtK,KAcf,OAZAA,KAAK4K,MAAMsiJ,UAAUvmJ,GACrB3G,KAAKs9I,cACLt9I,KAAK4K,MAAMgG,KAAKjK,GACZ6J,QAAS,WACLlG,EAAS4yI,cAAcvlI,SACvBrN,EAASiD,QAAQjD,EAASuoD,OAAOjqB,UAErC1nC,MAAO,WACHoJ,EAAS4yI,iBAIVl9I,MAQX6f,QAAS,SAAUrP,EAAStP,GACxB,IAAIoJ,EAAWtK,KAkBf,OAhBAA,KAAKs9I,cACLt9I,KAAK4K,MAAM2F,OACPC,QAAS,WACLlG,EAAS4yI,cAAcvlI,SACnBnH,GACAA,EAAQhQ,MAAMR,KAAME,YAG5BgB,MAAO,WACHoJ,EAAS4yI,cACLh8I,GACAA,EAAMV,MAAMR,KAAME,cAKvBF,MAQXsuE,SAAU,WACN,OAAOtuE,KAAK0X,IAAIsuB,SAAShmC,KAAKg2C,WAAWrO,UAQ7CrL,MAAO,WAEH,OADA,EAAApa,EAAAvhB,SAAEX,KAAKgI,IAAIyb,SAASzjB,KAAKg2C,WAAWrO,SAC7B3nC,MAQXqtJ,QAAS,WAEL,OADA,EAAAnrI,EAAAvhB,SAAEX,KAAKgI,IAAIm3C,YAAYn/C,KAAKg2C,WAAWrO,SAChC3nC,MAQXs9I,YAAa,WAET,OADA,EAAA9+F,EAAA1I,qBAAoB91C,KAAK0X,KAClB1X,MAQXk9I,YAAa,WAET,OADA,EAAA1+F,EAAArI,qBAAoBn2C,KAAK0X,KAClB1X,MAQX0+I,KAAM,SAAUx4I,GACZ,IAAIkmD,EAOJ,OALIA,GADA,EAAAlqC,EAAAvhB,SAAEuF,EAAEsiB,QAAQtD,GAAG,IAAMllB,KAAKg2C,WAAW5N,WAC7B,EAAAlmB,EAAAvhB,SAAEuF,EAAEsiB,QAAQ7hB,KAAK,oBAEjB,EAAAub,EAAAvhB,SAAEuF,EAAEsiB,QAAQrB,QAAQ,IAAMnnB,KAAKg2C,WAAW5N,UAAUzhC,KAAK,mBAErE3G,KAAKuN,QAAQvN,KAAK6yD,OAAOnpB,SAAU0iB,GAC5BpsD,MAQX4sJ,iBAAkB,WACd,IAAItiJ,EAAWtK,KACf,IAAyB,IAArBA,KAAKy+I,YACL,OAAO,EAAAv8H,EAAAvhB,SAAE,qCACJ8iB,SAASzjB,KAAKg2C,WAAWn0C,QACzBwzB,KAAKx1B,UAAKE,QAAQ,qBAClByL,GAAG,QAAS,SAAUtF,GACnBA,EAAEoiB,iBACFhe,EAAS4G,aAUzBA,QAAS,WAAY,IAAAo8I,EAAAttJ,KACjB,GAAIA,KAAKs6I,2BAA4B,CACjC,IAAIpnG,EAAUlzC,KAAKs6I,2BAA2Bt6I,KAAK4K,MAAMmE,UACzD,IAAImkC,IAAWA,EAAQoS,KAMnB,MAAM,IAAIvhD,MAAM,wDALhBmvC,EAAQoS,KACJ,kBAAMgoG,EAAK1iJ,MAAMsG,WACjB,mBAMRlR,KAAK4K,MAAMsG,WASnByG,OAAQ,WACJ,IAAIrN,EAAWtK,KACXwsJ,EAAaxsJ,KAAK4K,MAAMmE,SACxBw+I,GAAW,EAAArrI,EAAAvhB,SAAE,8CAA8Cs1C,OAAOj2C,KAAK4sJ,oBAAqBJ,IAC5FgB,GAAgB,EAAAtrI,EAAAvhB,SAAA,cAAgBX,KAAKg2C,WAAW1N,OAAhC,QAkEpB,OAhEAtoC,KAAK0X,IACAynC,YAAYn/C,KAAKg2C,WAAWnO,SAAW,IAAM7nC,KAAKg2C,WAAWrO,QAAU,IAAM3nC,KAAKg2C,WAAWhO,UAC7FvkB,SAASzjB,KAAKg2C,WAAWxO,WACzB8qE,QAGDtyG,KAAK+6I,eACL,EAAA74H,EAAAvhB,SAAE,eAAiBX,KAAKg2C,WAAW7N,MAAQ,QAAQ8N,OAAOj2C,KAAK0rJ,oBAAoBvmI,SAAS7a,EAASoN,KAGzG1X,KAAK0X,IAAI/Q,KAAK,UAAW3G,KAAK4K,MAAMoB,IAEpCzM,UAAEsK,KAAK7J,KAAK8pH,QAAS,SAAUzsH,EAAG0vH,GAC9B,IAAI0/B,EACAz8B,GAAQ,EAAA9tG,EAAAvhB,SAAE,UACVrC,EAAQkuJ,EAAWz/B,EAAO/gH,IAC1ByhJ,EAAY1gC,EAAO0gC,WAAa1gC,EAAO/gH,GACvC7B,IAASvM,KAAM6vJ,EAAWnvJ,MAAOA,EAAOkgJ,UAAWzxB,EAAOyxB,WAAYgO,EAAYliJ,EAASM,OAc/F,GAZItM,GACAgM,EAASoN,IAAI/Q,KAAK,QAAUomH,EAAO/gH,GAAI1N,GAIvCmuJ,EADA1/B,EAAO2gC,SACI,IAAI3gC,EAAO2gC,UAClB9iJ,MAAON,EAASM,QACjB+M,OAAOxN,EAAK,IAEJG,EAASihJ,sBAAsB/qJ,MAAM8J,EAAUH,IAGnC,IAAvBG,EAASk0I,YAA4C,IAArBzxB,EAAOyxB,UAAqB,CAC5D,IAAImP,GAAkB,EAAAzrI,EAAAvhB,SAAE,YACnB8iB,SAASnZ,EAAS0rC,WAAW5N,UAC7B6N,OAAO,mEACPA,OAAOw2G,GACP9lJ,KAAK,kBAAmB8mJ,GAE7Bz9B,GAAQ,EAAA9tG,EAAAvhB,SAAE,UAAUs1C,OAAO03G,GAAiBxoI,SAAS7a,EAASoN,KAEzD+0I,GAAaltJ,UAAE0nE,KAAKwlF,KACrBz8B,EAAMvsG,SAASnZ,EAAS0rC,WAAW5O,UACnCumH,EAAgB7zH,MAAK,EAAA5X,EAAAvhB,SAAE,UAAU00B,KAAKr1B,KAAK4tJ,WAAa/tJ,UAAKE,QAAQ,2BAIzEiwH,EAAM/5E,OAAOw2G,GAGb1/B,EAAO19C,YACP2gD,EAAMvsG,SAASspG,EAAO19C,YAG1B2gD,EAAM7qG,SAAS7a,EAASoN,OAG5B1X,KAAK0X,IACAu+B,OAAOs3G,GACPt3G,OAAOu3G,GACP/pI,SAASzjB,KAAKg2C,WAAWzO,IAAM,IAAMvnC,KAAKg2C,WAAWxO,WAE1DxnC,KAAKuN,QAAQvN,KAAK6yD,OAAO1pB,OAAQnpC,KAAK0X,IAAK80I,GAC3CxsJ,KAAK0X,IAAInK,QAAQvN,KAAK6yD,OAAO3pB,mBAAoBlpC,KAAK0X,MAE/C1X,uRC/RNW,WAbTxD,EAAA,GACAA,EAAA,GACAA,EAAA,IACAA,EAAA,GACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,oFCZA,QAAAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACA,QAAAA,EAAA,QACAA,EAAA,MACYkwC,0JAAZlwC,EAAA,SACAA,EAAA,QACAA,EAAA,UACAA,EAAA,UACAA,EAAA,QACAA,EAAA,UACAA,EAAA,QACAA,EAAA,SACAA,EAAA,SACAA,EAAA,yDAGA,SAAS0wJ,EAAc97F,GACnB,OAAOA,EAAQv8B,SAAS5U,IAG5B,SAASktI,EAAQtoJ,GACbxF,KAAK0X,KAAM,EAAAwK,EAAAvhB,SAAE6E,GACRxF,KAAK0X,IAAIvX,SAGdH,KAAKq2D,OAAQ,EAAAn0C,EAAAvhB,SAAE,QACfX,KAAK+tJ,SAAW/tJ,KAAK0X,IAAIm/B,SAAS,wBAKlC72C,KAAKq2D,MAAM5yC,SAAS,oBAEpBzjB,KAAKguJ,mBAAqB,KAC1BhuJ,KAAKiuJ,wBAA0B,KAC/BjuJ,KAAKkuJ,uBAAyB,KAC9BluJ,KAAKmuJ,mBAAqB,KAE1BnuJ,KAAKouJ,SAAW,IAAIC,EAuiBxB,SAA4Bt8F,GAExB,KADe,EAAA7vC,EAAAvhB,SAAE,gBACHR,OACV,QAVR,SAAmC4xD,GAC/BA,EAAQr6C,IAAIlM,GAAG,oCAAqCumD,EAAQu8F,0BAA2B,SAAUpoJ,GAC7F,IAAMsgB,GAAW,EAAAtE,EAAAvhB,SAAEuF,EAAEsiB,QACrB+lI,EAAiBx8F,EAASvrC,MAU9BgoI,CAAyBz8F,GAGrB08F,YAAY,EAAAC,EAAA/tJ,SAAW,+CACvB,EAAAuhB,EAAAvhB,SAAE,QAAQ8iB,SAAS,0BAGvB,IAAIkrI,EAAgB,KAChBC,EAAuB,WACD,OAAlBD,IACAA,EAAgBzjF,sBAAsB,WAClCnZ,EAAQ88F,SACRF,EAAgB,UAK5B,EAAAzsI,EAAAvhB,SAAE3D,QAAQwO,GAAG,gBAAiBojJ,GAC9BA,IAEI78F,EAAQ+8F,cACR/8F,EAAQr6C,IAAIlM,GAAG,oCAAqC,WAChDumD,EAAQr6C,IAAInK,QAAQhO,UAAEujB,MAAMjB,GAAgBkwC,EAAQ5H,cAAgB,eAAiB,kBAI7F4H,EAAQr6C,IAAIlM,GAAG,QAAS,sBAAuB,SAAUtF,GACrDA,EAAEoiB,iBACFypC,EAAQlO,YAGZ,EAAA3hC,EAAAvhB,SAAE,mBAAmB6K,GAAG,QAAS,YACxBumD,EAAQ5H,eAAiB4H,EAAQg9F,oBAClCh9F,EAAQ3H,aAIhB,IAAI4kG,EAAwB,SAAU9oJ,IAgEtC,SAA+BA,GAC3B,QAAOA,EAAE02B,QAAUz7B,UAAQQ,qBAAwBuE,EAAEmvC,UAAanvC,EAAEivC,SAAYjvC,EAAEkvC,UAAY,EAAA65G,EAAAtuJ,SAAQuF,EAAEsiB,UAhEpG0mI,CAAsBhpJ,IACtB6rD,EAAQlO,UA0DhB,SAASsrG,EAAYjpJ,GACjB,OAAOA,EAAE/E,UAAYA,UAAQ+B,MAAQgD,EAAEmvC,WAAanvC,EAAEgvC,QApD1D,EAAAhzB,EAAAvhB,SAAEoG,UAAUyE,GAAG,WAAYwjJ,GAE3Bj9F,EAAQq9F,QAAU,WACdpvJ,KAAKqvJ,sBACL,EAAAntI,EAAAvhB,SAAEX,KAAKsvJ,sBAAsB/8I,SAC7BvS,KAAK0X,IAAIhL,MACT1M,KAAK0X,IAAInF,UACT,EAAA2P,EAAAvhB,SAAEoG,UAAU2F,IAAI,WAAYsiJ,IAC5B,EAAA9sI,EAAAvhB,SAAE3D,QAAQ0P,IAAI,gBAAiBkiJ,IAGnC78F,EAAQr6C,IAAIlM,GAAG,WAAY,SAAUtF,GAC7B6rD,EAAQ5H,gBACR4H,EAAQ/H,SACR9jD,EAAEoiB,oBAIVypC,EAAQr6C,IAAIlM,GAAG,mBAAoBumD,EAAQu8F,0BAA2B,WAClE,GAAKv8F,EAAQ5H,cAAb,CAIA,IAAI3jC,GAAW,EAAAtE,EAAAvhB,SAAEX,MAEZqhD,EAAW76B,IACZ+oI,EAAU/oI,MAIlBurC,EAAQr6C,IAAIlM,GAAG,wBAAyBumD,EAAQu8F,0BAA2B,WAClEv8F,EAAQ5H,eAGbqlG,GAAU,EAAAttI,EAAAvhB,SAAEX,SAGhB+xD,EAAQr6C,IAAIlM,GAAG,mBAAoBumD,EAAQ09F,eAAgB,WACvD,IAAIjpI,GAAW,EAAAtE,EAAAvhB,SAAEX,MACb+xD,EAAQ5H,cACR3jC,EAAS1N,KAAK,UAAWjZ,UAAKE,QAAQ,+BAEtCymB,EAAS1N,KAAK,UAAWjZ,UAAKE,QAAQ,iCAE1CwvJ,EAAU/oI,KAGdurC,EAAQr6C,IAAIlM,GAAG,wBAAyBumD,EAAQ09F,eAAgB,WAC5DD,GAAU,EAAAttI,EAAAvhB,SAAEX,SAuChB+xD,EAAQr6C,IAAIlM,GAAG,UAAWumD,EAAQu8F,0BAA2B,SAAUpoJ,GACnE,GAAI6rD,EAAQ5H,cAAe,CACvB,IAAIqF,EAAYtpD,EAAEsiB,OACdknI,EAAsBC,EAAuBngG,GACjD,IAAKkgG,EACD,OAGJ,IAAIE,GAAuB,EAAA1tI,EAAAvhB,SAAE+uJ,GAEzBP,EAAYjpJ,IAAMwpJ,EAAoBjyI,OACtCvX,EAAEoiB,iBAtBd,SAAsCunI,GAClCA,EAAclpJ,KAAK,aAAc,IAEjCkpJ,EAAcr6I,KAAK,iBAAiBd,QAAQ4nB,QAG5C7M,WAAW,WACPogI,EAAcprH,WAAW,eAC1B,KAeKqrH,CAA6BF,GAE7BA,EAAqBpkJ,GAAG,UAAW,SAAUtF,KA1CzD,SAAoBA,GAChB,OAAOA,EAAE/E,UAAYA,UAAQ+B,KAAOgD,EAAEmvC,UA0CtB06G,CAAW7pJ,IAvC/B,SAA4B0d,EAAMosI,GAC9B,OAAOpsI,IAASosI,EAAex6I,KAAK,iBAAiB,GAsCpBy6I,CAAmB/pJ,EAAEsiB,OAAQonI,IAAyBT,EAAYjpJ,IAnCvG,SAA2B0d,EAAMosI,GAC7B,OAAOpsI,IAASosI,EAAex6I,KAAK,iBAAiBiB,OAAO,GAkC6Cy5I,CAAkBhqJ,EAAEsiB,OAAQonI,MACrHpgG,EAAUlzB,SAEV,EAAApa,EAAAvhB,SAAEX,MAAM0M,IAAI,WACZyjJ,WAnsBpBC,CAAmBpwJ,MAmevB,SAA8B+xD,IAC1B,EAAA7vC,EAAAvhB,SAAEoxD,EAAQu8F,2BAA2BzkJ,KAAK,WACtC,IAAI2c,GAAW,EAAAtE,EAAAvhB,SAAEX,MACjBuuJ,EAAiBx8F,EAASvrC,KAre9B6pI,CAAqBrwJ,OAGzB,IACI6hB,EAAe,yBAEnB,SAASyuI,EAAiBnlJ,GACtB,OAAO5L,UAAE8N,IAAIlC,EAAO/G,MAAM,KAAM,SAAU4Q,GACtC,OAAO6M,EAAe7M,IACvBkf,KAAK,KA4QZ,SAASq8H,IACL,OAAOxpJ,SAASC,iBAAiB8mJ,EAAQ7uJ,UAAUqwJ,sBAGvD,SAASjB,IACLruJ,KAAKwwJ,aAAe,KAwDxB,SAASC,EAAWjqI,GAChB,OAAOA,EAAStB,GAAG,KAAOsB,EAAS2gB,KAAK,YAAc3gB,EAASqwB,SAAS,gBAG5E,SAAS84G,EAAuBpiJ,GAC5B,IAAImjJ,EAAiBnjJ,EAAQ0rB,aAAa,iBAC1C,OAAOlyB,SAAS0f,eAAeiqI,GAGnC,SAASrvG,EAAW76B,GAChB,OAAuC,IAAhCiqI,EAAWjqI,GAAUrmB,OAGhC,SAASgwJ,IACL,IAAIQ,EAAoBJ,IACxBlwJ,MAAMpB,UAAUoI,QAAQ7J,KAAKmzJ,EAAmB,SAAUC,GACtDA,EAAcnzI,MAAO,IAQ7B,SAAS8wI,EAAiBx8F,EAASvrC,GAC/B,IAAIA,EAAS1N,KAAK,sCAGd0N,EAAS1N,KAAK,oCAAoC,GAGjDuoC,EAAW76B,IAAhB,CAIA,IAAIkpI,EAAsB3oJ,SAASyR,cAAc,qBAE7CrM,GAAW,EAAAglE,EAAAxwE,SAAI,mBAqBnB,OAnBA6lB,EAAS7f,KAAK,gBAAiBwF,GAC/Bqa,EAAS7f,KAAK,mBAAoB,IAClChH,UAAMqgC,KAAKxZ,GAEXkpI,EAAoBvvI,aAAa,KAAMhU,GACvCujJ,EAAoBvvI,aAAa,YAAa,aAC9CuvI,EAAoBvvI,aAAa,cAAe,QAChDuvI,EAAoBvvI,aAAa,eAAgB,YAC7C4xC,EAAQ5H,eACRulG,EAAoBvvI,aAAa,cAAe,UAGpD,EAAA+B,EAAAvhB,SAAE+uJ,GAAqBjsI,SAASqqI,EAAQ7uJ,UAAU4xJ,mBAElD9pJ,SAASqW,KAAKga,YAAYs4H,GAC1B/vJ,UAAMqgC,KAAK0vH,GAef,SAA0C39F,EAASvrC,EAAUkpI,GACzDA,EAAoB9xI,iBAAiB,iBAAkB,SAAU1X,GAC7D,GAAK6rD,EAAQ5H,eAMb,IAhBR,SAA6BjkD,GACzB,MAA4B,sBAArBA,EAAEsiB,OAAO/Q,QAeRq5I,CAAoB5qJ,KAZhC,SAAqCA,GACjC,OAAQA,EAAEsiB,OAAOipB,UAAUx7B,SAAS,8BAWF86I,CAA4B7qJ,GAA1D,CAQA,IAAIuiB,EAAclpB,UAAEujB,MAAM,mCAC1B0D,EAASjZ,QAAQkb,EAAainI,GAC1BjnI,EAAYnF,qBACZpd,EAAEoiB,iBAWd,SAAiC9B,EAAUkpI,GACvClpI,EAAS/C,SAAS,UAClBisI,EAAoBvuI,UAAY6vI,EAChC,IAAI1yI,EAAQkI,EAAStB,GAAG,KAAOsB,EAAS6O,OAAS7O,EAASqwB,SAAS,oBAAoBxhB,OAEnF47H,GAAa,EAAA/uI,EAAAvhB,SAAE+uJ,GAAqBl6I,KAAK,uBAC7Cy7I,EAAWp6G,SAAS,oBACflwC,KAAK,QAAS2X,GACdu4B,SAAS,UACTxhB,KAAK/W,GASV,SAAuBxG,GACnB,IAAMo5I,GAAS,EAAAC,EAAAxwJ,SAAMmX,IACrB,EAAAs5I,EAAAzwJ,SAAeuwJ,EAAQG,WAEnBH,EAAOlrH,SAAS,0BAChBkrH,EAAO17I,KAAK,wBAAwBjD,SACpC2+I,EAAO/xG,YAAY,yBAEvB,OAAO+xG,EAdXI,CADeb,EAAWjqI,IACFrB,SAAS8rI,GApB7BM,CAAwB/qI,EAAUkpI,SAnB9BxpJ,EAAEoiB,mBAsBVonI,EAAoB9xI,iBAAiB,iBAAkB,YA8C3D,SAAiC4I,GAC7BA,EAAS24B,YAAY,UA9CjBqyG,CAAwBhrI,KAvC5BirI,CAAiC1/F,EAASvrC,EAAUkpI,GAE7CA,GAhYX5B,EAAQ7uJ,UAAUuM,GAAK,WACnB,IAAIL,EAASjL,UAAU,GACnBiK,EAAO9J,MAAMpB,UAAUoK,MAAM7L,KAAK0C,UAAW,GAC7CwxJ,EAAmBpB,EAAgBnlJ,GAEvC,OADAnL,KAAK0X,IAAIlM,GAAGhL,MAAMR,KAAK0X,KAAMg6I,GAAkBjxJ,OAAO0J,IAC/CnK,MAGX8tJ,EAAQ7uJ,UAAUyN,IAAM,WACpB,IAAIvB,EAASjL,UAAU,GACnBiK,EAAO9J,MAAMpB,UAAUoK,MAAM7L,KAAK0C,UAAW,GAC7CwxJ,EAAmBpB,EAAgBnlJ,GAEvC,OADAnL,KAAK0X,IAAIhL,IAAIlM,MAAMR,KAAK0X,KAAMg6I,GAAkBjxJ,OAAO0J,IAChDnK,MAGX8tJ,EAAQ7uJ,UAAU0yJ,UAAY,SAAU9wF,EAAW+wF,EAAgBC,GAC/D,IAAIC,EAAsBtkJ,KAAKC,IAAI,EAAGokJ,EAAehxF,GAErD,OADA7gE,KAAK+tJ,SAASztI,OAAOsxI,EAAiBE,GAC/B9xJ,MAGX8tJ,EAAQ7uJ,UAAU8yJ,eAAiB,WAA0C,IAAhClxF,EAAgC3gE,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAApBlD,OAAOg1J,YAE5D,OADAhyJ,KAAK+tJ,SAASnoH,YAAY,gBAAiBi7B,EAAYgtF,EAAc7tJ,KAAK0X,MACnE1X,MAGX8tJ,EAAQ7uJ,UAAUgzJ,YAAc5kH,EAAU3nC,GAAGooJ,EAAQ7uJ,UAAU8yJ,eAAgB,uBAC3E/sJ,gBAAiB,QACjBD,aAAc,QACdE,gBAAiB,2BAGrB6oJ,EAAQ7uJ,UAAUizJ,gBAAkB,WAA2C,IAAjCpxF,EAAiC5gE,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAApBlD,OAAOm1J,YAI9D,OAHInyJ,KAAK+tJ,SAAS/nH,SAAS,kBACvBhmC,KAAK+tJ,SAASxlJ,KAAMwjB,MAAO+0C,IAExB9gE,MAGX8tJ,EAAQ7uJ,UAAUmzJ,kBAAoB,SAAUC,GAK5C,IAAIhwI,GAAciwI,aAAeC,aACjClwI,EAAWiwI,UAAUE,QACjBA,OAAQjzJ,UAAE4zB,KACVs/H,KAAM,SAAUrzJ,GACZA,EAAEszJ,QAAQL,GAAe,KAGjChwI,EAAWiwI,UAAUG,MACjBD,OAAQjzJ,UAAE4zB,KACVs/H,KAAMlzJ,UAAE4zB,MAEZ9Q,EAAWkwI,SAASC,QAChBA,OAAQjzJ,UAAE4zB,KACVs/H,KAAM,SAAUrzJ,GACZA,EAAEi3D,MAAMlX,YAAY,yBACpB//C,EAAEsY,IAAIynC,YAAY,yBAG1B98B,EAAWkwI,SAASE,MAChBD,OAAQ,SAAUpzJ,GACdA,EAAEuzJ,WAAU,IAEhBF,KAAMlzJ,UAAE4zB,MAGZ,IAAIy/H,EAAgB5yJ,KAAKmqD,cAAgB,YAAc,WACnD0oG,EAAU7yJ,KAAK+uJ,iBAAiB/uJ,KAAKkuJ,wBAA0B,SAAW,OAC1ExsI,EAAU1hB,KAAK+uJ,iBAAiBsD,GAAiB,SAAW,OAEhE,OADAhwI,EAAWuwI,GAAeC,GAASnxI,GAAS1hB,MACrCA,MAGX8tJ,EAAQ7uJ,UAAU0zJ,UAAY,SAAU73B,GACpC,GAAI96H,KAAKmqD,cACL,OAAOnqD,KAGX,IAAI8yJ,EAAavzJ,UAAEujB,MAAMjB,EAAe,kBAAmBi5G,aAAcA,IAEzE,OADA96H,KAAK0X,IAAInK,QAAQulJ,GACbA,EAAWxvI,qBACJtjB,MAGXA,KAAKq2D,MAAM5yC,SAAS,yBACpBzjB,KAAK0X,IAAI/Q,KAAK,gBAAiB,SAC/B3G,KAAK0X,IAAIynC,YAAY,uBACrBn/C,KAAK0X,IAAIlC,KAAKxV,KAAK+yJ,yBAAyBpsJ,KAAK,WAAY,IAC7D,EAAAub,EAAAvhB,SAAEX,KAAKsvJ,sBAAsB3oJ,KAAK,cAAe,SAE5C3G,KAAK8uJ,cACN9uJ,KAAK0X,IAAInK,QAAQhO,UAAEujB,MAAMjB,EAAe,gBAAiBi5G,aAAcA,KAEpE96H,OAGX8tJ,EAAQ7uJ,UAAUmrD,SAAW,WACzB,OAAOpqD,KAAK2yJ,WAAU,IAG1B7E,EAAQ7uJ,UAAUyzJ,QAAU,SAAUL,EAAev3B,GACjD,IAAIg4B,EAAavzJ,UAAEujB,MAAMjB,EAAe,gBAAiBi5G,aAAcA,IAEvE,GADA96H,KAAK0X,IAAInK,QAAQulJ,GACbA,EAAWxvI,qBACX,OAAOtjB,KAGX,IAAI+uJ,EAAmB/uJ,KAAK+uJ,iBAAiBsD,GAU7C,OATAryJ,KAAK0X,IAAI/Q,KAAK,gBAAiB,QAC/B3G,KAAKq2D,MAAMzwB,YAAY,wBAAyBmpH,GAChD/uJ,KAAK0X,IAAIkuB,YAAY,sBAAuBmpH,GAC5C/uJ,KAAK0X,IAAIlC,KAAKxV,KAAK+yJ,yBAAyBtuH,WAAW,aACvD,EAAAviB,EAAAvhB,SAAEX,KAAKsvJ,sBAAsB7qH,WAAW,eAEnCzkC,KAAK8uJ,cACN9uJ,KAAK0X,IAAInK,QAAQhO,UAAEujB,MAAMjB,EAAe,cAAei5G,aAAcA,KAElE96H,MAGX8tJ,EAAQ7uJ,UAAU+qD,OAAS,WAIvB,OAHIhqD,KAAKmqD,eACLnqD,KAAK0yJ,QAAQ1yJ,KAAKkuJ,wBAAwB,GAEvCluJ,MAGX8tJ,EAAQ7uJ,UAAU6vJ,WAAa,WAC3B,OAAO9uJ,KAAK0X,IAAIsuB,SAAS,oBAG7B8nH,EAAQ7uJ,UAAUkrD,YAAc,WAC5B,MAA0C,UAAnCnqD,KAAK0X,IAAI/Q,KAAK,kBAGzBmnJ,EAAQ7uJ,UAAU8vJ,iBAAmB,SAAUsD,GAE3C,OADAA,OAAkCxpJ,IAAlBwpJ,EAA8BryJ,KAAKkuJ,uBAAyBmE,GArJrD,MAyJ3BvE,EAAQ7uJ,UAAUowJ,mBAAqB,YAGnC,EAAAntI,EAAAvhB,SAAEX,KAAKgzJ,iBAAiBzgJ,UAG5Bu7I,EAAQ7uJ,UAAUg0J,iBAAmB,SAA0BC,EAAmBb,GAC9E,GAAIa,GACA,IAAKlzJ,KAAKmqD,eAAiBnqD,KAAK+uJ,iBAAiBsD,GAAgB,CAC7D,IAAIvD,EAAa9uJ,KAAK8uJ,aAClBA,GACA9uJ,KAAK0X,IAAIynC,YAAY,mBAMzBn/C,KAAKoqD,WACD0kG,IAIA9uJ,KAAK0X,IAAI,GAAG2pD,aACZrhE,KAAK0X,IAAI+L,SAAS,0BAGnB4uI,IAAkBryJ,KAAKkuJ,wBAC9BluJ,KAAKoyJ,kBAAkBC,IAI/BvE,EAAQ7uJ,UAAU4vJ,OAAS,WAKU,IAJjChuF,EAIiC3gE,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAJrBlD,OAAOg1J,YACnBJ,EAGiC1xJ,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAHhB6G,SAAS2kC,gBAAgBu1B,aAC1CoxF,EAEiCnyJ,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAFjBlD,OAAOulE,WACvB+qC,EACiCptG,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GADlB6G,SAAS2kC,gBAAgB4hE,aACxCxsC,EAAiC5gE,UAAAC,OAAA,QAAA0I,IAAA3I,UAAA,GAAAA,UAAA,GAApBlD,OAAOm1J,YAIhBgB,EAAYtF,EAAc7tJ,KAAK0X,KAC/Bw7I,EAAoD,OAAhClzJ,KAAKkuJ,uBAE7B,GAAMrtF,IAAc7gE,KAAKguJ,oBAAsB4D,IAAmB5xJ,KAAKiuJ,yBAA2BkF,IAAcnzJ,KAAKmuJ,mBAAqB,CAClInuJ,KAAKmqD,gBAAkB+oG,GAAqBryF,IAAc7gE,KAAKguJ,oBAE/DhuJ,KAAKqvJ,qBAGT,IAAI+D,EAAUpzJ,KAAKq2D,MAAMrwB,SAAS,0BAC9BqtH,EAAmBxyF,IAAc7gE,KAAKguJ,qBAAuBntF,EAAY,GAAKA,EAAY+wF,EAAiBtkD,GAC1G8lD,IAAYF,GAAsBG,IACnCrzJ,KAAK2xJ,UAAU9wF,EAAW+wF,EAAgBuB,GAC1CnzJ,KAAK+xJ,eAAelxF,IAS5B,GALIC,IAAe9gE,KAAKszJ,qBACpBtzJ,KAAKkyJ,gBAAgBpxF,GAGmC,UAAzC9gE,KAAK0X,IAAI/Q,KAAK,uBAE7B3G,KAAKizJ,iBAAiBC,EAAmBb,OACtC,CACH,IAAIkB,GAAYvzJ,KAAKmqD,eAAiBnqD,KAAK+uJ,iBAAiBsD,GAC5DryJ,KAAK0X,IAAIkuB,YAAY,sBAAuB2tH,GAQhD,OALAvzJ,KAAKguJ,mBAAqBntF,EAC1B7gE,KAAKiuJ,wBAA0B2D,EAC/B5xJ,KAAKkuJ,uBAAyBmE,EAC9BryJ,KAAKmuJ,mBAAqBgF,EAC1BnzJ,KAAKszJ,oBAAsBxyF,EACpB9gE,MAGX8tJ,EAAQ7uJ,UAAU4kD,OAAS,WAOvB,OANI7jD,KAAKmqD,eACLnqD,KAAKgqD,SACLhqD,KAAKqvJ,sBAELrvJ,KAAKoqD,WAEFpqD,MAsBX8tJ,EAAQ7uJ,UAAU8zJ,wBAA0B,sDAE5CjF,EAAQ7uJ,UAAUqvJ,2BACdR,EAAQ7uJ,UAAU8zJ,wBAClB,oEACA,sDACF7+H,KAAK,MAEP45H,EAAQ7uJ,UAAUwwJ,eAAiB,4CAEnC3B,EAAQ7uJ,UAAU+zJ,gBAAkB,+BAEpClF,EAAQ7uJ,UAAU4xJ,kBAAoB,6BACtC/C,EAAQ7uJ,UAAUqwJ,qBAAuB,IAAMxB,EAAQ7uJ,UAAU4xJ,kBAUjExC,EAAepvJ,UAAUu0J,QAAU,SAAUhtI,GAEzC,OADAitI,IACOhD,EAAWjqI,IAGtB6nI,EAAepvJ,UAAUoiD,WAAa,SAAU76B,GAE5C,OADAitI,IACOpyG,EAAW76B,IAGtB6nI,EAAepvJ,UAAUy0J,qBAAuB,WAE5C,OADAD,IACO,IAGXpF,EAAepvJ,UAAU00J,UAAY,WAEjC,OADAF,IACO3F,EAAQ7uJ,UAAU20J,oBAG7BvF,EAAepvJ,UAAU+kB,KAAO,SAAU9d,EAAGqH,GACzCkmJ,IAoDJ,SAAqBlmJ,GACjBoiJ,EAAuBpiJ,GAASkQ,MAAO,EApDvCo2I,CAAYtmJ,IAGhB8gJ,EAAepvJ,UAAUklB,KAAO,WAC5BsvI,IACAtD,KAGJ9B,EAAepvJ,UAAUsyJ,wBAA0B,WAC/CkC,KAEJpF,EAAepvJ,UAAUuyJ,wBAA0B,WAC/CiC,KAEJpF,EAAepvJ,UAAU60J,0BAA4B,WACjDL,KAEJpF,EAAepvJ,UAAU80J,eAAiB,WACtCN,KAGJ3F,EAAQ7uJ,UAAU+0J,mBAAqB,WACnC,OAAO3zJ,MAAMpB,UAAUyW,OAAOlY,KAAK+yJ,IAAwB,SAAUK,GACjE,OAAOA,EAAcnzI,QAI7BqwI,EAAQ7uJ,UAAU20J,iBAAmB,WACjC,OAAO5zJ,KAAKg0J,qBAAqB7zJ,OAAS,GAoI9C,IAAM6wJ,EACF,yOAqBJ,IAAIiD,GACA1mJ,QAAS,SACTqlE,QAAS,IACTn6D,UAAW,8BACX6F,MAAO,WACH,IAAI0iC,GAAQ,EAAA9+B,EAAAvhB,SAAEX,MACd,OAAIghD,EAAM97B,GAAG,KACF87B,EAAMr6C,KAAK,UAAYq6C,EAAMxrC,KAAK,uBAAuB6f,QAAU2rB,EAAMloC,KAAK,WAE9EkoC,EAAMnK,SAAS,YAAYlwC,KAAK,UAAYq6C,EAAMnK,SAAS,oBAAoBxhB,SAKlG,SAASk6H,EAAU/oI,GACfA,EAASsZ,QAAQm0H,GAAWn0H,QAAQ,QACpC,IAAIqB,EAAO3a,EAAS1N,KAAK,UAAY0N,EAAS1N,KAAK,SAASqoB,KACxDA,GAEAA,EAAK54B,KAAKo4B,QAAS,KAAKld,SAAS,iBAIzC,SAAS+rI,EAAUhpI,GACf,IAAI2a,EAAO3a,EAAS1N,KAAK,UAAY0N,EAAS1N,KAAK,SAASqoB,KAC5D,GAAIA,EAAM,CACN,IAAI+yH,EAAc/yH,EAAK54B,IAAI,uBAE3B,GAAI2rJ,EAAa,CAEb,IAAIC,EAAaD,EAAY5vJ,QAAQ,OAAS,EAC1CuiB,SAASqtI,EAAYrvJ,UAAU,EAAGqvJ,EAAY/zJ,OAAS,GAAI,IAC3D,IAAO0mB,SAASqtI,EAAYrvJ,UAAU,EAAGqvJ,EAAY/zJ,OAAS,GAAI,IAQtEsvB,WAAW,WACH0R,EAAK6E,SAAS,mBACdxf,EAASsZ,QAAQ,QACjBqB,EAAKge,YAAY,mBAEtBg1G,QAEHhzH,EAAKge,YAAY,kBAkL7B,IAAI4S,GAAU,EAAAzsC,EAAA3kB,SAAO,UAAWmtJ,IAEhC,EAAA5rI,EAAAvhB,SAAE,WACEoxD,EAAQ,kBAGZ,IAAI0hG,EAAkCpmH,EAAU7kC,iBAAiB,oBAC7DxD,gBAAiB,QACjBD,aAAc,WAGlB,EAAArE,EAAAC,SAAU,UAAWoxD,aAENA,qGCjwBf,QAAA50D,EAAA,uDAQA,SAAS6R,EAAOxJ,GACZ,OAAO,EAAA0c,EAAAvhB,SAAE6E,GAAUwJ,QAAQy1B,WAAW,OAG1C,IAXAtnC,EAAA,IAWAwD,SAAU,QAASqO,aAEJA,qGCbf,IAAIolJ,EAAgBp3J,OAAOo3J,cACvB3F,EAAY,iBAAkBzxJ,QAAWo3J,GAAiBrtJ,oBAAoBqtJ,YACnE3F,+GCHA,SAAUzmJ,GACrB,MAAO,UAAWA,GAAMA,EAAGqsJ,gICKhB,SAAqBC,GAChC,GAAIt3J,OAAOu3J,WACP,OAAOv3J,OAAOu3J,WAAWD,GAAIxtJ,QAIjC,IAAImW,EAAQlW,SAASyR,cAAc,SACnCyE,EAAMtE,KAAO,WACbsE,EAAMjR,GAAK,YACXiR,EAAM0rG,UAAN,UAA4B2rC,EAA5B,kCACAvtJ,SAASqP,KAAKghB,YAAYna,GAC1B,IACIu3I,EAAgC,QADzBx3J,OAAOslB,iBAAiBrF,EAAO,MAChB8G,MAE1B,OADA9G,EAAMsD,WAAWnC,YAAYnB,GACtBu3I,gHCTI,SAAwBtD,EAAQuD,GAC3C,IAAIjkI,GAAU,EAAAtO,EAAAvhB,SAAE,eAChB6vB,EAAQylB,OAAOi7G,GACf1gI,EAAQhb,KAAK,QACR3L,KAAK,SAACxM,EAAG2K,GACN,IAAMw7B,EAAOixH,EAAezsJ,EAAGgE,GAAlB,MAVzB,SAAoCklJ,EAAQllJ,EAAIw3B,GAC5CkxH,EAAsBxD,EAAQllJ,EAAIw3B,EAAM,iBACxCkxH,EAAsBxD,EAAQllJ,EAAIw3B,EAAM,aAShCmxH,CAA2BnkI,EAASxoB,EAAGgE,GAAIw3B,GAC3Cx7B,EAAGgE,GAAKw3B,KAlBpB,wDAAArmC,EAAA,IAEA,SAASu3J,EAAsBxD,EAAQllJ,EAAI1N,EAAOsL,GAC9CsnJ,EAAO17I,KAAP,IAAgB5L,EAAhB,KAA8BjD,KAAKiD,EAAW,SAACvM,EAAG8uC,GAAJ,OAAiBngC,IAAOmgC,EAAW7tC,OAAQuK,oQCHrFlI,0FCAR,QAAAxD,EAAA,IACAA,EAAA,KACAA,EAAA,KACA,QAAAA,EAAA,IACYoG,0JAAZpG,EAAA,IACAy3J,EAAAz3J,EAAA,SACAA,EAAA,QACAA,EAAA,IACA4hB,EAAA5hB,EAAA,uDAEA,IAAMk5C,GAAiB,EAEnBw+G,GAA+C,IAAvCxmH,UAAUymH,SAASxwJ,QAAQ,OACnCywJ,GAAsD,IAA3C1mH,UAAUC,UAAUhqC,QAAQ,UACvC0wJ,EAAiB,uJAMfC,EAAoB,SAACv9I,GACvB,IAAMI,EAAUJ,EAAI,GAEpB,GAAII,EAAS,CAET,IAEM9C,EAAQjO,SAASgiB,YAAY,cACnC/T,EAAMkgJ,eAAe,SAHL,GACG,EAEgCl4J,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MACzG8a,EAAQuL,cAAcrO,KAgB9B,SAASg9C,EAAWlyD,GAChB,IAAIq1J,KACAC,EAAW71J,UAAE81J,YAEjB,SAASC,EAAgBpvJ,IAChB++H,QAAMv1H,SAAW0lJ,GAClBA,EAASG,KAAKrvJ,GAItB,SAASsvJ,EAAyBtvJ,GAC9BA,EAAEoiB,iBAKN,SAASmtI,EAAS31J,IACEA,GAAQA,EAAKsE,MAAQ7E,UAAE0nE,KAAKnnE,GAAMsE,MAAM,MAAQtE,IAEtDuH,QAAQ,SAAUquJ,IAkBhC,SAAsBA,GAClB,IAAIC,EAAUD,aAAoBr1J,MAC9Bq1J,EAaR,SAAiCE,GAC7B,IAAID,KACAE,EAAgB,GAEpB,KAAOD,EAAUz1J,QAAQ,CACrB,IAAI21J,EAAgBF,EAAU19I,MAAM,6BAChC69I,EAAiBH,EAAU19I,MAAM88I,GAEjCc,GACAD,GAAiBC,EAAc,GAC/BF,EAAYA,EAAU/wJ,UAAUixJ,EAAc,GAAG31J,SAE1C41J,GACPJ,EAAQpxJ,KAAKsxJ,EAAgBE,EAAe,IAC5CH,EAAYA,EAAU/wJ,UAAUkxJ,EAAe,GAAG51J,QAClD01J,EAAgB,KAGhBF,EAAQpxJ,KAAKsxJ,EAAgBD,EAAU,IACvCA,EAAYA,EAAU/wJ,UAAU,GAChCgxJ,EAAgB,IAIxB,OAAOF,EApCHK,CAAwBN,EAASpsI,YACjCgtB,EAjBR,SAAyBq/G,GAErB,IAAIt4J,EAAIs4J,EAAQx1J,OAChB,KAAO9C,KACH,GAAIs4J,EAAQt4J,GAAG8C,OAAS,GAAoB,UAAfw1J,EAAQt4J,GACjC,OAAO,EAGf,OAAO,EASS44J,CAAgBN,GAAW,UAAY,WAEvDR,EAAe5wJ,KAAKoxJ,IACpB,EAAAzzI,EAAAvhB,SAAEoG,UAAUyE,GAAG8qC,EAAWD,EAAgBs/G,EAASL,IAGnD,EAAApzI,EAAAvhB,SAAEoG,UAAUyE,GAAG8qC,EAAY,SAAUD,EAAgBs/G,EAASH,GA3B1DU,CAAaR,KAyGrB,SAASS,EAA2BT,EAAUp3I,EAAO83I,GAajD,OAZIA,EACA93I,GAAS,KAAOze,UAAKE,QAAQ,+BAAgC21J,EAASphJ,UAEtEgK,EAAQA,EAAMna,QAAQ,MAAO,IAC7Bma,GAASze,UAAKE,QAAQ,6BAA8B21J,EAASphJ,UAGjEohJ,EAASruJ,QAAQ,SAAUzI,GACvB0f,GAAS,IAAMze,UAAKE,QAAQ,+BAAgCnB,KAEhE0f,GAAS,IAOb,OAFAm3I,EAAS31J,GAEFkyD,EAAUqkG,cACbjB,SAAUA,EACVK,SAAUA,EACVa,oBAnEJ,SAA6B9wJ,GASzB,IARA,IAAIi8B,GAAO,EAAAvf,EAAAvhB,SAAE6E,GACT8Y,EAAQmjB,EAAK96B,KAAK,UAAY,GAC9B4vJ,EAAYpB,EAAe9rJ,QAC3BmtJ,EAAiB/0H,EAAK3oB,KAAK,sBAC3B29I,EAAuBh1H,EAAK3oB,KAAK,uBAAyB,GAC1Ds9I,GAAWK,EACXC,EAAgBN,EAAU93I,EAAQA,EAAMzZ,UAAU,EAAGyZ,EAAMne,OAASs2J,EAAqBt2J,QAEtFo2J,EAAUp2J,QAAQ,CACrB,IAAIu1J,EAAWa,EAAUjiJ,QACAkiJ,EAAeviJ,KAAK,SAAS0iJ,GAClD,OAAO,EAAA53I,EAAAnP,SAAQ8lJ,EAAUiB,OAGzBF,EAAuBN,EAA2BT,EAASrsJ,QAASotJ,EAAsBL,GAC1FA,GAAU,GAIdvB,IACA4B,EAAuBA,EAClBtyJ,QAAQ,SAAU,KAClBA,QAAQ,UAAW,MAG5Bs9B,EAAK96B,KAAK,QAAS+vJ,EAAgBD,GACnCh1H,EAAK3oB,KAAK,qBAAsB29I,GAChCh1H,EAAK3oB,KAAK,iBAAkB09I,EAAe/1J,OAAO00J,KAwClDyB,yBArCJ,SAAkCpxJ,GAC9B,IAAIi8B,GAAO,EAAAvf,EAAAvhB,SAAE6E,GACTqxJ,EAAYp1H,EAAK3oB,KAAK,sBAE1B,GAAK+9I,EAAL,CAIA,IAAIv4I,EAAQmjB,EAAK96B,KAAK,SACtB86B,EAAK96B,KAAK,QAAS2X,EAAMna,QAAQ0yJ,EAAW,KAC5Cp1H,EAAK+C,WAAW,sBAChB/C,EAAK+C,WAAW,oBA2BhB8wH,gBAAiBA,EACjBE,yBAA0BA,IAIlCxjG,EAAUqkG,aAAe,SAAU3yJ,GAC/B,IAAI0xJ,EAAW1xJ,EAAQ0xJ,SACnBK,EAAW/xJ,EAAQ+xJ,SACnBa,EAAsB5yJ,EAAQ4yJ,oBAC9BM,EAA2BlzJ,EAAQkzJ,yBACnCtB,EAAkB5xJ,EAAQ4xJ,gBAC1BE,EAA2B9xJ,EAAQ8xJ,yBAEnCsB,KAEJ,SAASC,EAAmBC,GACxB,OAAO,SAAUxxJ,EAAU9B,GAEvB,IAAIuzJ,GADJvzJ,EAAUA,OACiBuzJ,cAAgB,UACvCC,GAAaxzJ,EAAQxE,eAAe,eAAgBwE,EAAQwzJ,WAC5DC,GAAczzJ,EAAQxE,eAAe,gBAAiBwE,EAAQyzJ,YAgClE,OA9BA/B,EAAS9iJ,IAAI,WAET,IAAMwxC,GAAS,EAAA5hC,EAAAvhB,SAAE6E,GACb4xJ,EAAetzG,EAAOpuC,OAAO,IAAMuhJ,GACjCI,EAAwC,IAAxBD,EAAaj3J,YAAe0I,GAAawZ,YAAY,GAEvE80I,IACA,EAAAj1I,EAAAvhB,SAAEoG,UAAUq+G,IAAI,UAAW,SAAUl/G,GAC7BA,EAAE/E,UAAYA,UAAQc,QAAUm1J,GAChCA,EAAaj4G,YAAY83G,KAKjCG,EAAaj3J,QACbi3J,EAAaj4G,YAAY83G,IAG7BG,EAAeJ,EAAYI,EAActzG,EAAQozG,KAE7BE,EAAaj3J,OAAS,IACtCi3J,EAAa3zI,SAASwzI,GACtBG,EAAaE,OAAOD,GAChBD,EAAalyI,GAAG,KAChBkyI,EAAa96H,QAEb86H,EAAa5hJ,KAAK,WAAW8mB,WAIlCt8B,MAIf,OAUIu3J,eAAgBR,EAAmB,SAAUK,EAActzG,EAAQozG,GAC/D,IAAIhjJ,EAEJ,OAAIgjJ,GAAsC,IAAxBE,EAAaj3J,OACpB2jD,EAAOpyB,GAAG,IAGjBxd,EAAQ3U,UAAEmmC,QAAQ0xH,EAAal5J,IAAI,GAAI4lD,IAC3BA,EAAO3jD,OAAS,GACxB+T,GAAgB,EACT4vC,EAAOpyB,GAAGxd,IACVgjJ,EACApzG,EAAOpyB,GAAG,GAIlB0lI,IAUXI,eAAgBT,EAAmB,SAAUK,EAActzG,EAAQozG,GAC/D,IAAIhjJ,EACJ,OAAIgjJ,GAAsC,IAAxBE,EAAaj3J,OACpB2jD,EAAOpuC,OAAO,UAGrBxB,EAAQ3U,UAAEmmC,QAAQ0xH,EAAal5J,IAAI,GAAI4lD,IAC3B,GACR5vC,GAAgB,EACT4vC,EAAOpyB,GAAGxd,IACVgjJ,EACApzG,EAAOpuC,OAAO,SAItB0hJ,IAUXp7H,MAAO,SAAUx2B,GAQb,OAPAsxJ,EAA4BvyJ,KAAKiB,GACjC8wJ,EAAoB9wJ,GAEpB4vJ,EAAS9iJ,IAAI,WACT,IAAMoF,GAAM,EAAAwK,EAAAvhB,SAAE6E,GACdyvJ,EAAkBv9I,KAEf1X,MAUXy3J,KAAM,SAAUt8I,GAIZ,OAHAi6I,EAAS9iJ,IAAI,WACTtV,OAAOme,SAASc,KAAOd,IAEpBnb,MAUX03J,WAAY,SAAUlyJ,GAUlB,OATAsxJ,EAA4BvyJ,KAAKiB,GACjC8wJ,EAAoB9wJ,GAEpB4vJ,EAAS9iJ,IAAI,WACT,IAAImvB,GAAO,EAAAvf,EAAAvhB,SAAE6E,GAAU,GACnBi8B,IAASrb,GAAK,EAAMo1G,MAAQ,GAAO/5F,EAAKrH,SAASxa,iBACjD5iB,OAAOme,SAASc,KAAOwlB,EAAKxlB,QAG7Bjc,MAUX0a,QAAS,SAAU0H,GACf,IAAInZ,EAAOjJ,KAIX,OAHAo1J,EAAS9iJ,IAAI,WACT8P,EAAK5hB,MAAMyI,EAAM/I,aAEdF,MAWX20B,SAAU,SAAUgjI,GAChBA,EAAQn6J,KAAKwC,OAUjB43J,eAAgB,SAAUpyJ,GAWtB,OAVAsxJ,EAA4BvyJ,KAAKiB,GACjC8wJ,EAAoB9wJ,GAEpB4vJ,EAAS9iJ,IAAI,WACT,IAAMoF,GAAM,EAAAwK,EAAAvhB,SAAE6E,GACVkS,EAAIvX,OAAS,IACb80J,EAAkBv9I,GAClBA,EAAI4/I,YAGLt3J,MAUX63J,eAAgB,SAAUryJ,GAgBtB,OAfAsxJ,EAA4BvyJ,KAAKiB,GACjC8wJ,EAAoB9wJ,GAEpB4vJ,EAAS9iJ,IAAI,SAAUpM,GACnB,IAAI4xJ,GAAQ,EAAA51I,EAAAvhB,SAAE6E,GACVsyJ,EAAM33J,OAAS,IACf23J,EAAMx7H,QACFw7H,EAAMR,QACNQ,EAAMR,SAENQ,EAAM5yI,GAAG,WACThf,EAAEoiB,oBAIPtoB,MAUX+3J,GAAI,SAAUj4J,GAEV,OADA21J,EAAS31J,GACFE,MAQXmO,OAAQ,YACJ,EAAA+T,EAAAvhB,SAAEoG,UACGoH,OAAO,mBAAoBmnJ,GAC3BnnJ,OAAO,yBAA0BqnJ,GAEtC,IAAK,IAAIn4J,EAAI,EAAG0vB,EAAM+pI,EAA4B32J,OAAQ9C,EAAI0vB,EAAK1vB,IAC/Du5J,EAAyBE,EAA4Bz5J,IAEzDy5J,QAyCZ9kG,EAAUgmG,SAAW,SAAUp4G,EAAMq4G,GACjC,IAAIpB,KA6CJ,OA3CIj3G,GACArgD,UAAEsK,KAAK+1C,EAAM,SAAUviD,EAAEumB,GACrB,IAAMs0I,EAAYt0I,EAAK0jD,GACjBvsD,EAAQ6I,EAAK7I,MACf3a,SAEJ,GAAkB,YAAd83J,GAAyC,aAAdA,EAE3B93J,GAAU,IAAIW,SAASga,SAEpB,GAAI,0BAA0BxP,KAAKwP,GAAQ,CAE9C,IACI3a,EAAS4Y,KAAKxK,MAAMuM,GACtB,MAAO7U,GACL3C,EAAOrC,MAAM,sEAAwE6Z,GAGpFxb,UAAE0T,QAAQ7S,IACXmD,EAAOrC,MAAM,oFAAsF6Z,QAIvG3a,GAAU2a,GAGdxb,UAAEsK,KAAK+Z,EAAK9jB,KAAM,WAEd,IAAIq4J,EAAen4J,KACfi4J,GAAyBpD,IACzBsD,EAAe54J,UAAE8N,IAAI8qJ,EAAc,SAAUC,GACzC,OAAOA,EAAej0J,QAAQ,QAAS,WAI/C,IAAIk0J,EAAcrmG,EAAUmmG,GAC5BE,EAAYH,GAAW13J,MAAM63J,EAAaj4J,GAC1Cy2J,EAAUtyJ,KAAK8zJ,OAMpBxB,IAIX,EAAA30I,EAAAvhB,SAAEoG,UAAUyE,GAAG,iBAAkB,SAAUtF,EAAG6W,IAC1C,EAAAmF,EAAAvhB,SAAEoc,GAAQu7I,KAAK,YACG,EAAAp2I,EAAAvhB,SAAEoc,GAAQ0vI,WAEhBjhJ,GAAG,yBAA0B,SAAUtF,GAEvC6uJ,GAAuB,aAAX7uJ,EAAEyS,OAIb,EAAAuJ,EAAAvhB,SAAEuF,EAAEsiB,QAAQtD,GAAG,WAChB3lB,UAAEyV,MAAMzH,QACJrH,EACAhG,UACA6G,UACA,UAOpB,EAAArG,EAAAC,SAAU,YAAaqxD,aAERA,qDC3iBf,SAAU3yD,GA+BN,SAASk5J,EAAYC,GACjBx4J,KAAK0lH,IAAM,EACX1lH,KAAKw4J,MAAQA,EAAQ,GAAIA,EAmB7B,SAASC,EAAYC,GAEjB,GAAOr5J,EAAOsgC,cAAc+4H,EAAU5/I,OAASzZ,EAAO4T,QAAQylJ,EAAU5/I,OAAmC,iBAAnB4/I,EAAU5/I,KAAlG,CAIA,IAAI6/I,EAAcD,EAAU1rJ,QACxBtJ,GACI80J,MAAO,IACPI,WAGR,SAAW9/I,GACa,iBAATA,EACPpV,EAAQk1J,OAAU9/I,GACXzZ,EAAO4T,QAAQ6F,GACtBpV,EAAQk1J,MAAQ9/I,EAEhBzZ,EAAOkG,OAAO7B,EAASoV,GAE3BpV,EAAQk1J,MAAQv5J,EAAOgO,IAAI3J,EAAQk1J,MAAO,SAAUh6J,GAChD,OAAOA,EAAIghB,gBATnB,CAWG84I,EAAU5/I,MAEb4/I,EAAUxkJ,MAAQ,IAAIqkJ,EAAY70J,EAAQ80J,OAC1CE,EAAU1rJ,QAAU,SAAUgI,GAG1B,GAAKhV,OAASgV,EAAMwT,SAAW,yBAAyBjd,KAAMyJ,EAAMwT,OAAO4R,WACtB,SAAjD/6B,EAAO2V,EAAMwT,QAAQ3nB,KAAK,mBAD9B,CAMA,IAAIy8B,EAAyB,aAAftoB,EAAM2D,KAAsBtZ,EAAOw5J,QAAQC,YAAa9jJ,EAAM4nB,OAAU,KAClFm8H,EAAYlnI,OAAOggH,aAAc78H,EAAM4nB,OAAQhd,cAC1Co5I,EAAQ,GAAIC,KAGhBjkJ,EAAMkgC,QAAsB,QAAZ5X,IACjB07H,GAAS,QAGRhkJ,EAAMmgC,SAAuB,SAAZ7X,IAClB07H,GAAS,SAIRhkJ,EAAMogC,UAAYpgC,EAAMmgC,SAAuB,SAAZ7X,IACpC07H,GAAS,SAGRhkJ,EAAMqgC,UAAwB,UAAZ/X,IACnB07H,GAAS,UAKThkJ,EAAMogC,SAAyB,MAAd2jH,IACjBA,EAAY,MAGZz7H,IACA27H,EAAUD,EAAQ17H,IAAY,GAE9By7H,IACAE,EAAUD,EAAQD,IAAc,GAI/B,SAASxtJ,KAAKytJ,KACfC,EAAWD,EAAM70J,QAAQ,SAAU,IAAM9E,EAAOw5J,QAAQK,UAAY57H,GAAWy7H,KAAiB,GAGpG,IAAI7kJ,EAAQwkJ,EAAUxkJ,MAClB0kJ,EAAQl1J,EAAQk1J,MAEpB,GAAKO,EAAQP,EAAM1kJ,EAAM3N,OAAQ0yJ,GAAY,CACzC,GAAK/kJ,EAAM3N,QAAUqyJ,EAAMz4J,OAAS,EAEhC,OADA+T,EAAM9B,QACCumJ,EAAYn4J,MAAMR,KAAME,WAE/BgU,EAAMklJ,WAGVllJ,EAAM9B,QAED+mJ,EAAQP,EAAM,GAAIK,IACnB/kJ,EAAMklJ,SAMtB,SAASD,EAAQv6J,EAAKq6J,GAElB,IADA,IAAIn5J,EAAOlB,EAAIwF,MAAM,KACZ/G,EAAI,EAAG0vB,EAAMjtB,EAAKK,OAAQ9C,EAAI0vB,EAAK1vB,IACxC,GAAK47J,EAASn5J,EAAKzC,IACf,OAAO,EAGf,OAAO,EAxJXgC,EAAOw5J,SACH9vJ,QAAS,MAET+vJ,aACIO,EAAG,YAAaC,EAAG,MAAOC,GAAI,SAAUC,GAAI,QAASC,GAAI,OAAQC,GAAI,MAAOC,GAAI,QAChFC,GAAI,WAAYC,GAAI,MAAOC,GAAI,QAASC,GAAI,SAAUC,GAAI,WAAYC,GAAI,MAAOC,GAAI,OACrFC,GAAI,OAAQC,GAAI,KAAMC,GAAI,QAASC,GAAI,OAAQC,GAAI,SAAUC,GAAI,MACjEC,GAAK,OACLC,GAAI,IAAKC,GAAI,IAAKC,GAAI,IAAKC,GAAI,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IACvEC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAM,IAClEC,IAAK,KAAMC,IAAK,KAAMC,IAAK,KAAMC,IAAK,KAAMC,IAAK,KAAMC,IAAK,KAAMC,IAAK,KAAMC,IAAK,KAClFC,IAAK,KAAMC,IAAK,MAAOC,IAAK,MAAOC,IAAK,MAAOC,IAAK,UAAWC,IAAK,SACpEC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,OAAQC,IAAK,IAAKC,IAAK,KAI9DC,cAAgB,IAAK,IAAK,KAE1B3D,WACIplI,IAAK,IAAKgpI,EAAK,IAAKC,EAAK,IAAKC,EAAK,IAAKC,EAAK,IAAKC,EAAK,IAAKC,EAAK,IAAKC,EAAK,IAC3E/D,EAAK,IAAKC,EAAK,IAAK+D,EAAK,IAAKC,IAAK,IAAKC,IAAK,IAAKC,IAAK,IAAK3pI,IAAK,IAAM4pI,IAAK,IAC5EC,IAAK,IAAMtjD,IAAK,IAAMrlF,KAAM,MAIpC11B,EAAOwK,KAAKxK,EAAOw5J,QAAQgE,aAAc,SAAU3zJ,EAAGtK,GAClDS,EAAOw5J,QAAQK,UAAWt6J,GAAQA,IAOtC25J,EAAYt5J,UAAUsH,IAAM,WACxB,OAAOvG,KAAK0lH,KAEhB6yC,EAAYt5J,UAAUm6J,IAAM,WACpBp5J,KAAKw4J,QACLxoI,aAAahwB,KAAK2vB,SAClB3vB,KAAK2vB,QAAUF,WAAWpwB,EAAOs2E,MAAM4iF,EAAYt5J,UAAUmT,MAAOpS,MAAOA,KAAKw4J,QAEpFx4J,KAAK0lH,OAET6yC,EAAYt5J,UAAUmT,MAAQ,WACtBpS,KAAKw4J,OACLxoI,aAAahwB,KAAK2vB,SAEtB3vB,KAAK0lH,IAAM,GA4GfrmH,EAAOwK,MAAO,UAAW,QAAS,YAAc,WAC5CxK,EAAO2V,MAAMsoB,QAASt9B,OAAWsS,IAAKmmJ,KA9J9C,CAiKIp5J,sCCpJJA,OAAOqG,GAAG4xJ,OAAS,SAAU5zJ,GACzB,IAQIi6J,EAHAtyJ,EAAOhM,OAAOkG,QAJd8c,YAAY,EACZu7I,aAAc,IAGiBl6J,GAC/B4G,EAAWtK,KACX69J,EAAYvzJ,EAASkrB,SAAS5U,IAGlC,IAAKvhB,OAAOrC,QAAQ6jE,YAAcxhE,OAAOrC,QAAQsjB,SAAWtgB,KAAKosE,cAAgByxF,GACzEx+J,OAAOrC,QAAQ6jE,YAAcx1D,EAAKuyJ,aAAeC,IACjDx+J,OAAOrC,QAAQsjB,SAAWjV,EAAKuyJ,aAAc,CAUjD,GANID,EAFAt+J,OAAOrC,QAAQ6jE,YAAcx1D,EAAKuyJ,aAAeC,EAElCA,GAAax+J,OAAOrC,QAAQsjB,SAAWtgB,KAAKosE,eAAiB/gE,EAAKuyJ,aAGlEC,EAAYxyJ,EAAKuyJ,cAG/Bv+J,OAAOqG,GAAG4xJ,OAAOwG,WAAazyJ,EAAKgX,WASpC,OARAhjB,OAAO0H,UAAUwG,QAAQ,gBAAiBvN,MAC1CX,OAAOqG,GAAG4xJ,OAAOwG,WAAY,EAC7Bz+J,OAAO,aAAayzE,SAChBjS,UAAW88F,GACZ,IAAM,WACLt+J,OAAO0H,UAAUwG,QAAQ,iBAAkBjD,UACpCjL,OAAOqG,GAAG4xJ,OAAOwG,YAErB99J,KAEP,IAAI+9J,EAAe1+J,OAAO,cAa1B,OAZI0+J,EAAY74I,GAAG,eACf64I,EAAY9/I,cACL5e,OAAOqG,GAAG4xJ,OAAOwG,WAG5Bz+J,OAAO0H,UAAUwG,QAAQ,iBACzBlO,OAAOrC,QAAQ6jE,UAAU88F,GAGzBluI,WAAW,WACPpwB,OAAO0H,UAAUwG,QAAQ,iBAAkBjD,IAC5C,KACItK,KAIf,OADAX,OAAO0H,UAAUwG,QAAQ,iBAAkBvN,MACpCA,iUC9EX7C,EAAA,QACAA,EAAA,IACYoG,IAAZpG,EAAA,IACYkwC,IAAZlwC,EAAA,KACA01D,EAAA11D,EAAA,IACAwkB,EAAAxkB,EAAA,IACA6gK,EAAA7gK,EAAA,SACAA,EAAA,gNAkBA,SAAS8gK,EAAav6J,GAClB,IAAI+K,GACAsV,MAAO,IACPzD,OAAQ,IACR49I,qBAAqB,EACrBC,iBAAkB,SAAUj4J,GACpBA,EAAE/E,UAAYA,UAAQc,QAAUgjI,EAAM//G,GAAG,aACzCglB,EAAI/lB,SAKO,iBAAnB,IAAOzgB,EAAP,YAAAlE,EAAOkE,MACPA,GACIqgB,MAAO7jB,UAAU,GACjBogB,OAAQpgB,UAAU,GAClB8L,GAAI9L,UAAU,IAElBwD,EAAUnE,UAAEgG,UAAW7B,EAASxD,UAAU,KAE9CwD,EAAUnE,UAAEgG,UAAWkJ,EAAU/K,GACjC,IAAIuhI,GAAQ,EAAA/iH,EAAAvhB,SAAE,eAAe8iB,SAAS,aAElC/f,EAAQsI,IACRi5H,EAAMt+H,KAAK,KAAMjD,EAAQsI,IAG7B,IAAIoyJ,EAAgB,KACpB,EAAAl8I,EAAAvhB,SAAE,eAAekJ,KAAK,WAClB,IAAIw0J,GAAe,EAAAn8I,EAAAvhB,SAAEX,MACrBo+J,EAAiBC,EAAa91J,IAAI,WAAa61J,EAAiBC,EAAa91J,IAAI,WAAa61J,IAGlG,IAAIE,EAAa,SAASC,EAAYx6I,EAAOzD,GAWzC,OAVA5c,EAAQqgB,MAASA,EAASA,GAASrgB,EAAQqgB,MAC3CrgB,EAAQ4c,OAAUA,EAAUA,GAAU5c,EAAQ4c,OAE9C2kH,EAAM18H,KACFs5D,WAAYr0D,KAAK47D,MAAM9oD,EAAS,GAAK,KACrCwhD,YAAat0D,KAAK47D,MAAMrlD,EAAQ,GAAK,KACrCA,MAAOA,EACPzD,OAAQA,EACRk+I,UAAW33I,SAASu3I,EAAc,IAAM,IAErCG,EAXM,CAYf76J,EAAQqgB,MAAOrgB,EAAQ4c,SAEzB,EAAA4B,EAAAvhB,SAAE,QAAQs1C,OAAOgvF,GAEjBA,EAAM9gH,QACN,EAAA65I,EAAAhhI,QAAOioG,GASP,IAAIw5B,GAAU,EAAAv8I,EAAAvhB,SAAE,gBACZqjD,EAAY,SAAUx+C,EAAUsS,GAChC,IAAI8L,GAAO,EAAA1B,EAAAvhB,SAAE6E,EAAUsS,GACvB,QAAI8L,EAAKzjB,SACLyjB,EAAK0Y,SACE,IAoBX4N,GAEApmB,WAAY,SAAU+yG,EAAGxN,IAChBwN,GAAKA,GAAKnzH,EAAQqgB,OAAWslG,GAAKA,GAAK3lH,EAAQ4c,SAChDg+I,EAAUznC,EAAGxN,GAEjBrpH,KAAKgkB,QAOTA,KAAM,WAEF,IAAIA,EAAO,YACP,EAAA9B,EAAAvhB,SAAEoG,UACG2F,IAAI,UAAWhJ,EAAQy6J,kBACvB3yJ,GAAG,UAAW9H,EAAQy6J,mBAC3B,EAAAx8I,EAAAoE,OAEuB,KADvB04I,GAAU,EAAAv8I,EAAAvhB,SAAE,iBACAR,QAAgBuD,EAAQw6J,qBAChCO,EAAQjzJ,GAAG,QAAS,WACZy5H,EAAM//G,GAAG,aACTglB,EAAI/lB,SAIhB8gH,EAAMjhH,OAENi6I,EAAYvuJ,QAAU1P,KA5ChB,SAAU8X,GACxB,GAA8D,KAA1D,EAAAoK,EAAAvhB,SAAE,oBAAqBmX,GAAStC,KAAK,UAAUrV,OAAnD,CAGA,GAAIuD,EAAQwwD,cACR,OAAOlQ,EAAUtgD,EAAQwwD,cAAep8C,GAGxCksC,EADuB,gCACS,EAAA9hC,EAAAvhB,SAAE,oBAAqBmX,KACvDksC,EAFuB,gCAES,EAAA9hC,EAAAvhB,SAAE,uBAAwBmX,KAE9DksC,EAJ2B,gCAIK,EAAA9hC,EAAAvhB,SAAE,oBAAqBmX,KAkC/C4mJ,CAAYz5B,IACZ,EAAA/iH,EAAAvhB,SAAEoG,UAAUwG,QAAQ,aAAc,QAASvN,QAE/CgkB,EAAKxmB,KAAKwC,MACVA,KAAKgkB,KAAOA,GAMhBG,KAAM,YACF,EAAAjC,EAAAvhB,SAAEoG,UAAUoH,OAAO,UAAWzK,EAAQy6J,kBACtCM,EAAQtwJ,SACRnO,KAAK8X,QAAQqM,OAG2B,KAApC,EAAAjC,EAAAvhB,SAAE,uBAAuBR,SACzB,EAAAwhB,EAAAqE,SAIJ,IAAIyW,EAAgB11B,SAAS01B,cACzBz8B,KAAK8X,QAAQzU,IAAIo5B,GAAet8B,QAChCs8B,EAAcF,QAGlB,EAAAra,EAAAvhB,SAAEoG,UAAUwG,QAAQ,aAAc,QAASvN,OAC3Ci+J,EAAYvuJ,QAAU,KACtB1P,KAAKg9B,UAMTllB,QAASmtH,EAKT1yH,OAAQ,WACJ0yH,EAAM1yH,SACNvS,KAAK8X,QAAU,MAMnBilB,QAAS,WACA/8B,KAAKujC,WACNvjC,KAAK2+J,cAAe,EAAAz8I,EAAAvhB,SAAE,uCAAuC4H,KACzD+X,OAAQ2kH,EAAM3kH,SACdyD,MAAOkhH,EAAMlhH,UAEjBkhH,EAAMhvF,OAAOj2C,KAAK2+J,cAClB3+J,KAAKujC,UAAW,IAOxBvG,OAAQ,WACAh9B,KAAKujC,WACLvjC,KAAKujC,UAAW,EAChBvjC,KAAK2+J,aAAapsJ,SAClBvS,KAAK2+J,aAAe,QAKhC,OAAOz0H,EAIX,IAAI00H,EAAU,WAUV,SAASC,EAAOxrD,EAAM/yD,EAAOw+G,EAASrmJ,GAC7B46F,EAAK0rD,aACN1rD,EAAK2rD,iBAETh/J,KAAKqzG,KAAOA,EACZrzG,KAAK8+J,QAAUA,EACf9+J,KAAKi/J,SAAW,SAAU/4J,GACtB,OAAoD,IAA7C44J,EAAQthK,KAAKwC,KAAMqzG,EAAK6rD,OAAQ7rD,EAAMntG,IAEjDlG,KAAK4jB,MAAO,EAAA1B,EAAAvhB,SAAE,qBAAqBm5B,KAAKwmB,GAAO78B,SAAS,uBACpDhL,GACAzY,KAAK4jB,KAAKH,SAAShL,GAEA,mBAAZqmJ,GACP9+J,KAAK4jB,KAAKpY,GAAG,QAASxL,KAAKi/J,UAE/B5rD,EAAK0rD,YAAY9oH,OAAOj2C,KAAK4jB,MAC7B5jB,KAAKgM,GAAKqnG,EAAKp+D,OAAO90C,OACtBkzG,EAAKp+D,OAAOj1C,KAAKgM,IAAMhM,KAuC3B,SAASm/J,EAAUC,EAAa52I,GAC5B,IAAIsC,EAAqB,QAAfs0I,GAAyB,EAAI,EACvC,OAAO,SAAU/wI,GACb,IAAIgxI,EAAUr/J,KAAKqzG,KAAK7qF,GACxB,GAAIxoB,KAAKgM,KAAe,GAAP8e,EAAYu0I,EAAQl/J,OAAS,EAAI,GAAI,CAClD2qB,GAAQuD,GAAQ,EAChBgxI,EAAQr/J,KAAKgM,GAAK8e,GAAKlH,KAAMkH,EAAM,EAAI,SAAW,SAAU9qB,KAAK4jB,MACjEy7I,EAAQ3sJ,OAAO1S,KAAKgM,GAAI,GACxBqzJ,EAAQ3sJ,OAAO1S,KAAKgM,GAAK8e,EAAK,EAAG9qB,MACjC,IAAK,IAAI3C,EAAI,EAAG4+H,EAAKojC,EAAQl/J,OAAQ9C,EAAI4+H,EAAI5+H,IAC3B,SAAVmrB,GAAqBxoB,KAAKqzG,KAAKisD,QAAUD,EAAQhiK,GAAG2O,KACpDhM,KAAKqzG,KAAKisD,OAASjiK,GAEvBgiK,EAAQhiK,GAAG2O,GAAK3O,EAGxB,OAAO2C,MAGf,SAASu/J,EAAW/2I,GAChB,OAAO,WACHxoB,KAAKqzG,KAAK7qF,GAAQ9V,OAAO1S,KAAKgM,GAAI,GAClC,IAAK,IAAI3O,EAAI,EAAG4+H,EAAKj8H,KAAKqzG,KAAK7qF,GAAQroB,OAAQ9C,EAAI4+H,EAAI5+H,IACnD2C,KAAKqzG,KAAK7qF,GAAQnrB,GAAG2O,GAAK3O,EAE9B2C,KAAK4jB,KAAKrR,UAUlBssJ,EAAO5/J,UAAUugK,OAASX,EAAO5/J,UAAUwgK,SAAWN,EAAS,OAAQ,UAQvEN,EAAO5/J,UAAUygK,SAAWb,EAAO5/J,UAAU0gK,UAAYR,EAAS,QAAS,UAK3EN,EAAO5/J,UAAUsT,OAASgtJ,EAAW,UASrCV,EAAO5/J,UAAU66B,KAAO,SAAUwmB,GAC9B,OAAOtgD,KAAK4jB,KAAKkW,KAAKwmB,IAQ1Bu+G,EAAO5/J,UAAU6/J,QAAU,SAAUA,GACjC,IAAI71J,EAAOjJ,KACX,QAAuB,IAAZ8+J,EACP,OAAO9+J,KAAK8+J,QAEZ9+J,KAAK4jB,KAAKzV,OAAO,QAASnO,KAAKi/J,UAC/Bj/J,KAAKi/J,SAAW,SAAU/4J,GACtB,OAA8D,IAAvD44J,EAAQthK,KAAKwC,KAAMiJ,EAAKoqG,KAAK6rD,OAAQj2J,EAAKoqG,KAAMntG,IAEpC,mBAAZ44J,GACP9+J,KAAK4jB,KAAKoY,MAAMh8B,KAAKi/J,WAKjC,IAaIW,EAAQ,SAAUvsD,EAAM/0F,EAAOk0B,EAAW/5B,EAAWonJ,GAC/CrtH,aAAqBjzC,YACvBizC,GAAY,EAAAtwB,EAAAvhB,SAAE6xC,IAGlBxyC,KAAKk/J,OAAS7rD,EAAK6rD,OACnBl/J,KAAKqzG,KAAOA,EACZrzG,KAAKgM,GAAKqnG,EAAKysD,MAAM3/J,OACrBH,KAAKi1C,QAAS,EAAA/yB,EAAAvhB,SAAE,qBAAqBm5B,KAAKxb,GAAOmF,SAAS,eAEtDo8I,IACA7/J,KAAKi1C,OAAO,GAAGjpC,GAAK6zJ,GAGxB7/J,KAAK4jB,MAAO,EAAA1B,EAAAvhB,SAAE,aAAas1C,OAAOj2C,KAAKi1C,QAAQxxB,SAAS,kBACxDzjB,KAAKod,MAAO,EAAA8E,EAAAvhB,SAAE,eAAes1C,OAAOzD,GAAW/uB,SAAS,qBAAqBlb,IAAI,SAAU8qG,EAAK6rD,OAAO5+I,OAAS,MAChHtgB,KAAKoxC,QA7Ba,GA8Bd34B,GACAzY,KAAKod,KAAKqG,SAAShL,GAEvB,IAAIpb,EAAIg2G,EAAKysD,MAAM3/J,OACfq4H,EAAMx4H,KACVqzG,EAAK0sD,KAAK9pH,OAAOj2C,KAAK4jB,MACtByvF,EAAKj2F,KAAK64B,OAAOj2C,KAAKod,MACtBi2F,EAAKysD,MAAMziK,GAAK2C,KAChB,IAAI8+J,EAAU,WACV,IAAIn6F,EACA0uC,EAAKisD,OAAS,KACd36F,EAAM0uC,EAAKysD,MAAMzsD,EAAKisD,SAClBliJ,KAAK+G,OACTwgD,EAAI/gD,KAAKu7B,YAAY,YACE,mBAAfwlB,EAAIq7F,QAA0Br7F,EAAIq7F,UAE9C3sD,EAAKisD,OAAS9mC,EAAIxsH,GAClBwsH,EAAIp7G,KAAK4G,OACTw0G,EAAI50G,KAAKH,SAAS,YACO,mBAAjB+0G,EAAIynC,UAA4BznC,EAAIynC,WACf,mBAArB5sD,EAAK6sD,aAA+B7sD,EAAK6sD,YAAY1nC,EAAK7zD,IAEjE3kE,KAAKi1C,OAAOjZ,MAIbh8B,KAAKi1C,OAAOjZ,MAAM8iI,IAHlBv7J,EAAOvC,IAAI,gEACXhB,KAAKi1C,OAAO6pH,QAAUA,GAI1BA,IACS,GAALzhK,EACAg2G,EAAK0sD,KAAKx3J,IAAI,UAAW,QAEzB8qG,EAAK0sD,KAAK/7I,QAOlB47I,EAAM3gK,UAAU0W,OAAS,WACrB3V,KAAKi1C,OAAOjZ,SAShB4jI,EAAM3gK,UAAUugK,OAASI,EAAM3gK,UAAUwgK,SAAWN,EAAS,OAAQ,SAQrES,EAAM3gK,UAAUygK,SAAWE,EAAM3gK,UAAU0gK,UAAYR,EAAS,QAAS,SAKzES,EAAM3gK,UAAUsT,OAASgtJ,EAAW,SAQpCK,EAAM3gK,UAAU66B,KAAO,SAAUA,GAC7B,OAAIA,GACA95B,KAAKod,KAAK0c,KAAKA,GACR95B,MAEAA,KAAKod,KAAK0c,QAUzB8lI,EAAM3gK,UAAUkhK,WAAa,SAAU/uH,GAMnC,OALKtqB,OAAOsqB,KACRpxC,KAAKod,KAAK7U,IAAI,WAAY6oC,GAC1BpxC,KAAKoxC,SAAWA,EAChBpxC,KAAKqzG,KAAK+sD,cAEPpgK,MAGX,IAYIqgK,EAAO,SAAUnB,EAAQzmJ,GACzBzY,KAAKk/J,OAASA,EACdl/J,KAAKgM,GAAKkzJ,EAAO7rD,KAAKlzG,OACtBH,KAAK8X,SAAU,EAAAoK,EAAAvhB,SAAE,eAAe8iB,SAAS,qBACzCzjB,KAAKod,MAAO,EAAA8E,EAAAvhB,SAAE,eAAe8iB,SAAS,oBACtCzjB,KAAK+/J,MAAO,EAAA79I,EAAAvhB,SAAE,aAAa8iB,SAAS,oBAAoBlb,IAAI,SAAU22J,EAAO5+I,OAAS,MACtFtgB,KAAKod,KAAK64B,OAAOj2C,KAAK+/J,MACtB//J,KAAKs/J,OACLt/J,KAAK8/J,SACL9/J,KAAKi1C,UACDx8B,GACAzY,KAAKod,KAAKqG,SAAShL,GAEvBymJ,EAAOj6B,MAAMntH,QAAQm+B,OAAOj2C,KAAK8X,QAAQm+B,OAAOj2C,KAAK+/J,MAAM9pH,OAAOj2C,KAAKod,OACvE8hJ,EAAO7rD,KAAK6rD,EAAO7rD,KAAKlzG,QAAUH,MAyJtC,SAAS4+J,EAAQ76I,EAAOzD,EAAQtU,GAC5B,IAAItI,MACEqgB,IAEFA,GADArgB,EAAU3F,OAAOgmB,IACDA,MAChBzD,EAAS5c,EAAQ4c,OACjBtU,EAAKtI,EAAQsI,IAEjBhM,KAAKsgB,OAASA,GAAU,IACxBtgB,KAAK+jB,MAAQA,GAAS,IACtB/jB,KAAKgM,GAAKA,EACVtI,EAAUnE,UAAEgG,UAAW7B,GACnBqgB,MAAO/jB,KAAK+jB,MACZzD,OAAQtgB,KAAKsgB,OACbtU,GAAIhM,KAAKgM,KAEbhM,KAAKilI,MAAQg5B,EAAYv6J,GAEzB1D,KAAKilI,MAAMntH,QAAQ2L,SAAS,cAC5BzjB,KAAKqzG,QACLrzG,KAAKsgK,QAAU,EAEf,IAAID,EAAKrgK,MAuXb,OA/hBAqgK,EAAKphK,UAAUmhK,WAAa,WAGxB,IAFA,IAAIvO,EAAe7xJ,KAAKswD,OAlCR,GAkCiC,EAC7CiwG,EAAevgK,KAAK++J,YAlCP,GAkCsC,EAC9C1hK,EAAI2C,KAAK8/J,MAAM3/J,OAAQ9C,KAAM,CAClC,IAAImjK,EAAyBxgK,KAAKk/J,OAAO5+I,OAASuxI,EAAe0O,EACjEvgK,KAAK8/J,MAAMziK,GAAG+f,KAAK7U,IAAI,SAAUi4J,GACjCxgK,KAAK+/J,KAAKx3J,IAAI,SAAUi4J,KAQhCH,EAAKphK,UAAU+/J,eAAiB,WAC5Bh/J,KAAK++J,aAAc,EAAA78I,EAAAvhB,SAAE,eAAe8iB,SAAS,uBAC7CzjB,KAAK8X,QAAQm+B,OAAOj2C,KAAK++J,cAY7BsB,EAAKphK,UAAUwhK,SAAW,SAAUniJ,EAAOk0B,EAAW/5B,EAAWonJ,GAG7D,OAFA,IAAID,EAAM5/J,KAAMse,EAAOk0B,EAAW/5B,EAAWonJ,GAC7C7/J,KAAKogK,aACEpgK,MASXqgK,EAAKphK,UAAUyhK,UAAY,SAAUpiJ,EAAO7F,GAQxC,OAPIzY,KAAKswD,QACLtwD,KAAKswD,OAAO/9C,SAEhBvS,KAAKswD,QAAU,EAAApuC,EAAAvhB,SAAE,aAAa00B,KAAK/W,GAAS,IAAImF,SAAS,gBACzDhL,GAAazY,KAAKswD,OAAO7sC,SAAShL,GAClCzY,KAAK8X,QAAQu1D,QAAQrtE,KAAKswD,QAC1BtwD,KAAKogK,aACEpgK,MAUXqgK,EAAKphK,UAAU0hK,UAAY,SAAUrgH,EAAOw+G,EAASrmJ,GAGjD,OAFA,IAAIomJ,EAAO7+J,KAAMsgD,EAAOw+G,EAASrmJ,GACjCzY,KAAKogK,aACEpgK,MAUXqgK,EAAKphK,UAAU2hK,QAAU,SAAUtgH,EAAOw+G,EAASrmJ,EAAWrH,GAG1D,OAFA,IAjVJ,SAAciiG,EAAM/yD,EAAOw+G,EAASrmJ,EAAWrH,GACtCiiG,EAAK0rD,aACN1rD,EAAK2rD,iBAIJ5tJ,IACDA,EAAM,KAGVpR,KAAKqzG,KAAOA,EACZrzG,KAAK8+J,QAAUA,EACf9+J,KAAKi/J,SAAW,SAAU/4J,GACtB,OAAoD,IAA7C44J,EAAQthK,KAAKwC,KAAMqzG,EAAK6rD,OAAQ7rD,EAAMntG,IAEjDlG,KAAK4jB,MAAO,EAAA1B,EAAAvhB,SAAE,WAAWm5B,KAAKwmB,GAAO35C,KAAK,OAAQyK,GAAKqS,SAAS,qBAC5DhL,GACAzY,KAAK4jB,KAAKH,SAAShL,GAEA,mBAAZqmJ,GACP9+J,KAAK4jB,KAAKoY,MAAMh8B,KAAKi/J,UAEzB5rD,EAAK0rD,YAAY9oH,OAAOj2C,KAAK4jB,MAC7B5jB,KAAKgM,GAAKqnG,EAAKp+D,OAAO90C,OACtBkzG,EAAKp+D,OAAOj1C,KAAKgM,IAAMhM,KAyTvB,CAASA,KAAMsgD,EAAOw+G,EAASrmJ,EAAWrH,GAC1CpR,KAAKogK,aACEpgK,MASXqgK,EAAKphK,UAAU4hK,UAAY,SAAUf,GACjC9/J,KAAK8/J,MAAMA,EAAM9zJ,IAAM8zJ,GAAOnqJ,UAOlC0qJ,EAAKphK,UAAU6hK,gBAAkB,WAC7B,OAAO9gK,KAAK8/J,MAAM9/J,KAAKs/J,SAM3Be,EAAKphK,UAAUklB,KAAO,WAClBnkB,KAAK8X,QAAQqM,QAMjBk8I,EAAKphK,UAAU+kB,KAAO,WAClBhkB,KAAK8X,QAAQkM,QAMjBq8I,EAAKphK,UAAUsT,OAAS,WACpBvS,KAAK8X,QAAQvF,UAkEjBqsJ,EAAO3/J,UAAUyhK,UAAY,SAAUpiJ,EAAO7F,GAE1C,OADAzY,KAAKqzG,KAAKrzG,KAAKsgK,SAASI,UAAUpiJ,EAAO7F,GAClCzY,MAUX4+J,EAAO3/J,UAAU0hK,UAAY,SAAUrgH,EAAOw+G,EAASrmJ,GAEnD,OADAzY,KAAKqzG,KAAKrzG,KAAKsgK,SAASK,UAAUrgH,EAAOw+G,EAASrmJ,GAC3CzY,MAWX4+J,EAAO3/J,UAAU2hK,QAAU,SAAUtgH,EAAOw+G,EAASrmJ,EAAWrH,GAE5D,OADApR,KAAKqzG,KAAKrzG,KAAKsgK,SAASM,QAAQtgH,EAAOw+G,EAASrmJ,EAAWrH,GACpDpR,MAUX4+J,EAAO3/J,UAAU8hK,UAAY,SAAUzgH,EAAOw+G,GAE1C,OADA9+J,KAAKqzG,KAAKrzG,KAAKsgK,SAASK,UAAUrgH,EAAOw+G,EAAS,8BAC3C9+J,MAUX4+J,EAAO3/J,UAAU+hK,UAAY,SAAU1gH,EAAOw+G,GAE1C,OADA9+J,KAAKqzG,KAAKrzG,KAAKsgK,SAASM,QAAQtgH,EAAOw+G,EAAS,4BACzC9+J,MAQX4+J,EAAO3/J,UAAU+/J,eAAiB,WAE9B,OADAh/J,KAAKqzG,KAAKrzG,KAAKsgK,SAAStB,iBACjBh/J,MAaX4+J,EAAO3/J,UAAUwhK,SAAW,SAAUniJ,EAAOk0B,EAAW/5B,EAAWonJ,GAE/D,OADA7/J,KAAKqzG,KAAKrzG,KAAKsgK,SAASG,SAASniJ,EAAOk0B,EAAW/5B,EAAWonJ,GACvD7/J,MAQX4+J,EAAO3/J,UAAUgiK,QAAU,SAAUxoJ,GAIjC,OAHA,IAAI4nJ,EAAKrgK,KAAMyY,GACfzY,KAAKqzG,KAAKrzG,KAAKsgK,SAASn8I,OACxBnkB,KAAKsgK,QAAUtgK,KAAKqzG,KAAKlzG,OAAS,EAC3BH,MAOX4+J,EAAO3/J,UAAUiiK,SAAW,WAMxB,OALAlhK,KAAKqzG,KAAKrzG,KAAKsgK,WAAWn8I,OACtBnkB,KAAKsgK,SAAWtgK,KAAKqzG,KAAKlzG,SAC1BH,KAAKsgK,QAAU,GAEnBtgK,KAAKqzG,KAAKrzG,KAAKsgK,SAASt8I,OACjBhkB,MAOX4+J,EAAO3/J,UAAUkiK,SAAW,WAMxB,OALAnhK,KAAKqzG,KAAKrzG,KAAKsgK,WAAWn8I,OACtBnkB,KAAKsgK,QAAU,IACftgK,KAAKsgK,QAAUtgK,KAAKqzG,KAAKlzG,OAAS,GAEtCH,KAAKqzG,KAAKrzG,KAAKsgK,SAASt8I,OACjBhkB,MAQX4+J,EAAO3/J,UAAUmiK,SAAW,SAAU17C,GASlC,OARA1lH,KAAKqzG,KAAKrzG,KAAKsgK,SAASn8I,OACxBnkB,KAAKsgK,QAAU56C,EACX1lH,KAAKsgK,QAAU,EACftgK,KAAKsgK,QAAUtgK,KAAKqzG,KAAKlzG,OAAS,EAC3BH,KAAKsgK,SAAWtgK,KAAKqzG,KAAKlzG,SACjCH,KAAKsgK,QAAU,GAEnBtgK,KAAKqzG,KAAKrzG,KAAKsgK,SAASt8I,OACjBhkB,MASX4+J,EAAO3/J,UAAUoiK,SAAW,SAAUC,EAAeC,GACjD,IAAIC,EAAqB,MAAXD,EAAmBvhK,KAAKsgK,QAAUgB,EAIhD,OAHe,MAAXC,IACAA,EAAUD,GAEPthK,KAAKqzG,KAAKmuD,GAAQ1B,MAAMyB,IAQnC3C,EAAO3/J,UAAUwiK,QAAU,SAAUD,GACjC,OAAOxhK,KAAKqzG,KAAKmuD,IAOrB5C,EAAO3/J,UAAU6hK,gBAAkB,WAC/B,OAAO9gK,KAAKqzG,KAAKrzG,KAAKsgK,SAASQ,mBAUnClC,EAAO3/J,UAAU4hK,UAAY,SAAUa,EAAa5B,GAChD,GAAa,MAATA,EAAe,CACf,IAAI0B,EAASE,EAAY11J,IAAM01J,EAC/B1hK,KAAKohK,SAASI,GAElBxhK,KAAKqzG,KAAKrzG,KAAKsgK,SAASO,eAA2B,IAAVf,EAAwB4B,EAAc5B,IAQnFlB,EAAO3/J,UAAU+kB,KAAO,WAGpB,OAFAhkB,KAAKilI,MAAMjhH,QACX,EAAA6uC,EAAAtlD,SAAQ,eAAgB2xJ,OAAQl/J,OACzBA,MAOX4+J,EAAO3/J,UAAUklB,KAAO,WAGpB,OAFAnkB,KAAKilI,MAAM9gH,QACX,EAAA0uC,EAAAtlD,SAAQ,eAAgB2xJ,OAAQl/J,OACzBA,MAMX4+J,EAAO3/J,UAAUsT,OAAS,WACtBvS,KAAKilI,MAAM9gH,OACXnkB,KAAKilI,MAAM1yH,UACX,EAAAsgD,EAAAtlD,SAAQ,iBAAkB2xJ,OAAQl/J,QAMtC4+J,EAAO3/J,UAAU89B,QAAU,WAEvB,OADA/8B,KAAKilI,MAAMloG,UACJ/8B,MAMX4+J,EAAO3/J,UAAU+9B,OAAS,WAEtB,OADAh9B,KAAKilI,MAAMjoG,SACJh9B,MAYX4+J,EAAO3/J,UAAUf,IAAM,SAAUuwG,GAC7B,IAAIkzD,KACAzC,EAASl/J,KAIT4hK,EAAc,uFAIdC,EAAU,IAAIhnJ,OAAO,cACZ+mJ,EACT,UAAYA,EAAc,gBACX,OAClBnzD,EAAQ,IAAItqG,QAAQ09J,EAAS,SAAUh0J,EAAKjQ,EAAM0gB,EAAOtS,EAAI81J,EAAWC,EAAOC,EAAQC,EAAKC,GAEzF,IAAIC,KAeJ,GAdY,SAFZvkK,EAAOA,GAAQA,EAAKgiB,gBAEEs/I,EAAO7rD,KAAKrnG,IAC9Bm2J,EAAM59J,KAAK26J,EAAO7rD,KAAKrnG,IAEvBpO,GADAA,EAAOmkK,IACQnkK,EAAKgiB,cACpBtB,EAAQ0jJ,EACRh2J,EAAKi2J,EACLH,EAAYI,GAEZC,EAAQjD,EAAO7rD,KAEnB/0F,EAAQA,IAAUA,EAAQ,IAAIna,QAAQ,KAAM,IAC5C69J,EAASA,IAAWA,EAAS,IAAI79J,QAAQ,KAAM,IAC/C29J,EAAYA,IAAcA,EAAY,IAAI39J,QAAQ,KAAM,IACxD+9J,EAAaA,IAAeA,EAAa,IAAI/9J,QAAQ,KAAM,IACvDvG,GAAQkkK,EACR,IAAK,IAAIzkK,EAAI8kK,EAAMhiK,OAAQ9C,KAAM,CAC7B,GAAIykK,GAAsB,SAARlkK,IAAoB0gB,IAAWA,GAAe,MAANtS,GACtD,IAAK,IAAIe,EAAIo1J,EAAM9kK,GAAGyiK,MAAM3/J,OAAQ4M,MAC5Bo1J,EAAM9kK,GAAGyiK,MAAM/yJ,GAAGkoC,OAAOnb,QAAUgoI,GAAaK,EAAM9kK,GAAGyiK,MAAM/yJ,GAAGkoC,OAAOnb,QAAUxb,GAAkB,SAAR1gB,IAAoB0gB,GAAe,MAANtS,IAC1H21J,EAAKp9J,KAAK49J,EAAM9kK,GAAGyiK,MAAM/yJ,IAIrC,GAAI+0J,GAAsB,UAARlkK,IAAqB0gB,IAAWA,GAAe,MAANtS,GACvD,IAASe,EAAIo1J,EAAM9kK,GAAG43C,OAAO90C,OAAQ4M,MAC7Bo1J,EAAM9kK,GAAG43C,OAAOloC,GAAG6W,KAAKkW,QAAUgoI,GAAaK,EAAM9kK,GAAG43C,OAAOloC,GAAG6W,KAAKkW,QAAUxb,GAAkB,UAAR1gB,IAAqB0gB,GAAe,MAANtS,IACzH21J,EAAKp9J,KAAK49J,EAAM9kK,GAAG43C,OAAOloC,IAIlCo1J,EAAM9kK,GAAGO,IAASukK,EAAM9kK,GAAGO,GAAMoO,IACjC21J,EAAKp9J,KAAK49J,EAAM9kK,GAAGO,GAAMoO,IAEjB,UAARpO,GAAoBukK,EAAM9kK,GAAGizD,QAC7BqxG,EAAKp9J,KAAK49J,EAAM9kK,GAAGizD,aAI3BqxG,EAAOA,EAAKlhK,OAAO0hK,KAM3B,IAHA,IAAIj4H,GACA/pC,OAAQwhK,EAAKxhK,QAER9C,EAAIskK,EAAKxhK,OAAQ9C,KAEtB,IAAK,IAAIyM,KADTogC,EAAI7sC,GAAKskK,EAAKtkK,GACKskK,EAAKtkK,GACdyM,KAAUogC,GACX,SAAUzsC,GACPysC,EAAIzsC,GAAK,WACL,IAAK,IAAIsP,EAAI/M,KAAKG,OAAQ4M,KACI,mBAAf/M,KAAK+M,GAAGtP,IACfuC,KAAK+M,GAAGtP,GAAG+C,MAAMR,KAAK+M,GAAI7M,YAJzC,CAQC4J,GAId,OAAOogC,GAQX00H,EAAO3/J,UAAUmjK,aAAe,WAG5B,IAFA,IAAI9hJ,EAAS,EACT+hJ,GAAkB,EAAAngJ,EAAAvhB,SAAE3D,QAAQsjB,SAthBhB,GACC,GAqhB4DgiJ,IACpEjlK,EAAI,EAAG2C,KAAKqhK,SAAShkK,GAAIA,IAC1B2C,KAAKqhK,SAAShkK,GAAG+f,KAAK7U,KAAK+X,OAAQ,OAAQpD,QAAS,UAAUkvD,cAAgB9rD,IAC9EA,EAAS9S,KAAKsF,IAAIuvJ,EAAiBriK,KAAKqhK,SAAShkK,GAAG+f,KAAKgvD,gBAEzD/uE,IAAM2C,KAAKqzG,KAAKrzG,KAAKsgK,SAAShB,QAC9Bt/J,KAAKqhK,SAAShkK,GAAG+f,KAAK7U,KAAK2U,QAAS,SAG5C,IAAK7f,EAAI,EAAG2C,KAAKqhK,SAAShkK,GAAIA,IAC1B2C,KAAKqhK,SAAShkK,GAAG+f,KAAK7U,KAAK+X,OAAQA,GAAUtgB,KAAKsgB,SAEtDtgB,KAAKqzG,KAAK,GAAG0sD,KAAKz/I,OAAOA,GACzBtgB,KAAKsgB,OAASA,EAniBE,GACC,GAkiBuC,EACxDtgB,KAAKilI,MAAMnhH,gBAAWjb,EAAW7I,KAAKsgB,SAQ1Cs+I,EAAO3/J,UAAUsjK,YAAc,WAC3B,OAAOviK,KAAKilI,MAAMntH,QAAQs0D,gBAAiB,EAAAlqD,EAAAvhB,SAAE3D,QAAQsjB,SAAYgiJ,KAOrE1D,EAAO3/J,UAAUujK,YAAc,WAC3B,OAAOxiK,KAAKqhK,SAASrhK,KAAKqzG,KAAKrzG,KAAKsgK,SAAShB,SAOjDV,EAAO3/J,UAAUwjK,kBAAoB,WACjC,OAAOziK,KAAKwiK,cAAcvtH,QAGvB2pH,EAh1BG,GAo1BdjiK,EAYIiiK,OAZJA,EAASvxH,EAAU/kC,UAAUs2J,EAAQ,sBACjC35J,gBAAiB,YAGrBtI,EASmBsoI,MATnBg5B,EAAc5wH,EAAU/kC,UAAU21J,EAAa,4BAC3CyE,eAAgB,aAGpB,EAAAhiK,EAAAC,SAAU,SAAUi+J,IACpB,EAAAl+J,EAAAC,SAAU,QAASs9J,KAGfW,WACe35B,MAAfg5B,8GCvjCJ,QAAA9gK,EAAA,QACAA,EAAA,uDAYA,SAAS6/B,EAAQh1B,EAAIikB,GACjB,IAAIvU,GAAM,EAAAwK,EAAAvhB,SAAEqH,GAMZ,YAJiB,IAANikB,IACPA,GAAI,GAGDvU,EAAI7N,KAAK,WACZ7J,KAAKujC,UAAYtX,IAYzB,SAAS02I,KACL,EAAAzgJ,EAAAvhB,SAAEoG,UAAUyE,GAAG,QAAS,oBAAqB,WACzC,IAAI4gH,GAAK,EAAAlqG,EAAAvhB,SAAEX,MAAMiqD,SAAS,eACtBmiE,EAAGpmF,SAAS,UACZomF,EAAGjtE,YAAY,UAEfitE,EAAG3oG,SAAS,YArCxBtmB,EAAA,KACAA,EAAA,MAyCA,EAAAuD,EAAAC,SAAU,SAAUq8B,IACpB,EAAAt8B,EAAAC,SAAU,aAAcgiK,KAGpB3lI,WACA2lI,2CCjDJ,QAAAxlK,EAAA,SACAA,EAAA,wDAMA,EAAAylK,EAAAjiK,SAAM,YACFgY,KAAMhZ,UAAMgZ,KAAKi0B,UACjBxrB,SAAU,SAASpZ,IACf,EAAAka,EAAAvhB,SAAO,uBAAwBqH,GAAI6B,KAAK,SAASxM,EAAG4oD,IAChD,EAAA/jC,EAAAvhB,SAAO,wCAAwCiqD,YAAY3E,MAGnE5Z,SAAU,SAASrkC,IACf,EAAAka,EAAAvhB,SAAO,kBAAmBqH,GAAIuK,0CCftC,QAAApV,EAAA,SACAA,EAAA,wDAMA,EAAAylK,EAAAjiK,SAAM,SACFgY,KAAMhZ,UAAMgZ,KAAKi0B,UACjBxrB,SAAU,SAASpZ,IACf,EAAAka,EAAAvhB,SAAO,oBAAqBqH,GAAI6B,KAAK,SAASxM,EAAG6oD,IAC7C,EAAAhkC,EAAAvhB,SAAO,wCAAwCiqD,YAAY1E,MAGnE7Z,SAAU,SAASrkC,IACf,EAAAka,EAAAvhB,SAAO,kBAAmBqH,GAAIuK","file":"aui-prototyping.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"@atlassian/aui\", [\"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@atlassian/aui\"] = factory(require(\"jquery\"));\n\telse\n\t\troot[\"AJS\"] = factory(root[\"jQuery\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__5__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 91);\n","import $ from 'jquery';\n// We provide the value from the import statement last, just in case jQuery or Zepto have been called with noConflict previously.\nexport default window.jQuery || window.Zepto || $;\n","const NAMESPACE = 'AJS';\n\nexport default function globalize (name, value) {\n if (typeof window[NAMESPACE] !== 'object') {\n window[NAMESPACE] = {};\n }\n\n return window[NAMESPACE][name] = value;\n}\n","import '@atlassian/aui/src/less/aui-reset.less';\n","import './aui.page.reset';\nimport '@atlassian/aui/src/less/aui-page-typography.less';\n","import skate from 'skatejs';\n\nconst auiSkate = skate.noConflict();\n\nexport default auiSkate;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__5__;","import './aui.page.reset';\nimport './aui.page.typography';\nimport '@atlassian/aui/src/less/aui-link.less';\n","import format from './format';\nimport globalize from './internal/globalize';\nimport keys from './internal/i18n/aui';\n\n/**\n * Returns the value defined in AJS.I18n.keys for the given key. If AJS.I18n.keys does not exist, or if the given key does not exist,\n * the key is returned - this could occur in plugin mode if the I18n transform is not performed;\n * or in flatpack mode if the i18n JS file is not loaded.\n */\nvar i18n = {\n keys: keys,\n getText: function (key, ...params) {\n if (Object.prototype.hasOwnProperty.call(this.keys, key)) {\n return format.apply(null, [this.keys[key]].concat(params));\n }\n\n return key;\n }\n};\n\nglobalize('I18n', i18n);\n\nexport default i18n;\n","import globalize from './globalize';\n\nfunction polyfillConsole (prop) {\n return function () {\n if (typeof console !== 'undefined' && console[prop]) {\n Function.prototype.apply.call(console[prop], console, arguments);\n }\n };\n}\n\nvar log = polyfillConsole('log');\nvar warn = polyfillConsole('warn');\nvar error = polyfillConsole('error');\n\nglobalize('error', error);\nglobalize('log', log);\nglobalize('warn', warn);\n\nexport {\n log,\n warn,\n error\n};\n","import globalize from './internal/globalize';\n\nvar keyCode = {\n ALT: 18,\n BACKSPACE: 8,\n CAPS_LOCK: 20,\n COMMA: 188,\n COMMAND: 91,\n\n // cmd\n COMMAND_LEFT: 91,\n COMMAND_RIGHT: 93,\n LEFT_SQUARE_BRACKET: 91, //This is 91 for keypress and 219 for keydown/keyup\n CONTROL: 17,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n INSERT: 45,\n LEFT: 37,\n\n // right cmd\n MENU: 93,\n NUMPAD_ADD: 107,\n NUMPAD_DECIMAL: 110,\n NUMPAD_DIVIDE: 111,\n NUMPAD_ENTER: 108,\n NUMPAD_MULTIPLY: 106,\n NUMPAD_SUBTRACT: 109,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n PERIOD: 190,\n RIGHT: 39,\n SHIFT: 16,\n SPACE: 32,\n TAB: 9,\n UP: 38,\n\n // cmd\n WINDOWS: 91\n};\n\nglobalize('keyCode', keyCode);\n\nexport default keyCode;\n","import $ from '../jquery';\nimport globalize from './globalize';\n\nvar has = Object.prototype.hasOwnProperty;\nvar deprecationCalls = [];\n\nfunction toSentenceCase (str) {\n str += '';\n\n if (!str) {\n return '';\n }\n\n return str.charAt(0).toUpperCase() + str.substring(1);\n}\n\nfunction getDeprecatedLocation (printFrameOffset) {\n var err = new Error();\n var stack = err.stack || err.stacktrace;\n var stackMessage = (stack && stack.replace(/^Error\\n/, '')) || '';\n\n if (stackMessage) {\n stackMessage = stackMessage.split('\\n');\n return stackMessage[printFrameOffset + 2];\n }\n return stackMessage;\n}\n\nfunction logger () {\n if (typeof console !== 'undefined' && console.warn) {\n Function.prototype.apply.call(console.warn, console, arguments);\n }\n}\n\n/**\n * @typedef {Object} DeprecationOptions\n * @property {string} sinceVersion the version this has been deprecated since\n * @property {string} removeInVersion the version this will be removed in\n * @property {string} [alternativeName] the name of an alternative to use\n * @property {string} [extraInfo] extra information to be printed at the end of the deprecation log\n * @property {string} [extraObject] an extra object that will be printed at the end\n * @property {string} [displayName] a human-readable name to show in the deprecation message. If not provided, it is inferred from the function or object being deprecated.\n * @property {string} [deprecationType] type of the deprecation to append to the start of the deprecation message. e.g. JS or CSS\n */\n\n/**\n * Return a function that logs a deprecation warning to the console the first time it is called from a certain location.\n * It will also print the stack frame of the calling function.\n *\n * @param {string} displayName the name of the thing being deprecated\n * @param {DeprecationOptions} options\n * @return {Function} that logs the warning and stack frame of the calling function. Takes in an optional parameter for the offset of\n * the stack frame to print, the default is 0. For example, 0 will log it for the line of the calling function,\n * -1 will print the location the logger was called from\n */\nfunction getShowDeprecationMessage (displayName, options) {\n // This can be used internally to pas in a showmessage fn\n if (typeof displayName === 'function') {\n return displayName;\n }\n\n var called = false;\n options = options || {};\n\n return function (printFrameOffset) {\n var deprecatedLocation = getDeprecatedLocation(printFrameOffset ? printFrameOffset : 1) || '';\n // Only log once if the stack frame doesn't exist to avoid spamming the console/test output\n if (!called || deprecationCalls.indexOf(deprecatedLocation) === -1) {\n deprecationCalls.push(deprecatedLocation);\n\n called = true;\n\n var deprecationType = (options.deprecationType + ' ') || '';\n\n var message = 'DEPRECATED ' + deprecationType + '- ' + toSentenceCase(displayName) +\n ' has been deprecated' + (options.sinceVersion ? ' since ' + options.sinceVersion : '') +\n ' and will be removed in ' + (options.removeInVersion || 'a future release') + '.';\n\n if (options.alternativeName) {\n message += ' Use ' + options.alternativeName + ' instead. ';\n }\n\n if (options.extraInfo) {\n message += ' ' + options.extraInfo;\n }\n\n if (deprecatedLocation === '') {\n deprecatedLocation = ' \\n ' + 'No stack trace of the deprecated usage is available in your current browser.';\n } else {\n deprecatedLocation = ' \\n ' + deprecatedLocation;\n }\n\n if (options.extraObject) {\n message += '\\n';\n logger(message, options.extraObject, deprecatedLocation);\n } else {\n logger(message, deprecatedLocation);\n }\n }\n };\n}\n\nfunction logCssDeprecation (selectorMap, newNode) {\n var displayName = selectorMap.options.displayName;\n displayName = displayName ? ' (' + displayName + ')' : '';\n\n var options = $.extend({\n deprecationType: 'CSS',\n extraObject: newNode\n }, selectorMap.options);\n\n getShowDeprecationMessage('\\'' + selectorMap.selector + '\\' pattern' + displayName, options)();\n}\n\n/**\n * Returns a wrapped version of the function that logs a deprecation warning when the function is used.\n * @param {Function} fn the fn to wrap\n * @param {string} displayName the name of the fn to be displayed in the message\n * @param {DeprecationOptions} options\n * @return {Function} wrapping the original function\n */\nfunction deprecateFunctionExpression(fn, displayName, options) {\n options = options || {};\n options.deprecationType = options.deprecationType || 'JS';\n\n var showDeprecationMessage = getShowDeprecationMessage(displayName || fn.name || 'this function', options);\n return function () {\n showDeprecationMessage();\n return fn.apply(this, arguments);\n };\n}\n\n/**\n * Returns a wrapped version of the constructor that logs a deprecation warning when the constructor is instantiated.\n * @param {Function} constructorFn the constructor function to wrap\n * @param {string} displayName the name of the fn to be displayed in the message\n * @param {DeprecationOptions} options\n * @return {Function} wrapping the original function\n */\nfunction deprecateConstructor(constructorFn, displayName, options) {\n options = options || {};\n options.deprecationType = options.deprecationType || 'JS';\n\n var deprecatedConstructor = deprecateFunctionExpression(constructorFn, displayName, options);\n deprecatedConstructor.prototype = constructorFn.prototype;\n $.extend(deprecatedConstructor, constructorFn); //copy static methods across;\n\n return deprecatedConstructor;\n}\n\n\nvar supportsProperties = false;\ntry {\n if (Object.defineProperty) {\n Object.defineProperty({}, 'blam', {get: function () {}, set: function () {}});\n supportsProperties = true;\n }\n} catch (e) {\n /* IE8 doesn't support on non-DOM elements */\n}\n\n/**\n* Wraps a \"value\" object property in a deprecation warning in browsers supporting Object.defineProperty\n* @param {Object} obj the object containing the property\n* @param {string} prop the name of the property to deprecate\n* @param {DeprecationOptions} options\n*/\nfunction deprecateValueProperty(obj, prop, options) {\n if (supportsProperties) {\n var oldVal = obj[prop];\n options = options || {};\n options.deprecationType = options.deprecationType || 'JS';\n\n var displayNameOrShowMessageFn = options.displayName || prop;\n var showDeprecationMessage = getShowDeprecationMessage(displayNameOrShowMessageFn, options);\n Object.defineProperty(obj, prop, {\n get: function () {\n showDeprecationMessage();\n return oldVal;\n },\n set: function (val) {\n oldVal = val;\n showDeprecationMessage();\n return val;\n }\n });\n }\n}\n\n/**\n * Wraps an object property in a deprecation warning, if possible. functions will always log warnings, but other\n * types of properties will only log in browsers supporting Object.defineProperty\n * @param {Object} obj the object containing the property\n * @param {string} prop the name of the property to deprecate\n * @param {DeprecationOptions} options\n */\nfunction deprecateObjectProperty(obj, prop, options) {\n if (typeof obj[prop] === 'function') {\n options = options || {};\n options.deprecationType = options.deprecationType || 'JS';\n\n var displayNameOrShowMessageFn = options.displayName || prop;\n obj[prop] = deprecateFunctionExpression(obj[prop], displayNameOrShowMessageFn, options);\n } else {\n deprecateValueProperty(obj, prop, options);\n }\n}\n\n/**\n * Wraps all an objects properties in a deprecation warning, if possible. functions will always log warnings, but other\n * types of properties will only log in browsers supporting Object.defineProperty\n * @param {Object} obj the object to be wrapped\n * @param {string} objDisplayPrefix the object's prefix to be used in logs\n * @param {DeprecationOptions} options\n * @param {string} options.alternativeNamePrefix a prefix for the alternative property name. Used to generate alternativeName per property.\n */\nfunction deprecateAllProperties(obj, objDisplayPrefix, options) {\n options = options || {};\n for (var attr in obj) {\n if (has.call(obj, attr)) {\n options.deprecationType = options.deprecationType || 'JS';\n options.displayName = objDisplayPrefix + attr;\n options.alternativeName = options.alternativeNamePrefix && (options.alternativeNamePrefix + attr);\n deprecateObjectProperty(obj, attr, $.extend({}, options));\n }\n }\n}\n\nfunction matchesSelector(el, selector) {\n return (el.matches || el.msMatchesSelector || el.webkitMatchesSelector || el.mozMatchesSelector || el.oMatchesSelector).call(el, selector);\n}\n\nfunction handleAddingSelector(options) {\n return function (selector) {\n var selectorMap = {\n selector: selector,\n options: options || {}\n };\n\n // Search if matches have already been added\n var matches = document.querySelectorAll(selector);\n for (var i = 0; i < matches.length; i++) {\n logCssDeprecation(selectorMap, matches[i]);\n }\n\n observeFutureChange(selectorMap);\n };\n}\n\n/**\n * Return a function that logs a deprecation warning to the console the first time it is called from a certain location.\n * It will also print the stack frame of the calling function.\n *\n * @param {string|Array} selectors a selector or list of selectors that match deprecated markup\n * @param {DeprecationOptions} options\n */\nfunction deprecateCSS(selectors, options) {\n if (typeof selectors === 'string') {\n selectors = [selectors];\n }\n\n selectors.forEach(handleAddingSelector(options));\n}\n\nfunction testAndHandleDeprecation(newNode) {\n return function (selectorMap) {\n if (matchesSelector(newNode, selectorMap.selector)) {\n logCssDeprecation(selectorMap, newNode);\n }\n };\n}\n\nconst deprecatedSelectorMap = [];\nlet observer;\n\nfunction observeFutureChange(selectorMap) {\n deprecatedSelectorMap.push(selectorMap);\n\n // Lazily instantiate a mutation observer because they're expensive.\n if (!observer) {\n observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n // TODO - should this also look at class changes, if possible?\n var addedNodes = mutation.addedNodes;\n\n for (var i = 0; i < addedNodes.length; i++) {\n var newNode = addedNodes[i];\n if (newNode.nodeType === 1) {\n deprecatedSelectorMap.forEach(testAndHandleDeprecation(newNode));\n }\n }\n });\n });\n\n var config = {\n childList: true,\n subtree: true\n };\n\n observer.observe(document, config);\n }\n}\n\nglobalize('deprecate', {\n fn: deprecateFunctionExpression,\n construct: deprecateConstructor,\n css: deprecateCSS,\n prop: deprecateObjectProperty,\n obj: deprecateAllProperties,\n propertyDeprecationSupported: supportsProperties,\n getMessageLogger: getShowDeprecationMessage\n});\n\nexport {\n deprecateFunctionExpression as fn,\n deprecateConstructor as construct,\n deprecateCSS as css,\n deprecateObjectProperty as prop,\n deprecateAllProperties as obj,\n supportsProperties as propertyDeprecationSupported,\n getShowDeprecationMessage as getMessageLogger\n};\n","\nexport default function (name, fn) {\n if (window.define) {\n var alias = window.define;\n alias(name, [], function () {\n return fn;\n });\n }\n return fn;\n}\n","( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\n\n$.ui = $.ui || {};\n\nreturn $.ui.version = \"1.12.1\";\n\n} ) );\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.iconography'; // todo: should only import what's needed from iconography\nimport './aui.page.links';\nimport './aui.pattern.basic';\nimport './aui.pattern.messages'; // because forms.less currently include interop styles for this pattern.\nimport '@atlassian/aui/src/less/forms.less';\n","// Backbone.js 1.3.3\n\n// (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global);\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.3.3';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return _[method](this[attribute]);\n };\n case 2: return function(value) {\n return _[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return _[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return _[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return _[method].apply(_, args);\n };\n }\n };\n var addUnderscoreMethods = function(Class, methods, attribute) {\n _.each(methods, function(length, method) {\n if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n return internalOn(this, name, callback, context);\n };\n\n // Guard the `listening` argument from the public API.\n var internalOn = function(obj, name, callback, context, listening) {\n obj._events = eventsApi(onApi, obj._events || {}, name, callback, {\n context: context,\n ctx: obj,\n listening: listening\n });\n\n if (listening) {\n var listeners = obj._listeners || (obj._listeners = {});\n listeners[listening.id] = listening;\n }\n\n return obj;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n var thisId = this._listenId || (this._listenId = _.uniqueId('l'));\n listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};\n }\n\n // Bind callbacks on obj, and keep track of them on listening.\n internalOn(obj, name, callback, this, listening);\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n }\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var i = 0, listening;\n var context = options.context, listeners = options.listeners;\n\n // Delete all events listeners and \"drop\" events.\n if (!name && !callback && !context) {\n var ids = _.keys(listeners);\n for (; i < ids.length; i++) {\n listening = listeners[ids[i]];\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n return;\n }\n\n var names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Replace events if there are any remaining. Otherwise, clean up.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n listening = handler.listening;\n if (listening && --listening.count === 0) {\n delete listeners[listening.id];\n delete listening.listeningTo[listening.objId];\n }\n }\n }\n\n // Update tail event if the list has any events. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n }\n return _.size(changed) ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Model#attributes`.\n addUnderscoreMethods(Model, modelMethods, 'attributes');\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(obj.attributes || obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = _.bind(comparator, this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n addUnderscoreMethods(Collection, collectionMethods, 'models');\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], _.bind(method, this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = _.bind(this.checkUrl, this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the hash and decode for matching.\n fragment = this.decodeFragment(fragment.replace(pathStripper, ''));\n\n if (this.fragment === fragment) return;\n this.fragment = fragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n","import '@atlassian/aui/src/less/aui-icons.less'; // todo: split the icon pattern definition from the various (deprecated) glyphs.\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport './aui.pattern.icon';\nimport '@atlassian/aui/src/less/aui-buttons.less';\n","import skate from './internal/skate';\nimport { getMessageLogger } from './internal/deprecation';\nimport { defaults, find } from 'underscore';\n\n/**\n * @typedef {\"small\"|\"medium\"|\"large\"} SpinnerSize\n */\n\n/**\n * @typedef {Object} SpinnerSizeConfig\n * @param {SpinnerSize} name\n * @param {number} px\n * @param {number} radius\n */\n\n/**\n * @enum {SpinnerSizeConfig}\n * @readonly\n */\nconst SIZE = {\n SMALL: {\n name: 'small',\n px: 20,\n radius: 9,\n },\n MEDIUM: {\n name: 'medium',\n px: 30,\n radius: 13.5,\n },\n LARGE: {\n name: 'large',\n px: 50,\n radius: 22.5,\n },\n};\n\nconst DEFAULTS = {\n filled: false,\n size: SIZE.MEDIUM.name,\n};\n\nconst filledAttributeReplacementText = `Add CSS to the parent element of the <aui-spinner>.\nUse CSS flexbox or grid to vertically align it.\nSee https://css-tricks.com/centering-css-complete-guide/ for techniques.`;\n\nconst filledAttributeDeprecatedLogger = getMessageLogger('<aui-spinner> filled attribute', {\n sinceVersion: '7.9.4',\n removeInVersion: '9.0.0',\n extraInfo: filledAttributeReplacementText\n});\n\nconst filledPropDeprecatedLogger = getMessageLogger('<aui-spinner> filled property', {\n sinceVersion: '7.9.4',\n removeInVersion: '9.0.0',\n extraInfo: filledAttributeReplacementText\n});\n\n/** @deprecated */\nfunction setMiddleTop(element, height) {\n const parent = element.parentNode;\n // only operate on elements, not documentFragment or comment nodes, etc.\n if (parent && parent.nodeType === 1) {\n const selfDomRect = element.getBoundingClientRect();\n const parentDomRect = parent.getBoundingClientRect();\n\n const parentMiddleTop = parentDomRect.top + parentDomRect.height / 2;\n const spinnerMiddleTop = selfDomRect.top + height / 2;\n\n element.querySelector('svg').style.top = `${parentMiddleTop - spinnerMiddleTop}px`;\n }\n}\n\n/** @deprecated */\nfunction removeMiddleTop(element) {\n delete element.querySelector('svg').style.top;\n}\n\nfunction validateSize(size) {\n let result = SIZE.MEDIUM.name;\n if (typeof size === 'string') {\n size = size.toLowerCase();\n const possibleSizes = Object.keys(SIZE).map(key => key.toLowerCase());\n\n if (possibleSizes.indexOf(size) > -1) {\n result = size;\n }\n }\n\n return result;\n}\n\nfunction setSize(element, size, radius) {\n const svg = element.querySelector('svg');\n const circle = element.querySelector('circle');\n\n svg.setAttribute('size', size);\n svg.setAttribute('height', size);\n svg.setAttribute('width', size);\n svg.setAttribute('viewBox', `0 0 ${size} ${size}`);\n\n const circleSize = size / 2;\n\n circle.setAttribute('cx', circleSize);\n circle.setAttribute('cy', circleSize);\n circle.setAttribute('r', radius);\n}\n\nfunction refresh(element) {\n const { px, radius } = find(SIZE, s => s.name === element._data.size) || SIZE.MEDIUM;\n setSize(element, px, radius);\n\n if (element._data.filled) {\n setMiddleTop(element, px);\n } else {\n removeMiddleTop(element);\n }\n}\n\nconst SpinnerEl = skate('aui-spinner', {\n template(element) {\n element.innerHTML = '<div class=\"aui-spinner spinner\"><svg focusable=\"false\"><circle></circle></svg></div>';\n refresh(element);\n },\n attached(element) {\n refresh(element);\n },\n attributes: {\n filled: {\n /** @deprecated */\n created: function(element) {\n filledAttributeDeprecatedLogger();\n element._data.filled = true;\n refresh(element);\n },\n /** @deprecated */\n removed: function(element) {\n element._data.filled = false;\n refresh(element);\n }\n },\n size(element, data) {\n element._data.size = validateSize(data.newValue);\n refresh(element);\n },\n },\n prototype: {\n get _data() {\n return this.__data || (this._data = defaults({}, DEFAULTS));\n },\n set _data(data) {\n return this.__data = data;\n },\n /** @deprecated */\n set filled(isFilled) {\n filledPropDeprecatedLogger();\n !!isFilled ? this.setAttribute('filled', '') : this.removeAttribute('filled');\n },\n set size(newSize) {\n const size = validateSize(newSize);\n this.setAttribute('size', size);\n },\n },\n});\n\nexport default SpinnerEl;\nexport {\n SIZE\n};\n","import $ from './jquery';\nimport { dim, undim } from './blanket';\nimport FocusManager from './focus-manager';\nimport {getTrigger,hasTrigger} from './trigger';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport widget from './internal/widget';\nimport CustomEvent from './polyfills/custom-event';\n\nexport const EVENT_PREFIX = '_aui-internal-layer-';\nconst GLOBAL_EVENT_PREFIX = '_aui-internal-layer-global-';\nconst LAYER_EVENT_PREFIX = 'aui-layer-';\nconst AUI_EVENT_PREFIX = 'aui-';\nvar $doc = $(document);\n\n// AUI-3708 - Abstracted to reflect code implemented upstream.\nfunction isTransitioning (el, prop) {\n var transition = window.getComputedStyle(el).transitionProperty;\n return transition ? transition.indexOf(prop) > -1 : false;\n}\n\nfunction onTransitionEnd (el, prop, func, once) {\n function handler (e) {\n if (prop !== e.propertyName) {\n return;\n }\n\n func.call(el);\n\n if (once) {\n el.removeEventListener('transitionend', handler);\n }\n }\n\n if (isTransitioning(el, prop)) {\n el.addEventListener('transitionend', handler);\n } else {\n func.call(el);\n }\n}\n\nfunction oneTransitionEnd (el, prop, func) {\n onTransitionEnd(el, prop, func, true);\n}\n// end AUI-3708\n\nfunction ariaHide ($el) {\n $el.attr('aria-hidden', 'true');\n}\n\nfunction ariaShow ($el) {\n $el.attr('aria-hidden', 'false');\n}\n\n/**\n* @return {bool} Returns false if at least one of the event handlers called .preventDefault(). Returns true otherwise.\n*/\nfunction triggerEvent ($el, deprecatedName, newNativeName) {\n var e1 = $.Event(EVENT_PREFIX + deprecatedName);\n var e2 = $.Event(GLOBAL_EVENT_PREFIX + deprecatedName);\n // TODO: Remove this 'aui-layer-' prefixed event once it is no longer used by inline dialog and dialog2.\n var nativeEvent = new CustomEvent(LAYER_EVENT_PREFIX + newNativeName, {\n bubbles: true,\n cancelable: true\n });\n var nativeEvent2 = new CustomEvent(AUI_EVENT_PREFIX + newNativeName, {\n bubbles: true,\n cancelable: true\n });\n\n $el.trigger(e1);\n $el.trigger(e2, [$el]);\n $el[0].dispatchEvent(nativeEvent);\n $el[0].dispatchEvent(nativeEvent2);\n\n return !e1.isDefaultPrevented() &&\n !e2.isDefaultPrevented() &&\n !nativeEvent.defaultPrevented &&\n !nativeEvent2.defaultPrevented;\n}\n\nfunction Layer (selector) {\n this.$el = $(selector || '<div class=\"aui-layer\" aria-hidden=\"true\"></div>');\n this.$el.addClass('aui-layer');\n}\n\nLayer.prototype = {\n /**\n * Returns the layer below the current layer if it exists.\n *\n * @returns {jQuery | undefined}\n */\n below: function () {\n return LayerManager.global.item(LayerManager.global.indexOf(this.$el) - 1);\n },\n\n /**\n * Returns the layer above the current layer if it exists.\n *\n * @returns {jQuery | undefined}\n */\n above: function () {\n return LayerManager.global.item(LayerManager.global.indexOf(this.$el) + 1);\n },\n\n /**\n * Sets the width and height of the layer.\n *\n * @param {Integer} width The width to set.\n * @param {Integer} height The height to set.\n *\n * @returns {Layer}\n */\n changeSize: function (width, height) {\n this.$el.css('width', width);\n this.$el.css('height', height === 'content' ? '' : height);\n return this;\n },\n\n /**\n * Binds a layer event.\n *\n * @param {String} event The event name to listen to.\n * @param {Function} fn The event handler.\n *\n * @returns {Layer}\n */\n on: function (event, fn) {\n this.$el.on(EVENT_PREFIX + event, fn);\n return this;\n },\n\n\n /**\n * Unbinds a layer event.\n *\n * @param {String} event The event name to unbind=.\n * @param {Function} fn Optional. The event handler.\n *\n * @returns {Layer}\n */\n off: function (event, fn) {\n this.$el.off(EVENT_PREFIX + event, fn);\n return this;\n },\n\n /**\n * Shows the layer.\n *\n * @returns {Layer}\n */\n show: function () {\n if (this.isVisible()) {\n ariaShow(this.$el);\n return this;\n }\n\n if (!triggerEvent(this.$el, 'beforeShow', 'show')) {\n return this;\n }\n\n // AUI-3708\n // Ensures that the display property is removed if it's been added\n // during hiding.\n if (this.$el.css('display') === 'none') {\n this.$el.css('display', '');\n }\n\n LayerManager.global.push(this.$el);\n\n return this;\n },\n\n /**\n * Hides the layer.\n *\n * @returns {Layer}\n */\n hide: function () {\n if (!this.isVisible()) {\n ariaHide(this.$el);\n return this;\n }\n\n if (!triggerEvent(this.$el, 'beforeHide', 'hide')) {\n return this;\n }\n\n // AUI-3708\n const thisLayer = this;\n oneTransitionEnd(this.$el.get(0), 'opacity', function () {\n if (!thisLayer.isVisible()) {\n this.style.display = 'none';\n }\n });\n\n LayerManager.global.popUntil(this.$el);\n\n return this;\n },\n\n /**\n * Checks to see if the layer is visible.\n *\n * @returns {Boolean}\n */\n isVisible: function () {\n return this.$el.attr('aria-hidden') === 'false';\n },\n\n /**\n * Removes the layer and cleans up internal state.\n *\n * @returns {undefined}\n */\n remove: function () {\n this.hide();\n this.$el.remove();\n this.$el = null;\n },\n\n /**\n * Returns whether or not the layer is blanketed.\n *\n * @returns {Boolean}\n */\n isBlanketed: function () {\n return this.$el.attr('data-aui-blanketed') === 'true';\n },\n\n /**\n * Returns whether or not the layer is persistent.\n *\n * @returns {Boolean}\n */\n isPersistent: function () {\n var modal = this.$el.attr('modal') || this.$el.attr('data-aui-modal');\n var isPersistent = this.$el[0].hasAttribute('persistent');\n\n return modal === 'true' || isPersistent;\n },\n\n _hideLayer: function (triggerBeforeEvents) {\n if (this.isPersistent() || this.isBlanketed()) {\n FocusManager.global.exit(this.$el);\n }\n\n if (triggerBeforeEvents) {\n triggerEvent(this.$el, 'beforeHide', 'hide');\n }\n\n this.$el.attr('aria-hidden', 'true');\n this.$el.css('z-index', this.$el.data('_aui-layer-cached-z-index') || '');\n this.$el.data('_aui-layer-cached-z-index', '');\n this.$el.trigger(EVENT_PREFIX + 'hide');\n this.$el.trigger(GLOBAL_EVENT_PREFIX + 'hide', [this.$el]);\n },\n\n _showLayer: function (zIndex) {\n if (!this.$el.parent().is('body')) {\n this.$el.appendTo(document.body);\n }\n\n this.$el.data('_aui-layer-cached-z-index', this.$el.css('z-index'));\n this.$el.css('z-index', zIndex);\n this.$el.attr('aria-hidden', 'false');\n\n if (this.isPersistent() || this.isBlanketed()) {\n FocusManager.global.enter(this.$el);\n }\n\n this.$el.trigger(EVENT_PREFIX + 'show');\n this.$el.trigger(GLOBAL_EVENT_PREFIX + 'show', [this.$el]);\n }\n};\n\nvar createLayer = widget('layer', Layer);\n\ncreateLayer.on = function (eventName, selector, fn) {\n $doc.on(GLOBAL_EVENT_PREFIX + eventName, selector, fn);\n return this;\n};\n\ncreateLayer.off = function (eventName, selector, fn) {\n $doc.off(GLOBAL_EVENT_PREFIX + eventName, selector, fn);\n return this;\n};\n\n\n\n// Layer Manager\n// -------------\n\n/**\n * Manages layers.\n *\n * There is a single global layer manager.\n * Additional instances can be created however this should generally only be used in tests.\n *\n * Layers are added by the push($el) method. Layers are removed by the\n * popUntil($el) method.\n *\n * popUntil's contract is that it pops all layers above & including the given\n * layer. This is used to support popping multiple layers.\n * Say we were showing a dropdown inside an inline dialog inside a dialog - we\n * have a stack of dialog layer, inline dialog layer, then dropdown layer. Calling\n * popUntil(dialog.$el) would hide all layers above & including the dialog.\n */\n\nfunction topIndexWhere (layerArr, fn) {\n var i = layerArr.length;\n\n while (i--) {\n if (fn(layerArr[i])) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction layerIndex (layerArr, $el) {\n return topIndexWhere(layerArr, function ($layer) {\n return $layer[0] === $el[0];\n });\n}\n\nfunction topBlanketedIndex (layerArr) {\n return topIndexWhere(layerArr, function ($layer) {\n return createLayer($layer).isBlanketed();\n });\n}\n\nfunction nextZIndex (layerArr) {\n var _nextZIndex;\n\n if (layerArr.length) {\n var $topEl = layerArr[layerArr.length - 1];\n var zIndex = parseInt($topEl.css('z-index'), 10);\n _nextZIndex = (isNaN(zIndex) ? 0 : zIndex) + 100;\n } else {\n _nextZIndex = 0;\n }\n\n return Math.max(3000, _nextZIndex);\n}\n\nfunction updateBlanket (stack, oldBlanketIndex) {\n var newTopBlanketedIndex = topBlanketedIndex(stack);\n\n if (oldBlanketIndex !== newTopBlanketedIndex) {\n if (newTopBlanketedIndex > -1) {\n dim(false, stack[newTopBlanketedIndex].css('z-index') - 20);\n } else {\n undim();\n }\n }\n}\n\nfunction popLayers (stack, stopIndex, forceClosePersistent) {\n if (stopIndex < 0) {\n return;\n }\n\n for (var a = stack.length - 1; a >= stopIndex; a--) {\n var $layer = stack[a];\n var layer = createLayer($layer);\n\n if (forceClosePersistent || !layer.isPersistent()) {\n layer._hideLayer(true);\n stack.splice(a, 1);\n }\n }\n}\n\nfunction getParentLayer (layer) {\n var trigger = getTrigger(layer);\n\n if (trigger) {\n return $(trigger).closest('.aui-layer').get(0);\n }\n}\n\nfunction LayerManager () {\n this._stack = [];\n}\n\nLayerManager.prototype = {\n /**\n * Pushes a layer onto the stack. The same element cannot be opened as a layer multiple times - if the given\n * element is already an open layer, this method throws an exception.\n *\n * @param {HTMLElement | String | jQuery} element The element to push onto the stack.\n *\n * @returns {LayerManager}\n */\n push: function (element) {\n var $el = (element instanceof $) ? element : $(element);\n if (layerIndex(this._stack, $el) >= 0) {\n throw new Error('The given element is already an active layer.');\n }\n\n this.popLayersBeside($el);\n\n var layer = createLayer($el);\n var zIndex = nextZIndex(this._stack);\n\n layer._showLayer(zIndex);\n\n if (layer.isBlanketed()) {\n dim(false, zIndex - 20);\n }\n\n this._stack.push($el);\n\n return this;\n },\n\n popLayersBeside: function (element) {\n const layer = $(element).get(0);\n if (!hasTrigger(layer)) {\n // We can't find this layer's trigger, we will pop all non-persistent until a blanket or the document\n var blanketedIndex = topBlanketedIndex(this._stack);\n popLayers(this._stack, ++blanketedIndex, false);\n return;\n }\n\n const parentLayer = getParentLayer(layer);\n if (parentLayer) {\n let parentIndex = this.indexOf(parentLayer);\n popLayers(this._stack, ++parentIndex, false);\n } else {\n popLayers(this._stack, 0, false);\n }\n },\n\n /**\n * Returns the index of the specified layer in the layer stack.\n *\n * @param {HTMLElement | String | jQuery} element The element to find in the stack.\n *\n * @returns {Number} the (zero-based) index of the element, or -1 if not in the stack.\n */\n indexOf: function (element) {\n return layerIndex(this._stack, $(element));\n },\n\n /**\n * Returns the item at the particular index or false.\n *\n * @param {Number} index The index of the element to get.\n *\n * @returns {jQuery | Boolean}\n */\n item: function (index) {\n return this._stack[index];\n },\n\n /**\n * Hides all layers in the stack.\n *\n * @returns {LayerManager}\n */\n hideAll: function () {\n this._stack.slice().reverse().forEach(function (element) {\n let layer = createLayer(element);\n if (layer.isBlanketed() || layer.isPersistent()) {\n return;\n }\n layer.hide();\n });\n\n return this;\n },\n\n /**\n * Gets the previous layer below the given layer, which is non modal and non persistent. If it finds a blanketed layer on the way\n * it returns it regardless if it is modal or not\n *\n * @param {HTMLElement | String | jQuery} element layer to start the search from.\n *\n * @returns {jQuery | null} the next matching layer or null if none found.\n */\n getNextLowerNonPersistentOrBlanketedLayer: function (element) {\n var $el = (element instanceof $) ? element : $(element);\n var index = layerIndex(this._stack, $el);\n\n if (index < 0) {\n return null;\n }\n\n var $nextEl;\n index--;\n while (index >= 0) {\n $nextEl = this._stack[index];\n var layer = createLayer($nextEl);\n\n if (!layer.isPersistent() || layer.isBlanketed()) {\n return $nextEl;\n }\n index--;\n }\n\n return null;\n },\n\n /**\n * Gets the next layer which is neither modal or blanketed, from the given layer.\n *\n * @param {HTMLElement | String | jQuery} element layer to start the search from.\n *\n * @returns {jQuery | null} the next non modal non blanketed layer or null if none found.\n */\n getNextHigherNonPeristentAndNonBlanketedLayer: function (element) {\n var $el = (element instanceof $) ? element : $(element);\n var index = layerIndex(this._stack, $el);\n\n if (index < 0) {\n return null;\n }\n\n var $nextEl;\n index++;\n while (index < this._stack.length) {\n $nextEl = this._stack[index];\n var layer = createLayer($nextEl);\n\n if (!(layer.isPersistent() || layer.isBlanketed())) {\n return $nextEl;\n }\n index++;\n }\n\n return null;\n },\n\n /**\n * Removes all non-modal layers above & including the given element. If the given element is not an active layer, this method\n * is a no-op. The given element will be removed regardless of whether or not it is modal.\n *\n * @param {HTMLElement | String | jQuery} element layer to pop.\n *\n * @returns {jQuery} The last layer that was popped, or null if no layer matching the given $el was found.\n */\n popUntil: function (element) {\n var $el = (element instanceof $) ? element : $(element);\n var index = layerIndex(this._stack, $el);\n\n if (index === -1) {\n return null;\n }\n\n var oldTopBlanketedIndex = topBlanketedIndex(this._stack);\n\n // Removes all layers above the current one.\n popLayers(this._stack, index + 1, createLayer($el).isBlanketed());\n\n // Removes the current layer.\n createLayer($el)._hideLayer();\n this._stack.splice(index, 1);\n\n updateBlanket(this._stack, oldTopBlanketedIndex);\n\n return $el;\n },\n\n /**\n * Gets the top layer, if it exists.\n *\n * @returns The layer on top of the stack, if it exists, otherwise null.\n */\n getTopLayer: function () {\n if (!this._stack.length) {\n return null;\n }\n\n var $topLayer = this._stack[this._stack.length - 1];\n\n return $topLayer;\n },\n\n /**\n * Pops the top layer, if it exists and it is non modal and non persistent.\n *\n * @returns The layer that was popped, if it was popped.\n */\n popTopIfNonPersistent: function () {\n var $topLayer = this.getTopLayer();\n var layer = createLayer($topLayer);\n\n if (!$topLayer || layer.isPersistent()) {\n return null;\n }\n\n return this.popUntil($topLayer);\n },\n\n /**\n * Pops all layers above and including the top blanketed layer. If layers exist but none are blanketed, this method\n * does nothing.\n *\n * @returns The blanketed layer that was popped, if it exists, otherwise null.\n */\n popUntilTopBlanketed: function () {\n var i = topBlanketedIndex(this._stack);\n\n if (i < 0) {\n return null;\n }\n\n var $topBlanketedLayer = this._stack[i];\n var layer = createLayer($topBlanketedLayer);\n\n if (layer.isPersistent()) {\n // We can't pop the blanketed layer, only the things ontop\n var $next = this.getNextHigherNonPeristentAndNonBlanketedLayer($topBlanketedLayer);\n if ($next) {\n var stopIndex = layerIndex(this._stack, $next);\n popLayers(this._stack, stopIndex, true);\n return $next;\n }\n return null;\n }\n\n popLayers(this._stack, i, true);\n updateBlanket(this._stack, i);\n return $topBlanketedLayer;\n },\n\n /**\n * Pops all layers above and including the top persistent layer. If layers exist but none are persistent, this method\n * does nothing.\n */\n popUntilTopPersistent: function () {\n var $toPop = LayerManager.global.getTopLayer();\n if (!$toPop) {\n return;\n }\n\n var stopIndex;\n var oldTopBlanketedIndex = topBlanketedIndex(this._stack);\n\n var toPop = createLayer($toPop);\n if (toPop.isPersistent()) {\n if (toPop.isBlanketed()) {\n return;\n } else {\n // Get the closest non modal layer below, stop at the first blanketed layer though, we don't want to pop below that\n $toPop = LayerManager.global.getNextLowerNonPersistentOrBlanketedLayer($toPop);\n toPop = createLayer($toPop);\n\n if ($toPop && !toPop.isPersistent()) {\n stopIndex = layerIndex(this._stack, $toPop);\n popLayers(this._stack, stopIndex, true);\n updateBlanket(this._stack, oldTopBlanketedIndex);\n } else {\n // Here we have a blanketed persistent layer\n return;\n }\n }\n } else {\n stopIndex = layerIndex(this._stack, $toPop);\n popLayers(this._stack, stopIndex, true);\n updateBlanket(this._stack, oldTopBlanketedIndex);\n }\n }\n};\n\n// LayerManager.global\n// -------------------\n\nfunction initCloseLayerOnEscPress() {\n $doc.on('keydown', function (e) {\n if (e.keyCode === keyCode.ESCAPE) {\n LayerManager.global.popUntilTopPersistent();\n e.preventDefault();\n }\n });\n}\n\nfunction initCloseLayerOnBlanketClick() {\n $doc.on('click', '.aui-blanket', function (e) {\n if (LayerManager.global.popUntilTopBlanketed()) {\n e.preventDefault();\n }\n });\n}\n\nfunction hasLayer($trigger) {\n if (!$trigger.length) {\n return false;\n }\n\n var layer = document.getElementById($trigger.attr('aria-controls'));\n return LayerManager.global.indexOf(layer) > -1;\n}\n\n// If it's a click on a trigger, do nothing.\n// If it's a click on a layer, close all layers above.\n// Otherwise, close all layers.\nfunction initCloseLayerOnOuterClick () {\n $doc.on('click', function (e) {\n var $target = $(e.target);\n if ($target.closest('.aui-blanket').length) {\n return;\n }\n\n var $trigger = $target.closest('[aria-controls]');\n var $layer = $target.closest('.aui-layer');\n if (!$layer.length && !hasLayer($trigger)) {\n const customEvent = $.Event('aui-close-layers-on-outer-click');\n $doc.trigger(customEvent);\n if (customEvent.isDefaultPrevented()) {\n e.preventDefault();\n return;\n }\n LayerManager.global.hideAll();\n return;\n }\n\n // Triggers take precedence over layers\n if (hasLayer($trigger)) {\n return;\n }\n\n if ($layer.length) {\n // We dont want to explicitly call close on a modal dialog if it happens to be next.\n // All blanketed layers should be below us, as otherwise the blanket should have caught the click.\n // We make sure we dont close a blanketed one explicitly as a hack, this is to fix the problem arising\n // from dialog2 triggers inside dialog2's having no aria controls, where the dialog2 that was just\n // opened would be closed instantly\n var $next = LayerManager.global.getNextHigherNonPeristentAndNonBlanketedLayer($layer);\n\n if ($next) {\n createLayer($next).hide();\n }\n }\n });\n}\n\ninitCloseLayerOnEscPress();\ninitCloseLayerOnBlanketClick();\ninitCloseLayerOnOuterClick();\n\nLayerManager.global = new LayerManager();\ncreateLayer.Manager = LayerManager;\n\nglobalize('layer', createLayer);\n\nexport default createLayer;\n","let CustomEvent;\n\n(function () {\n if (window.CustomEvent) {\n // Some browsers don't support constructable custom events yet.\n try {\n const ce = new window.CustomEvent('name', {\n bubbles: false,\n cancelable: true,\n detail: {\n x: 'y'\n }\n });\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n throw new Error('Could not prevent default');\n }\n if (ce.type !== 'name') {\n throw new Error('Could not set custom name');\n }\n if (ce.detail.x !== 'y') {\n throw new Error('Could not set detail');\n }\n\n CustomEvent = window.CustomEvent;\n return;\n } catch (e) {\n // polyfill it\n }\n }\n\n /**\n * @type CustomEvent\n * @param {String} event - the name of the event.\n * @param {Object} [params] - optional configuration of the custom event.\n * @param {Boolean} [params.cancelable=false] - A boolean indicating whether the event is cancelable (i.e., can call preventDefault and set the defaultPrevented property).\n * @param {Boolean} [params.bubbles=false] - A boolean indicating whether the event bubbles up through the DOM or not.\n * @param {Boolean} [params.detail] - The data passed when initializing the event.\n * @extends Event\n * @returns {Event}\n * @constructor\n */\n CustomEvent = function(event, params) {\n params = params || {bubbles: false, cancelable: false, detail: undefined};\n\n var evt = document.createEvent('CustomEvent');\n\n evt.initCustomEvent(event, !!params.bubbles, !!params.cancelable, params.detail);\n var origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch (e) {\n if (!this.defaultPrevented) {\n this.defaultPrevented = true;\n }\n }\n };\n\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n}());\n\nexport default CustomEvent;\n","import './aui.page.reset';\nimport '../internal/iconfont'; // todo: should only import the icons it needs\nimport './aui.pattern.icon';\nimport '@atlassian/aui/src/less/adg-iconfont.less';\nimport '@atlassian/aui/src/less/adg-missing-icons.less';\nimport '@atlassian/aui/src/less/adgs-icons.less';\n","// Underscore.js 1.9.1\n// http://underscorejs.org\n// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n this ||\n {};\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create;\n\n // Naked function reference for surrogate-prototype-swapping.\n var Ctor = function(){};\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for their old module API. If we're in\n // the browser, add `_` as a global object.\n // (`nodeType` is checked to ensure that `module`\n // and `exports` are not HTML elements.)\n if (typeof exports != 'undefined' && !exports.nodeType) {\n if (typeof module != 'undefined' && !module.nodeType && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.9.1';\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n var builtinIteratee;\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);\n if (value == null) return _.identity;\n if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);\n return _.property(value);\n };\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only argCount argument.\n _.iteratee = builtinIteratee = function(value, context) {\n return cb(value, context, Infinity);\n };\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n var restArguments = function(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n };\n\n // An internal function for creating a new object that inherits from another.\n var baseCreate = function(prototype) {\n if (!_.isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n };\n\n var shallowProperty = function(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n };\n\n var has = function(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n }\n\n var deepGet = function(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n };\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n var getLength = shallowProperty('length');\n var isArrayLike = function(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n _.each = _.forEach = function(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var keys = _.keys(obj);\n for (i = 0, length = keys.length; i < length; i++) {\n iteratee(obj[keys[i]], keys[i], obj);\n }\n }\n return obj;\n };\n\n // Return the results of applying the iteratee to each element.\n _.map = _.collect = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Create a reducing function iterating left or right.\n var createReduce = function(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[keys ? keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = keys ? keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n };\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n _.reduce = _.foldl = _.inject = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n _.reduceRight = _.foldr = createReduce(-1);\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n };\n\n // Return all the elements that pass a truth test.\n // Aliased as `select`.\n _.filter = _.select = function(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n _.each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, predicate, context) {\n return _.filter(obj, _.negate(cb(predicate)), context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Aliased as `all`.\n _.every = _.all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Aliased as `any`.\n _.some = _.any = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !isArrayLike(obj) && _.keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n };\n\n // Determine if the array or object contains a given item (using `===`).\n // Aliased as `includes` and `include`.\n _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return _.indexOf(obj, item, fromIndex) >= 0;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (_.isFunction(path)) {\n func = path;\n } else if (_.isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return _.map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, _.property(key));\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs) {\n return _.filter(obj, _.matcher(attrs));\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.find(obj, _.matcher(attrs));\n };\n\n // Return the maximum element (or element-based computation).\n _.max = function(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : _.values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n _.each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n };\n\n // Shuffle a collection.\n _.shuffle = function(obj) {\n return _.sample(obj, Infinity);\n };\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = _.values(obj);\n return obj[_.random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = _.random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n };\n\n // Sort the object's values by a criterion produced by an iteratee.\n _.sortBy = function(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return _.pluck(_.map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n _.each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n });\n\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (_.isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n };\n\n // Split a collection into two arrays: one whose elements all satisfy the given\n // predicate, and one whose elements all do not satisfy the predicate.\n _.partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return _.initial(array, array.length - n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n _.last = function(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return _.rest(array, Math.max(0, array.length - n));\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, Boolean);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, false);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = restArguments(function(array, otherArrays) {\n return _.difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!_.contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!_.contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = restArguments(function(arrays) {\n return _.uniq(flatten(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (_.contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!_.contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return _.filter(array, function(value){\n return !_.contains(rest, value);\n });\n });\n\n // Complement of _.zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n _.unzip = function(array) {\n var length = array && _.max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = _.pluck(array, index);\n }\n return result;\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = restArguments(_.unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of _.pairs.\n _.object = function(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // Generator function to create the findIndex and findLastIndex functions.\n var createPredicateIndexFinder = function(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n };\n\n // Returns the first index on an array-like that passes a predicate test.\n _.findIndex = createPredicateIndexFinder(1);\n _.findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n };\n\n // Generator function to create the indexOf and lastIndexOf functions.\n var createIndexFinder = function(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), _.isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n };\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n };\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n _.chunk = function(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Determines whether to execute a function as a constructor\n // or a normal function with the provided arguments.\n var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (_.isObject(result)) return result;\n return self;\n };\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = restArguments(function(func, context, args) {\n if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. _ acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n _.partial = restArguments(function(func, boundArgs) {\n var placeholder = _.partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n _.partial.placeholder = _;\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n _.bindAll = restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = _.bind(obj[key], obj);\n }\n });\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = _.partial(_.delay, _, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : _.now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var now = _.now();\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = _.delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return _.partial(wrapper, func);\n };\n\n // Returns a negated version of the passed-in predicate.\n _.negate = function(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n };\n\n // Returns a function that will only be executed on and after the Nth call.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Returns a function that will only be executed up to (but not including) the Nth call.\n _.before = function(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = _.partial(_.before, 2);\n\n _.restArguments = restArguments;\n\n // Object Functions\n // ----------------\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n var collectNonEnumProps = function(obj, keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n keys.push(prop);\n }\n }\n };\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n _.keys = function(obj) {\n if (!_.isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve all the property names of an object.\n _.allKeys = function(obj) {\n if (!_.isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Returns the results of applying the iteratee to each element of the object.\n // In contrast to _.map it returns an object.\n _.mapObject = function(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var keys = _.keys(obj),\n length = keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of _.object.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`.\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = createAssigner(_.allKeys);\n\n // Assigns a given object with all the own properties in the passed-in object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n _.extendOwn = _.assign = createAssigner(_.keys);\n\n // Returns the first key on an object that passes a predicate test.\n _.findKey = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = 0, length = keys.length; i < length; i++) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n };\n\n // Internal pick helper function to determine if `obj` has key `key`.\n var keyInObj = function(value, key, obj) {\n return key in obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (_.isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = _.allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (_.isFunction(iteratee)) {\n iteratee = _.negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = _.map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !_.contains(keys, key);\n };\n }\n return _.pick(obj, iteratee, context);\n });\n\n // Fill in a given object with default properties.\n _.defaults = createAssigner(_.allKeys, true);\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n _.create = function(prototype, props) {\n var result = baseCreate(prototype);\n if (props) _.extendOwn(result, props);\n return result;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Returns whether an object has a given set of `key:value` pairs.\n _.isMatch = function(object, attrs) {\n var keys = _.keys(attrs), length = keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n\n // Internal recursive comparison function for `isEqual`.\n var eq, deepEq;\n eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n };\n\n // Internal recursive comparison function for `isEqual`.\n deepEq = function(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n _.isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var keys = _.keys(a), key;\n length = keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (_.keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n return _.keys(obj).length === 0;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) === '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\n _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n\n // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n _.isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`?\n _.isNaN = function(obj) {\n return _.isNumber(obj) && isNaN(obj);\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, path) {\n if (!_.isArray(path)) {\n return has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iteratees.\n _.identity = function(value) {\n return value;\n };\n\n // Predicate-generating functions. Often useful outside of Underscore.\n _.constant = function(value) {\n return function() {\n return value;\n };\n };\n\n _.noop = function(){};\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indexes.\n _.property = function(path) {\n if (!_.isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n };\n\n // Generates a function for a given object that returns a given property.\n _.propertyOf = function(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !_.isArray(path) ? obj[path] : deepGet(obj, path);\n };\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n _.matcher = _.matches = function(attrs) {\n attrs = _.extendOwn({}, attrs);\n return function(obj) {\n return _.isMatch(obj, attrs);\n };\n };\n\n // Run a function **n** times.\n _.times = function(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // A (possibly faster) way to get the current timestamp as an integer.\n _.now = Date.now || function() {\n return new Date().getTime();\n };\n\n // List of HTML entities for escaping.\n var escapeMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;'\n };\n var unescapeMap = _.invert(escapeMap);\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n var createEscaper = function(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + _.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n _.escape = createEscaper(escapeMap);\n _.unescape = createEscaper(unescapeMap);\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n _.result = function(obj, path, fallback) {\n if (!_.isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return _.isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = _.isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n var escapeChar = function(match) {\n return '\\\\' + escapes[match];\n };\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n _.template = function(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n _.chain = function(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var chainResult = function(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n _.each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n _.each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n });\n\n // Extracts the result from a wrapped and chained object.\n _.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxy for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n _.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // AMD registration happens at the end for compatibility with AMD loaders\n // that may not enforce next-turn semantics on modules. Even though general\n // practice for AMD registration is to be anonymous, underscore registers\n // as a named module because, like jQuery, it is a base library that is\n // popular enough to be bundled in a third party lib, but not be part of\n // an AMD load request. Those cases could generate an error when an\n // anonymous define() is called outside of a loader request.\n if (typeof define == 'function' && define.amd) {\n define('underscore', [], function() {\n return _;\n });\n }\n}());\n","(function () {\n 'use strict';\n\n var DocumentFragment = window.DocumentFragment;\n var elProto = window.HTMLElement.prototype;\n var matchesSelector = (\n elProto.matches ||\n elProto.msMatchesSelector ||\n elProto.webkitMatchesSelector ||\n elProto.mozMatchesSelector ||\n elProto.oMatchesSelector\n );\n\n function getData (element, name) {\n if (element.__SKATE_TEMPLATE_HTML_DATA) {\n return element.__SKATE_TEMPLATE_HTML_DATA[name];\n }\n }\n\n function setData (element, name, value) {\n if (!element.__SKATE_TEMPLATE_HTML_DATA) {\n element.__SKATE_TEMPLATE_HTML_DATA = {};\n }\n\n element.__SKATE_TEMPLATE_HTML_DATA[name] = value;\n\n return element;\n }\n\n function createFragmentFromString (domString) {\n var specialMap = {\n caption: 'table',\n dd: 'dl',\n dt: 'dl',\n li: 'ul',\n tbody: 'table',\n td: 'tr',\n thead: 'table',\n tr: 'tbody'\n };\n\n var tag = domString.match(/\\s*<([^\\s>]+)/);\n var div = document.createElement(tag && specialMap[tag[1]] || 'div');\n\n div.innerHTML = domString;\n\n return createFragmentFromNodeList(div.childNodes);\n }\n\n function createFragmentFromNodeList (nodeList) {\n var frag = document.createDocumentFragment();\n\n while (nodeList && nodeList.length) {\n frag.appendChild(nodeList[0]);\n }\n\n return frag;\n }\n\n function getNodesBetween (startNode, endNode) {\n var nodes = [];\n var nextNode = startNode.nextSibling;\n\n while (nextNode !== endNode) {\n nodes.push(nextNode);\n nextNode = nextNode.nextSibling;\n }\n\n return nodes;\n }\n\n function findChildrenMatchingSelector (sourceNode, selector) {\n if (selector) {\n var found = sourceNode.querySelectorAll(selector);\n var foundLength = found.length;\n var filtered = [];\n\n for (var a = 0; a < foundLength; a++) {\n var node = found[a];\n\n if (node.parentNode === sourceNode) {\n filtered.push(node);\n }\n }\n\n return filtered;\n }\n\n return [].slice.call(sourceNode.childNodes) || [];\n }\n\n function htmlTemplateParentWrapper (element) {\n var contentNodes = getData(element, 'content');\n var contentNodesLen = contentNodes.length;\n\n return {\n childNodes: {\n get: function () {\n var nodes = [];\n\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n\n if (contentNode.isDefault) {\n continue;\n }\n\n nodes = nodes.concat(getNodesBetween(contentNode.startNode, contentNode.endNode));\n }\n\n return nodes;\n }\n },\n\n firstChild: {\n get: function () {\n var childNodes = this.childNodes;\n return childNodes.length && childNodes[0] || null;\n }\n },\n\n innerHTML: {\n get: function () {\n var html = '';\n var childNodes = this.childNodes;\n var childNodesLen = childNodes.length;\n\n for (var a = 0; a < childNodesLen; a++) {\n var childNode = childNodes[a];\n html += childNode.outerHTML || childNode.textContent;\n }\n\n return html;\n },\n set: function (html) {\n var targetFragment = createFragmentFromString(html);\n\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n var childNodes = getNodesBetween(contentNode.startNode, contentNode.endNode);\n\n // Remove all nodes (including default content).\n for (var b = 0; b < childNodes.length; b++) {\n var childNode = childNodes[b];\n childNode.parentNode.removeChild(childNode);\n }\n\n var foundNodes = findChildrenMatchingSelector(targetFragment, contentNode.selector);\n\n // Add any matched nodes from the given HTML.\n for (var c = 0; c < foundNodes.length; c++) {\n contentNode.container.insertBefore(foundNodes[c], contentNode.endNode);\n }\n\n // If no nodes were found, set the default content.\n if (foundNodes.length) {\n removeDefaultContent(contentNode);\n } else {\n addDefaultContent(contentNode);\n }\n }\n }\n },\n\n lastChild: {\n get: function () {\n for (var a = contentNodesLen - 1; a > -1; a--) {\n var contentNode = contentNodes[a];\n\n if (contentNode.isDefault) {\n continue;\n }\n\n var childNodes = this.childNodes;\n var childNodesLen = childNodes.length;\n\n return childNodes[childNodesLen - 1];\n }\n\n return null;\n }\n },\n\n outerHTML: {\n get: function () {\n var name = this.tagName.toLowerCase();\n var html = '<' + name;\n var attrs = this.attributes;\n\n if (attrs) {\n var attrsLength = attrs.length;\n\n for (var a = 0; a < attrsLength; a++) {\n var attr = attrs[a];\n html += ' ' + attr.nodeName + '=\"' + attr.nodeValue + '\"';\n }\n }\n\n html += '>';\n html += this.innerHTML;\n html += '</' + name + '>';\n\n return html;\n }\n },\n\n textContent: {\n get: function () {\n var textContent = '';\n var childNodes = this.childNodes;\n var childNodesLength = this.childNodes.length;\n\n for (var a = 0; a < childNodesLength; a++) {\n textContent += childNodes[a].textContent;\n }\n\n return textContent;\n },\n set: function (textContent) {\n var acceptsTextContent;\n\n // Removes all nodes (including default content).\n this.innerHTML = '';\n\n // Find the first content node without a selector.\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n\n if (!contentNode.selector) {\n acceptsTextContent = contentNode;\n break;\n }\n }\n\n // There may be no content nodes that accept text content.\n if (acceptsTextContent) {\n if (textContent) {\n removeDefaultContent(acceptsTextContent);\n acceptsTextContent.container.insertBefore(document.createTextNode(textContent), acceptsTextContent.endNode);\n } else {\n addDefaultContent(acceptsTextContent);\n }\n }\n }\n },\n\n appendChild: {\n value: function (node) {\n if (node instanceof DocumentFragment) {\n var fragChildNodes = node.childNodes;\n\n [].slice.call(fragChildNodes).forEach(function (node) {\n this.appendChild(node);\n }.bind(this));\n\n return this;\n }\n\n for (var b = 0; b < contentNodesLen; b++) {\n var contentNode = contentNodes[b];\n var contentSelector = contentNode.selector;\n\n if (!contentSelector || node instanceof window.HTMLElement && matchesSelector.call(node, contentSelector)) {\n removeDefaultContent(contentNode);\n contentNode.endNode.parentNode.insertBefore(node, contentNode.endNode);\n break;\n }\n }\n\n return this;\n }\n },\n\n insertAdjacentHTML: {\n value: function (where, html) {\n if (where === 'afterbegin') {\n this.insertBefore(createFragmentFromString(html), this.childNodes[0]);\n } else if (where === 'beforeend') {\n this.appendChild(createFragmentFromString(html));\n } else {\n element.insertAdjacentHTML(where, html);\n }\n\n return this;\n }\n },\n\n insertBefore: {\n value: function (node, referenceNode) {\n // If no reference node is supplied, we append. This also means that we\n // don't need to add / remove any default content because either there\n // aren't any nodes or appendChild will handle it.\n if (!referenceNode) {\n return this.appendChild(node);\n }\n\n // Handle document fragments.\n if (node instanceof DocumentFragment) {\n var fragChildNodes = node.childNodes;\n\n if (fragChildNodes) {\n var fragChildNodesLength = fragChildNodes.length;\n\n for (var a = 0; a < fragChildNodesLength; a++) {\n this.insertBefore(fragChildNodes[a], referenceNode);\n }\n }\n\n return this;\n }\n\n var hasFoundReferenceNode = false;\n\n // There's no reason to handle default content add / remove because:\n // 1. If no reference node is supplied, appendChild handles it.\n // 2. If a reference node is supplied, there already is content.\n // 3. If a reference node is invalid, an exception is thrown, but also\n // it's state would not change even if it wasn't.\n mainLoop:\n for (var b = 0; b < contentNodesLen; b++) {\n var contentNode = contentNodes[b];\n var betweenNodes = getNodesBetween(contentNode.startNode, contentNode.endNode);\n var betweenNodesLen = betweenNodes.length;\n\n for (var c = 0; c < betweenNodesLen; c++) {\n var betweenNode = betweenNodes[c];\n\n if (betweenNode === referenceNode) {\n hasFoundReferenceNode = true;\n }\n\n if (hasFoundReferenceNode) {\n var selector = contentNode.selector;\n\n if (!selector || matchesSelector.call(node, selector)) {\n betweenNode.parentNode.insertBefore(node, betweenNode);\n break mainLoop;\n }\n }\n }\n }\n\n // If no reference node was found as a child node of the element we must\n // throw an error. This works for both no child nodes, or if the\n // reference wasn't found to be a child node.\n if (!hasFoundReferenceNode) {\n throw new Error('DOMException 8: The node before which the new node is to be inserted is not a child of this node.');\n }\n\n return node;\n }\n },\n\n removeChild: {\n value: function (childNode) {\n var removed = false;\n\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n\n if (contentNode.container === childNode.parentNode) {\n contentNode.container.removeChild(childNode);\n removed = true;\n break;\n }\n\n if (contentNode.startNode.nextSibling === contentNode.endNode) {\n addDefaultContent(contentNode);\n }\n }\n\n if (!removed) {\n throw new Error('DOMException 8: The node in which you are trying to remove is not a child of this node.');\n }\n\n return childNode;\n }\n },\n\n replaceChild: {\n value: function (newChild, oldChild) {\n for (var a = 0; a < contentNodesLen; a++) {\n var contentNode = contentNodes[a];\n\n if (contentNode.container === oldChild.parentNode) {\n contentNode.container.replaceChild(newChild, oldChild);\n break;\n }\n }\n\n return this;\n }\n }\n };\n }\n\n function addDefaultContent (content) {\n var nodes = content.defaultNodes;\n var nodesLen = nodes.length;\n\n for (var a = 0; a < nodesLen; a++) {\n content.container.insertBefore(nodes[a], content.endNode);\n }\n\n content.isDefault = true;\n }\n\n function removeDefaultContent (content) {\n var nodes = content.defaultNodes;\n var nodesLen = nodes.length;\n\n for (var a = 0; a < nodesLen; a++) {\n var node = nodes[a];\n node.parentNode.removeChild(node);\n }\n\n content.isDefault = false;\n }\n\n function createProxyProperty (node, name) {\n return {\n get: function () {\n var value = node[name];\n\n if (typeof value === 'function') {\n return value.bind(node);\n }\n\n return value;\n },\n\n set: function (value) {\n node[name] = value;\n }\n };\n }\n\n function wrapNodeWith (node, wrapper) {\n var wrapped = {};\n\n for (var name in node) {\n var inWrapper = name in wrapper;\n\n if (inWrapper) {\n Object.defineProperty(wrapped, name, wrapper[name]);\n } else {\n Object.defineProperty(wrapped, name, createProxyProperty(node, name));\n }\n }\n\n return wrapped;\n }\n\n function cacheContentData (node) {\n var contentNodes = node.getElementsByTagName('content');\n var contentNodesLen = contentNodes && contentNodes.length;\n\n if (contentNodesLen) {\n var contentData = [];\n\n while (contentNodes.length) {\n var contentNode = contentNodes[0];\n var parentNode = contentNode.parentNode;\n var selector = contentNode.getAttribute('select');\n var startNode = document.createComment(' content ');\n var endNode = document.createComment(' /content ');\n\n contentData.push({\n container: parentNode,\n contentNode: contentNode,\n defaultNodes: [].slice.call(contentNode.childNodes),\n endNode: endNode,\n isDefault: true,\n selector: selector,\n startNode: startNode\n });\n\n parentNode.replaceChild(endNode, contentNode);\n parentNode.insertBefore(startNode, endNode);\n\n // Cache data in the comment that can be read if no content information\n // is cached. This allows seamless server-side rendering.\n startNode.textContent += JSON.stringify({\n defaultContent: contentNode.innerHTML,\n selector: selector\n }) + ' ';\n }\n\n setData(node, 'content', contentData);\n }\n }\n\n\n\n // Content Parser\n // --------------\n\n function parseCommentNode (node) {\n var data;\n var matches = node.textContent.match(/^ (\\/?)content (.*)/i);\n\n if (matches) {\n if (matches[2]) {\n try {\n data = JSON.parse(matches[2]);\n } catch (e) {\n throw new Error('Unable to parse content comment data: \"' + e + '\" in \"<!--' + node.textContent + '-->\".');\n }\n }\n\n return {\n data: data || {\n defaultContent: undefined,\n isDefault: undefined,\n selector: undefined\n },\n type: matches[1] ? 'close' : 'open'\n };\n }\n }\n\n function parseNodeForContent (node) {\n var a;\n var childNodes = node.childNodes;\n var childNodesLen = childNodes.length;\n var contentDatas = [];\n var lastContentNode;\n\n for (a = 0; a < childNodesLen; a++) {\n var childNode = childNodes[a];\n\n if (childNode.nodeType === 8) {\n var contentInfo = parseCommentNode(childNode);\n\n if (contentInfo) {\n if (contentInfo.type === 'open') {\n if (lastContentNode) {\n throw new Error('Cannot have an opening content placeholder after another content placeholder at the same level in the DOM tree: \"' + childNode.textContent + '\" in \"' + childNode.parentNode.innerHTML + '\".');\n }\n\n lastContentNode = {\n container: childNode.parentNode,\n contentNode: childNode,\n defaultNodes: contentInfo.data.defaultContent && createFragmentFromString(contentInfo.data.defaultContent).childNodes || [],\n isDefault: contentInfo.data.isDefault,\n selector: contentInfo.data.selector,\n startNode: childNode\n };\n } else if (contentInfo.type === 'close') {\n if (!lastContentNode) {\n throw new Error('Unmatched closing content placeholder: \"' + childNode.textContent + '\" in \"' + childNode.parentNode.innerHTML + '\".');\n }\n\n lastContentNode.endNode = childNode;\n contentDatas.push(lastContentNode);\n lastContentNode = undefined;\n }\n }\n } else {\n contentDatas = contentDatas.concat(parseNodeForContent(childNode));\n }\n }\n\n return contentDatas;\n }\n\n\n\n // Public API\n // ----------\n\n function skateTemplateHtml () {\n var template = [].slice.call(arguments).join('');\n\n return function (target) {\n var frag = createFragmentFromNodeList(target.childNodes);\n\n target.innerHTML = template;\n cacheContentData(target);\n\n if (frag.childNodes.length) {\n skateTemplateHtml.wrap(target).appendChild(frag);\n }\n };\n }\n\n skateTemplateHtml.wrap = function (node) {\n if (!getData(node, 'content')) {\n setData(node, 'content', parseNodeForContent(node));\n }\n\n return wrapNodeWith(node, htmlTemplateParentWrapper(node));\n };\n\n\n\n // Exporting\n // ---------\n\n // Global.\n window.skateTemplateHtml = skateTemplateHtml;\n\n // AMD.\n if (typeof define === 'function') {\n define(function () {\n return skateTemplateHtml;\n });\n }\n\n // CommonJS.\n if (typeof module === 'object') {\n module.exports = skateTemplateHtml;\n }\n})();\n","import $ from './jquery';\nimport keyCode from './key-code';\nimport amdify from './internal/amdify';\nimport skate from './internal/skate';\nimport state from './internal/state';\n\nexport function getTrigger (element) {\n return state(element).get('last-trigger') || findControllers(element)[0];\n}\n\nexport function setTrigger (element, trigger) {\n var validTrigger = trigger && trigger.nodeType && trigger.nodeType === 1;\n return state(element).set('last-trigger', validTrigger ? trigger : false);\n}\n\nexport function hasTrigger (element) {\n return !!getTrigger(element);\n}\n\nexport function doIfTrigger (element, callback) {\n var trigger = getTrigger(element);\n\n if (trigger) {\n callback(trigger);\n }\n}\n\nexport function forEachTrigger (element, callback) {\n return Array.prototype.forEach.call(findControllers(element), callback);\n}\n\nfunction isNestedAnchor(trigger, target) {\n var $closestAnchor = $(target).closest('a[href]', trigger);\n return !!$closestAnchor.length && $closestAnchor[0] !== trigger;\n}\n\nfunction findControllers(element) {\n return document.querySelectorAll(`[aria-controls=\"${element.id}\"]`);\n}\n\nfunction findControlled(trigger) {\n return document.getElementById(trigger.getAttribute('aria-controls'));\n}\n\nfunction isEnabled (element) {\n return element.getAttribute('aria-disabled') !== 'true';\n}\n\nfunction triggerMessage(trigger, e) {\n if (isEnabled(trigger)) {\n var component = findControlled(trigger);\n if (component && component.message) {\n component.message(e);\n }\n }\n}\n\n/**\n * Converts native or jQuery events in to a \"message\" object.\n * Basically helps us keep message types consistent.\n */\nfunction msg(e, type) {\n const { target, currentTarget, relatedTarget } = e;\n const { keyCode, which } = e;\n return {\n type,\n data: type === 'keydown' ? which || keyCode : undefined,\n target,\n currentTarget,\n relatedTarget,\n preventDefault: () => e.preventDefault()\n };\n}\n\nfunction focusingToControlledElement(trigger, e) {\n let relatedTarget = e.relatedTarget;\n // relatedTarget is always null in IE11 but activeElement is set to correct value\n if (!relatedTarget) {\n relatedTarget = document.activeElement;\n }\n const $component = $(findControlled(trigger));\n return $component.find(relatedTarget).length > 0;\n}\n\nconst events = {\n click(trigger, e) {\n if (!isNestedAnchor(trigger, e.target)) {\n triggerMessage(trigger, e);\n e.preventDefault();\n }\n },\n keydown(trigger, e) {\n const key = e.data;\n if (key === keyCode.ENTER || key === keyCode.SPACE) {\n e.preventDefault();\n e.type = 'click';\n events.click(trigger, e);\n }\n },\n mouseenter(trigger, e) {\n triggerMessage(trigger, e);\n },\n mouseleave(trigger, e) {\n triggerMessage(trigger, e);\n },\n focus(trigger, e) {\n triggerMessage(trigger, e);\n },\n blur(trigger, e) {\n if (focusingToControlledElement(trigger, e)){\n return;\n }\n triggerMessage(trigger, e);\n }\n};\n\nObject.keys(events).forEach(function(name) {\n const handler = events[name];\n $(document).on(`${name}.aui-trigger`, '[data-aui-trigger]', function(e) {\n handler(e.currentTarget, msg(e, name));\n });\n});\n\nskate('data-aui-trigger', {\n type: skate.type.ATTRIBUTE,\n prototype: {\n disable: function () {\n this.setAttribute('aria-disabled', 'true');\n },\n enable: function () {\n this.setAttribute('aria-disabled', 'false');\n },\n isEnabled: function () {\n return isEnabled(this);\n }\n }\n});\n\namdify('aui/trigger');\n","import '@atlassian/aui/src/less/basic.less';\n","import globalize from './internal/globalize';\n\nvar uniqueID;\nvar uniqueIDstring;\nvar uniqueIDcounter = 0;\n\n/**\n * Generate a unique ID string, checking the ID is not present in the DOM before\n * returning. Note uniqueID, uniqueIDstring, uniqueIDcounter = 0; set at top of\n * file.\n *\n * @param {String} prefix String to prepend to ID instead of default AUI prefix.\n *\n * @returns {String}\n */\nfunction generateUniqueId (prefix) {\n uniqueID = uniqueIDcounter++ + '';\n uniqueIDstring = prefix ? prefix + uniqueID : 'aui-uid-' + uniqueID;\n\n if (!document.getElementById(uniqueIDstring)) {\n return uniqueIDstring;\n } else {\n uniqueIDstring = uniqueIDstring + '-' + new Date().getTime();\n\n if (!document.getElementById(uniqueIDstring)) {\n return uniqueIDstring;\n } else {\n throw new Error('Timestamped fallback ID \"' + uniqueIDstring + '\" exists.');\n }\n }\n}\n\nglobalize('id', generateUniqueId);\n\nexport default generateUniqueId;\n","import globalize from './internal/globalize';\n\nconst special = {\n '<': '&lt;',\n '>': '&gt;',\n '&': '&amp;',\n '\"': '&quot;',\n '\\'': '&#39;',\n '`': '&#96;',\n};\n\nconst expr = new RegExp(`[${Object.keys(special).join('')}]`, 'g');\n\nfunction escapeHtml (str) {\n return str.replace(expr, (str) => special[str]);\n}\n\nglobalize('escapeHtml', escapeHtml);\n\nexport default escapeHtml;\n","\n/**\n * Force a re-compute of the style of an element.\n *\n * This is useful for CSS transitions and animations that need computed style changes to occur.\n * CSS transitions will fire when the computed value of the property they are transitioning changes.\n * This may not occur if the style changes get batched into one style change event by the browser.\n * We can force the browser to recognise the two different computed values by calling this function when we want it\n * to recompute the styles.\n *\n * For example, consider a transition on the opacity property.\n *\n * With recomputeStyle:\n * $parent.append($el); //opacity=0\n * recomputeStyle($el);\n * $el.addClass('visible'); //opacity=1\n * //Browser calculates value of opacity=0, and then transitions it to opacity=1\n *\n * Without recomputeStyle:\n * $parent.append($el); //opacity=0\n * $el.addClass('visible'); //opacity=1\n * //Browser calculates value of opacity=1 but no transition\n *\n * @param el The DOM or jQuery element for which style should be recomputed\n */\nfunction recomputeStyle (el) {\n el = el.jquery ? el[0] : el;\n window.getComputedStyle(el, null).getPropertyValue('left');\n}\n\nexport {\n recomputeStyle\n};\n","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n }\n})(function (exports) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \"use strict\";\n\n var ATTR_IGNORE = \"data-skate-ignore\";\n exports.ATTR_IGNORE = ATTR_IGNORE;\n var TYPE_ATTRIBUTE = \"a\";\n exports.TYPE_ATTRIBUTE = TYPE_ATTRIBUTE;\n var TYPE_CLASSNAME = \"c\";\n exports.TYPE_CLASSNAME = TYPE_CLASSNAME;\n var TYPE_ELEMENT = \"t\";\n exports.TYPE_ELEMENT = TYPE_ELEMENT;\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"./constants\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require(\"./constants\"));\n }\n})(function (exports, _constants) {\n\n /**\n * Checks {}.hasOwnProperty in a safe way.\n *\n * @param {Object} obj The object the property is on.\n * @param {String} key The object key to check.\n *\n * @returns {Boolean}\n */\n \"use strict\";\n\n exports.hasOwn = hasOwn;\n\n /**\n * Camel-cases the specified string.\n *\n * @param {String} str The string to camel-case.\n *\n * @returns {String}\n */\n exports.camelCase = camelCase;\n\n /**\n * Returns whether or not the source element contains the target element.\n * This is for browsers that don't support Element.prototype.contains on an\n * HTMLUnknownElement.\n *\n * @param {HTMLElement} source The source element.\n * @param {HTMLElement} target The target element.\n *\n * @returns {Boolean}\n */\n exports.elementContains = elementContains;\n\n /**\n * Returns a function that will prevent more than one call in a single clock\n * tick.\n *\n * @param {Function} fn The function to call.\n *\n * @returns {Function}\n */\n exports.debounce = debounce;\n\n /**\n * Returns whether or not the specified element has been selectively ignored.\n *\n * @param {Element} element The element to check and traverse up from.\n *\n * @returns {Boolean}\n */\n exports.getClosestIgnoredElement = getClosestIgnoredElement;\n\n /**\n * Merges the second argument into the first.\n *\n * @param {Object} child The object to merge into.\n * @param {Object} parent The object to merge from.\n * @param {Boolean} overwrite Whether or not to overwrite properties on the child.\n *\n * @returns {Object} Returns the child object.\n */\n exports.inherit = inherit;\n\n /**\n * Traverses an object checking hasOwnProperty.\n *\n * @param {Object} obj The object to traverse.\n * @param {Function} fn The function to call for each item in the object.\n *\n * @returns {undefined}\n */\n exports.objEach = objEach;\n exports.supportsNativeCustomElements = supportsNativeCustomElements;\n exports.isValidNativeCustomElementName = isValidNativeCustomElementName;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \"use strict\";\n\n var ATTR_IGNORE = _constants.ATTR_IGNORE;\n var elementPrototype = window.HTMLElement.prototype;\n exports.elementPrototype = elementPrototype;\n var elementPrototypeContains = elementPrototype.contains;\n function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n function camelCase(str) {\n return str.split(/-/g).map(function (str, index) {\n return index === 0 ? str : str[0].toUpperCase() + str.substring(1);\n }).join(\"\");\n }\n\n function elementContains(source, target) {\n // The document element does not have the contains method in IE.\n if (source === document && !source.contains) {\n return document.head.contains(target) || document.body.contains(target);\n }\n\n return source.contains ? source.contains(target) : elementPrototypeContains.call(source, target);\n }\n\n function debounce(fn) {\n var called = false;\n\n return function () {\n if (!called) {\n called = true;\n setTimeout(function () {\n called = false;\n fn();\n }, 1);\n }\n };\n }\n\n function getClosestIgnoredElement(element) {\n var parent = element;\n\n // e.g. document doesn't have a function hasAttribute; no need to go further up\n while (parent instanceof Element) {\n if (parent.hasAttribute(ATTR_IGNORE)) {\n return parent;\n }\n\n parent = parent.parentNode;\n }\n }\n\n function inherit(child, parent, overwrite) {\n var names = Object.getOwnPropertyNames(parent);\n var namesLen = names.length;\n\n for (var a = 0; a < namesLen; a++) {\n var name = names[a];\n\n if (overwrite || child[name] === undefined) {\n var desc = Object.getOwnPropertyDescriptor(parent, name);\n var shouldDefineProps = desc.get || desc.set || !desc.writable || !desc.enumerable || !desc.configurable;\n\n if (shouldDefineProps) {\n Object.defineProperty(child, name, desc);\n } else {\n child[name] = parent[name];\n }\n }\n }\n\n return child;\n }\n\n function objEach(obj, fn) {\n for (var a in obj) {\n if (hasOwn(obj, a)) {\n fn(obj[a], a);\n }\n }\n }\n\n function supportsNativeCustomElements() {\n return typeof document.registerElement === \"function\";\n }\n\n function isValidNativeCustomElementName(name) {\n return name.indexOf(\"-\") > 0;\n }\n});","\nfunction state (element) {\n return {\n /**\n * sets an internal state on a component element\n * @param element the element to which the state will be added\n * @param stateName the name of the state\n * @param stateValue the value that the state will be changed to\n */\n set: function (stateName, stateValue) {\n if (element._state === undefined) {\n element._state = {};\n }\n\n element._state[stateName] = stateValue;\n },\n\n /**\n * gets an internal state on a component element\n * @param element the element to which the state will be added\n * @param stateName the name of the state\n */\n get: function (stateName) {\n if (element._state) {\n return element._state[stateName];\n }\n }\n };\n}\n\nexport default state;\n","import $ from '../jquery';\n\n/**\n * @param {string} name The name of the widget to use in any messaging.\n * @param {function(new:{ $el: jQuery }, ?jQuery, ?Object)} Ctor\n * A constructor which will only ever be called with \"new\". It must take a JQuery object as the first\n * parameter, or generate one if not provided. The second parameter will be a configuration object.\n * The returned object must have an $el property and a setOptions function.\n * @constructor\n */\nexport default function (name, Ctor) {\n var dataAttr = '_aui-widget-' + name;\n return function (selectorOrOptions, maybeOptions) {\n var selector;\n var options;\n if ($.isPlainObject(selectorOrOptions)) {\n options = selectorOrOptions;\n } else {\n selector = selectorOrOptions;\n options = maybeOptions;\n }\n\n var $el = selector && $(selector);\n\n var widget;\n if (!$el || !$el.data(dataAttr)) {\n widget = new Ctor($el, options || {});\n $el = widget.$el;\n $el.data(dataAttr, widget);\n } else {\n widget = $el.data(dataAttr);\n // options are discarded if $el has already been constructed\n }\n\n return widget;\n };\n}\n","import './aui.page.reset';\nimport './aui.page.links';\nimport '@atlassian/aui/src/less/aui-avatars.less';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport '../internal/iconfont'; // todo: should only import what's needed from iconography\nimport '@atlassian/aui/src/less/messages.less';\n","import '@atlassian/aui/src/js/aui/trigger';\nexport {};\n","import $ from './jquery';\nimport '@atlassian/tipsy/src/javascripts/jquery.tipsy';\n\nconst AUI_TOOLTIP_CLASS_NAME = 'aui-tooltip';\n\nfunction handleStringOption ($self, stringOption) {\n // Pass string values straight to tipsy\n $self.tipsy(stringOption);\n return $self;\n}\n\nfunction bindTooltip ($self, options) {\n $self.tipsy(options);\n\n const triggerIsHover = options.trigger === 'hover' || !options.trigger && $self.tipsy.defaults.trigger === 'hover';\n const hideOnClick = options && options.hideOnClick && triggerIsHover;\n if (hideOnClick) {\n const onClick = function() {\n $(this).tipsy('hide');\n };\n\n if (options.live) {\n $self.on('click.tipsy', options.live, onClick);\n } else {\n $self.on('click.tipsy', onClick);\n }\n }\n return $self;\n}\n\nfunction getTipsyObject (el) {\n return $(el).data('tipsy');\n}\n\n/**\n * If a given selector has been initialised as a tooltip, returns the tooltip element.\n * Otherwise, returns an empty jQuery object so calls are still chainable yet benign.\n * @param el\n * @returns {jQuery}\n */\nfunction maybeTooltip (el) {\n const tipsy = getTipsyObject(el);\n if (tipsy) {\n return tipsy.$tip;\n } else {\n return $();\n }\n}\n\nfunction findAllTooltips () {\n return $(document.getElementsByClassName(AUI_TOOLTIP_CLASS_NAME));\n}\n\n$.fn.tooltip = function (options) {\n const allOptions = $.extend({}, $.fn.tooltip.defaults, typeof options === 'string' ? {} : options);\n\n // Always add AUI's tooltip class name to tipsies created by AUI.\n const { className } = allOptions;\n if (typeof className === 'string') {\n allOptions.className = `${AUI_TOOLTIP_CLASS_NAME} ${className}`\n } else if (typeof className === 'function') {\n allOptions.className = (...args) => `${AUI_TOOLTIP_CLASS_NAME} ${className.apply(undefined, args)}`;\n } else {\n allOptions.className = AUI_TOOLTIP_CLASS_NAME;\n }\n\n function init() {\n const $this = $(this);\n if (typeof options === 'string') {\n handleStringOption($this, options);\n } else {\n bindTooltip($this, allOptions);\n }\n return $this;\n }\n\n // Handle live option\n if (allOptions.live) {\n return init.call(this);\n }\n\n // If not live, bind each object in the collection\n return this.each(init);\n};\n\n$.fn.tooltip.defaults = {\n opacity: 1.0,\n offset: 1,\n delayIn: 500,\n hoverable: true,\n hideOnClick: true,\n aria: true\n};\n\nexport default $;\nexport {\n findAllTooltips,\n maybeTooltip\n};\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\n// todo: handle dep chain for interop styles of dropdown2 + horizontal nav\nimport '@atlassian/aui/src/less/aui-navigation.less';\n","/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nreturn $.widget;\n\n} ) );\n","export default {\n NO_VALUE: 'aui-restfultable-editable-no-value',\n NO_ENTRIES: 'aui-restfultable-no-entires',\n RESTFUL_TABLE: 'aui-restfultable',\n ROW: 'aui-restfultable-row',\n READ_ONLY: 'aui-restfultable-readonly',\n ACTIVE: 'aui-restfultable-active',\n ALLOW_HOVER: 'aui-restfultable-allowhover',\n FOCUSED: 'aui-restfultable-focused',\n MOVEABLE: 'aui-restfultable-movable',\n DISABLED: 'aui-restfultable-disabled',\n SUBMIT: 'aui-restfultable-submit',\n CANCEL: 'aui-restfultable-cancel',\n EDIT_ROW: 'aui-restfultable-editrow',\n CREATE: 'aui-restfultable-create',\n DRAG_HANDLE: 'aui-restfultable-draghandle',\n ORDER: 'aui-restfultable-order',\n EDITABLE: 'aui-restfultable-editable',\n ERROR: 'error',\n DELETE: 'aui-restfultable-delete',\n STATUS: 'aui-restfultable-status'\n};\n","export default {\n // AJS\n REORDER_SUCCESS: 'RestfulTable.reorderSuccess',\n ROW_ADDED: 'RestfulTable.rowAdded',\n ROW_REMOVED: 'RestfulTable.rowRemoved',\n EDIT_ROW: 'RestfulTable.switchedToEditMode',\n SERVER_ERROR: 'RestfulTable.serverError',\n\n // Backbone\n CREATED: 'created',\n UPDATED: 'updated',\n FOCUS: 'focus',\n BLUR: 'blur',\n SUBMIT: 'submit',\n SAVE: 'save',\n MODAL: 'modal',\n MODELESS: 'modeless',\n CANCEL: 'cancel',\n CONTENT_REFRESHED: 'contentRefreshed',\n RENDER: 'render',\n FINISHED_EDITING: 'finishedEditing',\n VALIDATION_ERROR: 'validationError',\n SUBMIT_STARTED: 'submitStarted',\n SUBMIT_FINISHED: 'submitFinished',\n INITIALIZED: 'initialized',\n ROW_INITIALIZED: 'rowInitialized',\n ROW_EDIT: 'editRow'\n};\n","import globalize from './internal/globalize';\n\n/* eslint brace-style: off, complexity:off, eqeqeq:off, max-depth:off, no-cond-assign:off, no-unused-vars:off */\n\n/**\n * Replaces tokens in a string with arguments, similar to Java's MessageFormat.\n * Tokens are in the form {0}, {1}, {2}, etc.\n *\n * This version also provides support for simple choice formats (excluding floating point numbers) of the form\n * {0,choice,0#0 issues|1#1 issue|1<{0,number} issues}\n *\n * Number format is currently not implemented, tokens of the form {0,number} will simply be printed as {0}\n *\n * @method format\n * @param message the message to replace tokens in\n * @param arg (optional) replacement value for token {0}, with subsequent arguments being {1}, etc.\n * @return {String} the message with the tokens replaced\n * @usage formatString(\"This is a {0} test\", \"simple\");\n */\nfunction formatString (message) {\n var apos = /'(?!')/g; // founds \"'\", but not \"''\" // TODO: does not work for floating point numbers!\n var simpleFormat = /^\\d+$/;\n var numberFormat = /^(\\d+),number$/; // TODO: incomplete, as doesn't support floating point numbers\n var choiceFormat = /^(\\d+),choice,(.+)/;\n var choicePart = /^(\\d+)([#<])(.+)/;\n // we are caching RegExps, so will not spend time on recreating them on each call\n\n // formats a value, currently choice and simple replacement are implemented, proper\n var getParamValue = function (format, args) {\n // simple substitute\n var res = '';\n\n var match;\n if (match = format.match(simpleFormat)) { // TODO: heavy guns for checking whether format is a simple number...\n res = args.length > ++format ? args[format] : ''; // use the argument as is, or use '' if not found\n }\n\n // number format\n else if (match = format.match(numberFormat)) {\n // TODO: doesn't actually format the number...\n res = args.length > ++match[1] ? args[match[1]] : '';\n }\n\n // choice format\n else if (match = format.match(choiceFormat)) {\n // format: \"0,choice,0#0 issues|1#1 issue|1<{0,number} issues\"\n // match[0]: \"0,choice,0#0 issues|1#1 issue|1<{0,number} issues\"\n // match[1]: \"0\"\n // match[2]: \"0#0 issues|1#1 issue|1<{0,number} issues\"\n\n // get the argument value we base the choice on\n var value = (args.length > ++match[1] ? args[match[1]] : null);\n if (value !== null) {\n // go through all options, checking against the number, according to following formula,\n // if X < the first entry then the first entry is returned, if X > last entry, the last entry is returned\n //\n // X matches j if and only if limit[j] <= X < limit[j+1]\n //\n var options = match[2].split('|');\n\n var prevOptionValue = null; // holds last passed option\n for (var i = 0; i < options.length; i++) {\n // option: \"0#0 issues\"\n // part[0]: \"0#0 issues\"\n // part[1]: \"0\"\n // part[2]: \"#\"\n // part[3]\" \"0 issues\";\n var parts = options[i].match(choicePart);\n\n // if value is smaller, we take the previous value, or the current if no previous exists\n var argValue = parseInt(parts[1], 10);\n if (value < argValue) {\n if (prevOptionValue) {\n res = prevOptionValue;\n break;\n } else {\n res = parts[3];\n break;\n }\n }\n // if value is equal the condition, and the match is equality match we accept it\n if (value == argValue && parts[2] == '#') {\n res = parts[3];\n break;\n } else {\n // value is greater the condition, fall through to next iteration\n }\n\n // check whether we are the last option, in which case accept it even if the option does not match\n if (i == options.length - 1) {\n res = parts[3];\n }\n\n // retain current option\n prevOptionValue = parts[3];\n }\n\n // run result through format, as the parts might contain substitutes themselves\n var formatArgs = [res].concat(Array.prototype.slice.call(args, 1));\n res = formatString.apply(null, formatArgs);\n }\n }\n return res;\n };\n\n // drop in replacement for the token regex\n // splits the message to return the next accurance of a i18n placeholder.\n // Does not use regexps as we need to support nested placeholders\n // text between single ticks ' are ignored\n var _performTokenRegex = function (message) {\n var tick = false;\n var openIndex = -1;\n var openCount = 0;\n for (var i = 0; i < message.length; i++) {\n // handle ticks\n var c = message.charAt(i);\n if (c == \"'\") {\n // toggle\n tick = !tick;\n }\n // skip if we are between ticks\n if (tick) {\n continue;\n }\n // check open brackets\n if (c === '{') {\n if (openCount === 0) {\n openIndex = i;\n }\n openCount++;\n } else if (c === '}') {\n if (openCount > 0) {\n openCount--;\n if (openCount === 0) {\n // we found a bracket match - generate the result array (\n var match = [];\n match.push(message.substring(0, i + 1)); // from begin to match\n match.push(message.substring(0, openIndex)); // everything until match start\n match.push(message.substring(openIndex + 1, i)); // matched content\n return match;\n }\n }\n }\n }\n return null;\n };\n\n var _formatString = function (message) {\n var args = arguments;\n var res = '';\n\n if (!message) {\n return res;\n }\n\n var match = _performTokenRegex(message);\n\n while (match) {\n // reduce message to string after match\n message = message.substring(match[0].length);\n\n // add value before match to result\n res += match[1].replace(apos, '');\n\n // add formatted parameter\n res += getParamValue(match[2], args);\n\n // check for next match\n match = _performTokenRegex(message); //message.match(token);\n }\n // add remaining message to result\n res += message.replace(apos, '');\n return res;\n };\n\n return _formatString.apply(null, arguments);\n}\n\nglobalize('format', formatString);\n\nexport default formatString;\n","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\", \"./constants\", \"./document-observer\", \"./lifecycle\", \"./registry\", \"./utils\", \"./version\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module, require(\"./constants\"), require(\"./document-observer\"), require(\"./lifecycle\"), require(\"./registry\"), require(\"./utils\"), require(\"./version\"));\n }\n})(function (exports, module, _constants, _documentObserver, _lifecycle, _registry, _utils, _version) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n var TYPE_ATTRIBUTE = _constants.TYPE_ATTRIBUTE;\n var TYPE_CLASSNAME = _constants.TYPE_CLASSNAME;\n var TYPE_ELEMENT = _constants.TYPE_ELEMENT;\n\n var documentObserver = _interopRequire(_documentObserver);\n\n var triggerCreated = _lifecycle.triggerCreated;\n var triggerAttached = _lifecycle.triggerAttached;\n var triggerDetached = _lifecycle.triggerDetached;\n var triggerAttributeChanged = _lifecycle.triggerAttributeChanged;\n var initElements = _lifecycle.initElements;\n\n var registry = _interopRequire(_registry);\n\n var debounce = _utils.debounce;\n var inherit = _utils.inherit;\n\n var version = _interopRequire(_version);\n\n var HTMLElement = window.HTMLElement; //jshint ignore:line\n\n // IE <= 10 can fire \"interactive\" too early (#243).\n var isOldIE = !!document.attachEvent; // attachEvent was removed in IE11.\n\n function isReady() {\n if (isOldIE) {\n return document.readyState === \"complete\";\n } else {\n return document.readyState === \"interactive\" || document.readyState === \"complete\";\n }\n }\n\n /**\n * Initialises all valid elements in the document. Ensures that it does not\n * happen more than once in the same execution, and that it happens after the DOM is ready.\n *\n * @returns {undefined}\n */\n var initDocument = debounce(function () {\n var initialiseSkateElementsOnDomLoad = function initialiseSkateElementsOnDomLoad() {\n initElements(document.documentElement.childNodes);\n };\n if (isReady()) {\n initialiseSkateElementsOnDomLoad();\n } else {\n if (isOldIE) {\n window.addEventListener(\"load\", initialiseSkateElementsOnDomLoad);\n } else {\n document.addEventListener(\"DOMContentLoaded\", initialiseSkateElementsOnDomLoad);\n }\n }\n });\n\n /**\n * Creates a constructor for the specified definition.\n *\n * @param {Object} definition The definition information to use for generating the constructor.\n *\n * @returns {Function} The element constructor.\n */\n function makeElementConstructor(definition) {\n function CustomElement() {\n var element;\n var tagToExtend = definition[\"extends\"];\n var definitionId = definition.id;\n\n if (tagToExtend) {\n element = document.createElement(tagToExtend);\n element.setAttribute(\"is\", definitionId);\n } else {\n element = document.createElement(definitionId);\n }\n\n // Ensure the definition prototype is up to date with the element's\n // prototype. This ensures that overwriting the element prototype still\n // works.\n definition.prototype = CustomElement.prototype;\n\n // If they use the constructor we don't have to wait until it's attached.\n triggerCreated(element, definition);\n\n return element;\n }\n\n // This allows modifications to the element prototype propagate to the\n // definition prototype.\n CustomElement.prototype = definition.prototype;\n\n return CustomElement;\n }\n\n // Public API\n // ----------\n\n /**\n * Creates a listener for the specified definition.\n *\n * @param {String} id The ID of the definition.\n * @param {Object | Function} definition The definition definition.\n *\n * @returns {Function} Constructor that returns a custom element.\n */\n function skate(id, definition) {\n // Just in case the definition is shared, we duplicate it so that internal\n // modifications to the original aren't shared.\n definition = inherit({}, definition);\n definition = inherit(definition, skate.defaults);\n definition.id = id;\n\n registry.set(id, definition);\n\n if (registry.isNativeCustomElement(id)) {\n var elementPrototype = definition[\"extends\"] ? document.createElement(definition[\"extends\"]).constructor.prototype : HTMLElement.prototype;\n\n if (!elementPrototype.isPrototypeOf(definition.prototype)) {\n definition.prototype = inherit(Object.create(elementPrototype), definition.prototype, true);\n }\n\n var options = {\n prototype: inherit(definition.prototype, {\n createdCallback: function createdCallback() {\n triggerCreated(this, definition);\n },\n attachedCallback: function attachedCallback() {\n triggerAttached(this, definition);\n },\n detachedCallback: function detachedCallback() {\n triggerDetached(this, definition);\n },\n attributeChangedCallback: function attributeChangedCallback(name, oldValue, newValue) {\n triggerAttributeChanged(this, definition, {\n name: name,\n oldValue: oldValue,\n newValue: newValue\n });\n }\n })\n };\n\n if (definition[\"extends\"]) {\n options[\"extends\"] = definition[\"extends\"];\n }\n\n return document.registerElement(id, options);\n }\n\n initDocument();\n documentObserver.register(!!definition.detached);\n\n if (registry.isType(id, TYPE_ELEMENT)) {\n return makeElementConstructor(definition);\n }\n }\n\n /**\n * Synchronously initialises the specified element or elements and descendants.\n *\n * @param {Mixed} nodes The node, or nodes to initialise. Can be anything:\n * jQuery, DOMNodeList, DOMNode, selector etc.\n *\n * @returns {skate}\n */\n skate.init = function (nodes) {\n var nodesToUse = nodes;\n\n if (!nodes) {\n return nodes;\n }\n\n if (typeof nodes === \"string\") {\n nodesToUse = nodes = document.querySelectorAll(nodes);\n } else if (nodes instanceof HTMLElement) {\n nodesToUse = [nodes];\n }\n\n initElements(nodesToUse);\n\n return nodes;\n };\n\n // Restriction type constants.\n skate.type = {\n ATTRIBUTE: TYPE_ATTRIBUTE,\n CLASSNAME: TYPE_CLASSNAME,\n ELEMENT: TYPE_ELEMENT\n };\n\n // Makes checking the version easy when debugging.\n skate.version = version;\n\n /**\n * The default options for a definition.\n *\n * @var {Object}\n */\n skate.defaults = {\n // Attribute lifecycle callback or callbacks.\n attributes: undefined,\n\n // The events to manage the binding and unbinding of during the definition's\n // lifecycle.\n events: undefined,\n\n // Restricts a particular definition to binding explicitly to an element with\n // a tag name that matches the specified value.\n \"extends\": undefined,\n\n // The ID of the definition. This is automatically set in the `skate()`\n // function.\n id: \"\",\n\n // Properties and methods to add to each element.\n prototype: {},\n\n // The attribute name to add after calling the created() callback.\n resolvedAttribute: \"resolved\",\n\n // The template to replace the content of the element with.\n template: undefined,\n\n // The type of bindings to allow.\n type: TYPE_ELEMENT,\n\n // The attribute name to remove after calling the created() callback.\n unresolvedAttribute: \"unresolved\"\n };\n\n // Exporting\n // ---------\n\n var previousSkate = window.skate;\n skate.noConflict = function () {\n window.skate = previousSkate;\n return skate;\n };\n\n // Global\n window.skate = skate;\n\n // ES6\n module.exports = skate;\n});","// iconfont v1: ADG 1 + 2\nimport '@atlassian/aui/src/less/iconfont-atlassian-icons.less';\n// iconfont v2: ADG Server\nimport '@atlassian/aui/src/less/iconfont-adgs-icons.less';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport '@atlassian/aui/src/less/aui-page-layout.less';\nimport '@atlassian/brand-logos/dist/aui-legacy/aui-footer.css'; // todo: remove in AUI 9.\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport './aui.pattern.avatar';\nimport './aui.pattern.button';\nimport '@atlassian/aui/src/less/aui-page-header.less';\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import './styles/aui.page.reset';\nimport './styles/aui.pattern.basic';\nimport '@atlassian/aui/src/less/layer.less';\n// todo AUI-4814: undo the weird relationships between layer, layerManager, and LayerManager.global\nexport { default as layer } from '@atlassian/aui/src/js/aui/layer';\n","import './internal/iconfont'; // todo: should only import what's needed from iconography\nimport './aui.component.layer';\nimport './aui.component.trigger';\nimport '@atlassian/aui/src/less/dropdown2.less';\nexport * from '@atlassian/aui/src/js/aui/dropdown2';\n","import globalize from './internal/globalize';\nimport * as deprecate from './internal/deprecation';\n\n/**\n * @deprecated Since 8.0.0 Use equivalent functions from libraries like lodash / underscore instead.\n */\nfunction debounce (func, wait) {\n var timeout;\n var result;\n\n return function () {\n var args = arguments;\n var context = this;\n var later = function () {\n result = func.apply(context, args);\n context = args = null;\n };\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n return result;\n };\n}\n\nvar deprecatedDebounce = deprecate.fn(debounce, 'AJS.debounce', {\n removeInVersion: '9.0.0',\n sinceVersion: '8.0.0',\n extraInfo: 'Use equivalent functions from libraries like lodash / underscore instead'\n});\n\nexport default deprecatedDebounce;\n\nglobalize('debounce', deprecatedDebounce);\n\n/**\n * @deprecated Since 8.0.0 Use equivalent functions from libraries like lodash / underscore instead.\n */\nfunction debounceImmediate (func, wait) {\n var timeout = null;\n var result;\n\n return function () {\n var context = this;\n var args = arguments;\n var later = function () {\n timeout = context = args = null;\n };\n\n if (timeout === null) {\n result = func.apply(context, args);\n }\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n return result;\n };\n}\n\nvar deprecatedDebounceImmediate = deprecate.fn(debounceImmediate, 'AJS.debounceImmediate', {\n removeInVersion: '9.0.0',\n sinceVersion: '8.0.0',\n extraInfo: 'Use equivalent functions from libraries like lodash / underscore instead'\n});\n\nexport {\n deprecatedDebounceImmediate as debounceImmediate\n};\n\nglobalize('debounceImmediate', deprecatedDebounceImmediate);\n\n","\nvar ua = navigator.userAgent.toLowerCase();\nvar isIE = /msie/.test(ua);\nvar isWinXP = /windows nt 5.1/.test(ua);\nvar isWinVista = /windows nt 6.0/.test(ua);\nvar isWin7 = /windows nt 6.1/.test(ua);\nvar isMacOSX = (/mac os x/.test(ua));\nvar doesSupportHtml5DateInput;\nvar doesSupportFocusWithin;\n\n/**\n * Layered elements can get obscured by <object>, <embed>, <select> or sometimes even <iframe>\n * on older versions of Windows + Internet Explorer.\n * From manual testing, all IE versions on Windows 7 appear to have the bug,\n * but no IE versions on Windows 8 have it.\n */\nexport function needsLayeringShim () {\n return isIE && (isWinXP || isWinVista || isWin7);\n}\n\nexport function supportsVoiceOver () {\n return isMacOSX;\n}\n\nexport function supportsDateField () {\n if (typeof doesSupportHtml5DateInput === 'undefined') {\n var el = document.createElement('input');\n el.setAttribute('type', 'date');\n doesSupportHtml5DateInput = el.type === 'date';\n }\n return doesSupportHtml5DateInput;\n}\n\nexport function supportsFocusWithin () {\n if (typeof doesSupportFocusWithin === 'undefined') {\n try {\n document.querySelector(':focus-within');\n doesSupportFocusWithin = true;\n } catch (e) {\n doesSupportFocusWithin = false;\n }\n }\n return doesSupportFocusWithin;\n}\n","import Popper from 'popper.js';\n\nconst ATTR_ALIGNMENT = 'alignment';\nconst DEFAULT_ATTACHMENT = 'right middle';\nconst ATTR_CONTAINER = 'alignment-container';\nconst CLASS_PREFIX_SIDE = 'aui-alignment-side-';\nconst CLASS_PREFIX_SNAP = 'aui-alignment-snap-';\nexport const GPU_ACCELERATION_FLAG = 'aui-alignment-use-gpu';\n\n/**\n * The \"side\" and \"snap\" that an element should use when aligning, where:\n * - \"side\" is the edge of the **target** that the aligned element should touch, and\n * - \"snap\" is the effective position that both the target and aligned element should share.\n * @enum {String}\n * @name AlignmentType\n */\nconst ALIGNMENT_MAP = {\n 'top left': 'top-start',\n 'top center': 'top',\n 'top right': 'top-end',\n 'right top': 'right-start',\n 'right middle': 'right',\n 'right bottom': 'right-end',\n 'bottom right': 'bottom-end',\n 'bottom center': 'bottom',\n 'bottom left': 'bottom-start',\n 'left bottom': 'left-end',\n 'left middle': 'left',\n 'left top': 'left-start',\n};\n\nfunction getAttribute(element, name) {\n return element.getAttribute(name) || element.getAttribute('data-aui-' + name);\n}\n\nfunction getAlignmentAttribute(element) {\n return getAttribute(element, ATTR_ALIGNMENT) || DEFAULT_ATTACHMENT;\n}\n\nfunction getPlacement(element) {\n const attr = getAlignmentAttribute(element);\n return ALIGNMENT_MAP[attr] || 'right';\n}\n\nfunction getAlignment(element) {\n let [side, snap] = (getAlignmentAttribute(element)).split(' ');\n return {\n side,\n snap\n };\n}\n\nfunction addAlignmentClasses(element, side, snap) {\n const sideClass = CLASS_PREFIX_SIDE + side;\n const snapClass = CLASS_PREFIX_SNAP + snap;\n\n if (!element.classList.contains(sideClass)) {\n element.classList.add(sideClass);\n }\n\n if (!element.classList.contains(snapClass)) {\n element.classList.add(snapClass);\n }\n}\n\nfunction getContainer (element) {\n let container = getAttribute(element, ATTR_CONTAINER) || window;\n\n if (typeof container === 'string') {\n container = document.querySelector(container);\n }\n\n return container;\n}\n\nfunction calculateBestAlignmentSnap (target) {\n let container = getContainer(target);\n let snap = 'left';\n\n if (!container || container === window || container === document) {\n container = document.documentElement;\n }\n\n if (container && container.nodeType && container.nodeType === Node.ELEMENT_NODE) {\n let containerBounds = container.getBoundingClientRect();\n let targetBounds = target.getBoundingClientRect();\n\n if (targetBounds.left > containerBounds.right / 2) {\n snap = 'right';\n }\n }\n\n return snap;\n}\n\n/*\n this determines flip order e.g.\n for top it will try to position itself at the top,\n if there is no space try to flip to bottom and if there is no space it will stay at the top\n*/\nconst getFlipBehavior = {\n auto: [],\n top: ['top', 'bottom', 'top'],\n right: ['right', 'left', 'right'],\n bottom: ['bottom', 'top', 'bottom'],\n left: ['left', 'right', 'left'],\n};\n\n/**\n * Visually positions an element adjacent to another one in the DOM.\n * Can also be told to keep the element aligned\n * when the user resizes the browser or scrolls around the page.\n * @constructor\n * @constructs Alignment\n * @param {HTMLElement} element - the element that will be repositioned. Should have an \"alignment\" attribute\n * with a valid {@link AlignmentType} value.\n * @param {HTMLElement} target - the point in the DOM to visually position the {@param element} adjacent to.\n * @param {Object} [options]\n * @param {boolean} [options.preventOverflow=true] - if true, will cause element to not overflow viewable area\n * @param {boolean} [options.flip=true] - if true, will cause the element to attempt to reposition itself within\n * a viewable area as its {@param target} disappears from view.\n * @param {HTMLElement|'viewport'|'window'|'scrollContainer'} [options.flipContainer='viewport'] - the container\n * in which the element should attempt to stay within the viewable area of.\n * Used in conjunction with {@param options.flip}.\n * @param {HTMLElement|'viewport'|'window'|'scrollContainer'} [options.overflowContainer='window'] - the container\n * in which the element should attempt to stay within the viewable area of.\n * Used in conjunction with {@param options.preventOverflow}.\n * @param {Function} [options.onCreate] - called when the element is first positioned upon creation of the Alignment.\n * @param {Function} [options.onUpdate] - called whenever the element is positioned, except upon creation.\n */\nfunction Alignment(element, target, options = {}) {\n const alignment = getAlignment(element);\n\n let placement;\n\n if (!alignment.snap || alignment.snap === 'auto') {\n alignment.snap = calculateBestAlignmentSnap(target);\n if (alignment.side === 'submenu') {\n placement = ALIGNMENT_MAP[`${alignment.snap === 'right' ? 'left' : 'right'} top`];\n } else {\n placement = ALIGNMENT_MAP[`${alignment.side} ${alignment.snap}`];\n }\n } else {\n placement = getPlacement(element);\n }\n\n const flipBehavior = getFlipBehavior[placement.split('-')[0]];\n\n const modifiers = {\n flip: {\n enabled: options.hasOwnProperty('flip') ? options.flip : true,\n behavior: flipBehavior,\n boundariesElement: options.hasOwnProperty('flipContainer') ? options.flipContainer : 'viewport',\n },\n preventOverflow: {\n enabled: options.hasOwnProperty('preventOverflow') ? options.preventOverflow : true,\n padding: 0,\n escapeWithReference: false,\n boundariesElement: options.hasOwnProperty('overflowContainer') ? options.overflowContainer : 'window',\n },\n hide: {\n enabled: false\n },\n computeStyle: {\n gpuAcceleration: document.body.classList.contains(GPU_ACCELERATION_FLAG)\n }\n };\n const popperConfig = {\n eventsEnabled: false,\n placement,\n positionFixed: options.hasOwnProperty('positionFixed') ? options.positionFixed : true,\n modifiers\n };\n\n ['onCreate', 'onUpdate'].forEach(function(callbackName) {\n var callback = options[callbackName];\n if (typeof callback === 'function') {\n popperConfig[callbackName] = callback;\n }\n });\n\n this.popper = new Popper(target, element, popperConfig);\n\n addAlignmentClasses(element, alignment.side, alignment.snap);\n}\n\nAlignment.prototype = {\n\n destroy() {\n this.popper.destroy();\n return this;\n },\n\n /**\n * Changes what the aligned element is trying to align itself with.\n * Will call {@link #scheduleUpdate} as needed to ensure the element will be aligned\n * with whatever the new target is.\n * @param {HTMLElement} newTarget - the new target DOM element to align the element with.\n * @returns {Alignment}\n */\n changeTarget(newTarget) {\n const referenceEl = newTarget.jquery ? newTarget[0] : newTarget;\n const shouldRebind = this.popper.state.eventsEnabled;\n if (referenceEl && referenceEl !== this.popper.reference) {\n shouldRebind && this.disable();\n this.popper.reference = referenceEl;\n shouldRebind && this.enable();\n this.scheduleUpdate();\n }\n return this;\n },\n\n /**\n * The position of the element will be updated on the next execution stack.\n * Triggering a render this way will always be asynchronous.\n * @returns {Alignment}\n */\n scheduleUpdate() {\n this.popper.scheduleUpdate();\n return this;\n },\n\n /**\n * Causes the position of the element to auto-update\n * when the browser window resizes or scroll parent is scrolled.\n * @returns {Alignment}\n */\n enable() {\n this.popper.enableEventListeners();\n return this;\n },\n\n /**\n * Prevents the position of the element from auto-updating\n * when the browser window resizes or scroll parent is scrolled.\n * @returns {Alignment}\n */\n disable() {\n this.popper.disableEventListeners();\n return this;\n },\n};\n\nexport default Alignment;\n","import $ from '../jquery';\n\nconst DELAY = 40;\n\n// an element can be detached and then attached multiple times\n// in some situations -- e.g., when re-appending an element to\n// another place in the DOM.\nexport function ifGone (element) {\n let deferred = new $.Deferred();\n if (element) {\n setTimeout(() => {\n if (!element.parentElement) {\n deferred.resolve();\n }\n }, DELAY);\n } else {\n deferred.reject();\n }\n return deferred.promise();\n}\n","import * as logger from './log'\n\nfunction enforcer (element) {\n\n function attributeExists (attributeName) {\n var errorMessage = attributeName + ' wasn\\'t defined';\n\n return satisfiesRules(function () {\n return element.hasAttribute(attributeName)\n }, errorMessage);\n }\n\n function refersTo (attributeName) {\n\n if (!attributeExists(attributeName, element)){\n return false;\n }\n\n var desiredId = element.getAttribute(attributeName);\n var errorMessage = 'an element with id set to \"' + desiredId + '\" was not found';\n\n return satisfiesRules(function () {\n return document.getElementById(desiredId);\n }, errorMessage);\n }\n\n function ariaControls() {\n return refersTo('aria-controls');\n }\n\n function ariaOwns() {\n return refersTo('aria-owns');\n }\n\n function satisfiesRules (predicate, message) {\n if (!predicate()) {\n if (element) {\n logger.error(message, element);\n } else {\n logger.error(message);\n }\n return false;\n }\n return true;\n }\n\n return {\n attributeExists: attributeExists,\n refersTo: refersTo,\n satisfiesRules: satisfiesRules,\n ariaControls: ariaControls,\n ariaOwns: ariaOwns\n }\n}\n\nexport default enforcer;\n","const INPUT_SUFFIX = '-input';\n\nexport {\n INPUT_SUFFIX\n}\n","import './aui.component.layer';\nimport './aui.component.trigger';\nimport './styles/aui.pattern.inline-dialog';\nexport { default as InlineDialogEl } from '@atlassian/aui/src/js/aui/inline-dialog2';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport '@atlassian/aui/src/less/inline-dialog.less';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.pattern.basic';\nimport './aui.pattern.button'; // because tables override whether they fit inside a cell\nimport './aui.pattern.avatar'; // because 'table-list' pattern changes opacity of them\nimport './aui.pattern.icon'; // because 'table-list' pattern changes opacity of them\nimport '@atlassian/aui/src/less/tables.less';\n","import './styles/aui.page.reset';\nimport './styles/aui.page.typography';\nimport '@atlassian/tipsy/src/stylesheets/tipsy.css';\nimport '@atlassian/aui/src/less/aui-experimental-tooltip.less';\nimport '@atlassian/aui/src/js/aui/tooltip';\nexport {};\n","/*!\n * jQuery UI Mouse 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../ie\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nreturn $.widget( \"ui.mouse\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\t( this._mouseStarted && this._mouseUp( event ) );\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\t( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) { return true; }\n} );\n\n} ) );\n","export default {\n ENABLED_SUBMIT: 'enabledSubmit',\n ROW_VIEW: 'RestfulTable_Row_View'\n};\n","import './../spinner';\nimport classNames from './class-names';\n\nexport const spinner = '<aui-spinner size=\"small\"></aui-spinner>';\nconst SPINNER_SELECTOR = 'aui-spinner';\n\n/**\n * Appends spinner to .aui-restfultable-status container if not already present\n *\n * @param $el\n */\nexport function appendStatusSpinner($el) {\n if ($el.find(SPINNER_SELECTOR).length === 0) {\n $el.find(`.${classNames.STATUS}`).append(spinner);\n }\n}\n\n/**\n * Removes spinner from .aui-restfultable-status container\n *\n * @param $el\n */\nexport function removeStatusSpinner($el) {\n $el.find(`.${classNames.STATUS} ${SPINNER_SELECTOR}`).remove();\n}\n","import globalize from './internal/globalize';\n\n// @note: this value is set via webpack and gulp\n// eslint-disable-next-line\nvar version = AUI_VERSION;\n\nglobalize('version', version);\n\nexport default version;\n","import $ from './jquery';\nimport * as logger from './internal/log';\nimport globalize from './internal/globalize';\n\nconst EMPTY_SELECTOR = false;\nconst $target = $(window);\n\n/**\n * Binds events to the window object. See jQuery bind documentation for more\n * details. Exceptions are caught and logged.\n */\nfunction bind (eventType, eventData, handler) {\n try {\n if (typeof handler === 'function') {\n return $target.on(eventType, EMPTY_SELECTOR, eventData, handler);\n } else {\n return $target.on(eventType, EMPTY_SELECTOR, eventData);\n }\n } catch (e) {\n logger.log('error while binding: ', e.message);\n }\n}\n\n/**\n * Unbinds event handlers from the window object. See jQuery unbind\n * documentation for more details. Exceptions are caught and logged.\n */\nfunction unbind (eventType, handler) {\n try {\n return $target.off(eventType, handler);\n } catch (e) {\n logger.log('error while unbinding: ', e.message);\n }\n}\n\n/**\n * Triggers events on the window object. See jQuery trigger documentation for\n * more details. Exceptions are caught and logged.\n */\nfunction trigger (eventType, extraParameters) {\n try {\n return $target.trigger(eventType, extraParameters);\n } catch (e) {\n logger.log('error while triggering: ' + e.message);\n }\n}\n\nglobalize('bind', bind);\nglobalize('trigger', trigger);\nglobalize('unbind', unbind);\n\nexport {\n bind,\n unbind,\n trigger\n};\n","import $ from './jquery';\nimport { getMessageLogger } from './internal/deprecation';\nimport { recomputeStyle } from './internal/animation';\nimport globalize from './internal/globalize';\n\nvar overflowEl;\nvar _hiddenByAui = [];\n\n/**\n * Dims the screen using a blanket div\n * @param useShim deprecated, it is calculated by dim() now\n */\nfunction dim (useShim, zIndex) {\n\n //if we're blanketing the page it means we want to hide the whatever is under the blanket from the screen readers as well\n function hasAriaHidden(element) {\n return element.hasAttribute('aria-hidden');\n }\n\n function isAuiLayer(element) {\n return element.classList.contains('aui-layer');\n }\n\n Array.prototype.forEach.call(document.body.children, function (element) {\n if (!hasAriaHidden(element) && !isAuiLayer(element)) {\n element.setAttribute('aria-hidden', 'true');\n _hiddenByAui.push(element);\n }\n });\n\n if (!overflowEl) {\n overflowEl = document.body;\n }\n\n if (useShim === true) {\n useShimDeprecationLogger();\n }\n\n var isBlanketShowing = (!!dim.$dim) && dim.$dim.attr('aria-hidden') === 'false';\n\n if (!!dim.$dim) {\n dim.$dim.remove();\n dim.$dim = null;\n }\n\n dim.$dim = $('<div></div>').addClass('aui-blanket');\n dim.$dim.attr('tabindex', '0'); //required, or the last element's focusout event will go to the browser\n dim.$dim.appendTo(document.body);\n\n if (!isBlanketShowing) {\n //recompute after insertion and before setting aria-hidden=false to ensure we calculate a difference in\n //computed styles\n recomputeStyle(dim.$dim);\n\n dim.cachedOverflow = {\n overflow: overflowEl.style.overflow,\n overflowX: overflowEl.style.overflowX,\n overflowY: overflowEl.style.overflowY\n };\n\n overflowEl.style.overflowX = 'hidden';\n overflowEl.style.overflowY = 'hidden';\n overflowEl.style.overflow = 'hidden';\n }\n\n dim.$dim.attr('aria-hidden', 'false');\n\n if (zIndex) {\n dim.$dim.css({zIndex: zIndex});\n }\n\n return dim.$dim;\n}\n\n/**\n * Removes semitransparent DIV\n * @see dim\n */\nfunction undim () {\n _hiddenByAui.forEach(function (element) {\n element.removeAttribute('aria-hidden');\n });\n\n _hiddenByAui = [];\n\n if (dim.$dim) {\n dim.$dim.attr('aria-hidden', 'true');\n\n if (overflowEl) {\n overflowEl.style.overflow = dim.cachedOverflow.overflow;\n overflowEl.style.overflowX = dim.cachedOverflow.overflowX;\n overflowEl.style.overflowY = dim.cachedOverflow.overflowY;\n }\n }\n}\n\nvar useShimDeprecationLogger = getMessageLogger('useShim', {\n extraInfo: 'useShim has no alternative as it is now calculated by dim().'\n});\n\nglobalize('dim', dim);\nglobalize('undim', undim);\n\nexport {\n dim,\n undim\n};\n","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\", \"./version\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module, require(\"./version\"));\n }\n})(function (exports, module, _version) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n var version = _interopRequire(_version);\n\n var VERSION = \"__skate_\" + version.replace(/[^\\w]/g, \"_\");\n\n if (!window[VERSION]) {\n window[VERSION] = {\n observer: undefined,\n registry: {}\n };\n }\n\n module.exports = window[VERSION];\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module);\n }\n})(function (exports, module) {\n \"use strict\";\n\n module.exports = \"0.13.17\";\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"./constants\", \"./data\", \"./mutation-observer\", \"./registry\", \"./utils\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports, require(\"./constants\"), require(\"./data\"), require(\"./mutation-observer\"), require(\"./registry\"), require(\"./utils\"));\n }\n})(function (exports, _constants, _data, _mutationObserver, _registry, _utils) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n \"use strict\";\n\n var ATTR_IGNORE = _constants.ATTR_IGNORE;\n\n var data = _interopRequire(_data);\n\n var registry = _interopRequire(_registry);\n\n var camelCase = _utils.camelCase;\n var elementContains = _utils.elementContains;\n var hasOwn = _utils.hasOwn;\n var inherit = _utils.inherit;\n var objEach = _utils.objEach;\n var Node = window.Node;\n //jshint ignore:line\n var elProto = window.HTMLElement.prototype;\n var nativeMatchesSelector = elProto.matches || elProto.msMatchesSelector || elProto.webkitMatchesSelector || elProto.mozMatchesSelector || elProto.oMatchesSelector;\n // Only IE9 has this msMatchesSelector bug, but best to detect it.\n var hasNativeMatchesSelectorDetattachedBug = !nativeMatchesSelector.call(document.createElement(\"div\"), \"div\");\n var matchesSelector = function matchesSelector(element, selector) {\n if (hasNativeMatchesSelectorDetattachedBug) {\n var clone = element.cloneNode();\n document.createElement(\"div\").appendChild(clone);\n return nativeMatchesSelector.call(clone, selector);\n }\n return nativeMatchesSelector.call(element, selector);\n };\n\n // Edge has a bug where oldValue is sent as null instead of the true oldValue\n // when an element attribute is removed. Bug raised at\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7711883/\n var needsAttributeOldValueCaching = /Edge/.test(navigator.userAgent);\n\n /**\n * Parses an event definition and returns information about it.\n *\n * @param {String} e The event to parse.\n *\n * @returns {Object]}\n */\n function parseEvent(e) {\n var parts = e.split(\" \");\n return {\n name: parts.shift(),\n delegate: parts.join(\" \")\n };\n }\n\n /**\n * Sets the defined attributes to their default values, if specified.\n *\n * @param {Element} target The web component element.\n * @param {Object} component The web component definition.\n *\n * @returns {undefined}\n */\n function initAttributes(target, component) {\n var componentAttributes = component.attributes;\n\n if (typeof componentAttributes !== \"object\") {\n return;\n }\n\n for (var attribute in componentAttributes) {\n if (hasOwn(componentAttributes, attribute) && hasOwn(componentAttributes[attribute], \"value\") && !target.hasAttribute(attribute)) {\n var value = componentAttributes[attribute].value;\n value = typeof value === \"function\" ? value(target) : value;\n target.setAttribute(attribute, value);\n }\n }\n }\n\n /**\n * Defines a property that proxies the specified attribute.\n *\n * @param {Element} target The web component element.\n * @param {String} attribute The attribute name to proxy.\n *\n * @returns {undefined}\n */\n function defineAttributeProperty(target, attribute, property) {\n Object.defineProperty(target, property, {\n get: function get() {\n return this.getAttribute(attribute);\n },\n set: function set(value) {\n if (value === undefined) {\n this.removeAttribute(attribute);\n } else {\n this.setAttribute(attribute, value);\n }\n }\n });\n }\n\n /**\n * Adds links from attributes to properties.\n *\n * @param {Element} target The web component element.\n * @param {Object} component The web component definition.\n *\n * @returns {undefined}\n */\n function addAttributeToPropertyLinks(target, component) {\n var componentAttributes = component.attributes;\n\n if (typeof componentAttributes !== \"object\") {\n return;\n }\n\n for (var attribute in componentAttributes) {\n var property = camelCase(attribute);\n if (hasOwn(componentAttributes, attribute) && !hasOwn(target, property)) {\n defineAttributeProperty(target, attribute, property);\n }\n }\n }\n\n function triggerAttributeChanged(target, component, mutationData) {\n var callback;\n var type;\n var name = mutationData.name;\n var newValue = mutationData.newValue;\n\n var cachedAttributeOldValues;\n if (needsAttributeOldValueCaching) {\n cachedAttributeOldValues = data(target, \"cachedAttributeOldValues\");\n }\n\n // Read the old attribute value from cache if needed, otherwise use native oldValue\n var oldValue = needsAttributeOldValueCaching && hasOwn(cachedAttributeOldValues, name) ? cachedAttributeOldValues[name] : mutationData.oldValue;\n\n var newValueIsString = typeof newValue === \"string\";\n var oldValueIsString = typeof oldValue === \"string\";\n var attrs = component.attributes;\n var specific = attrs && attrs[name];\n\n if (!oldValueIsString && newValueIsString) {\n type = \"created\";\n } else if (oldValueIsString && newValueIsString) {\n type = \"updated\";\n } else if (oldValueIsString && !newValueIsString) {\n type = \"removed\";\n }\n\n if (needsAttributeOldValueCaching) {\n if (type === \"removed\") {\n delete cachedAttributeOldValues[name];\n } else {\n cachedAttributeOldValues[name] = newValue;\n }\n }\n\n if (specific && typeof specific[type] === \"function\") {\n callback = specific[type];\n } else if (specific && typeof specific.fallback === \"function\") {\n callback = specific.fallback;\n } else if (typeof specific === \"function\") {\n callback = specific;\n } else if (typeof attrs === \"function\") {\n callback = attrs;\n }\n\n // Ensure values are null if undefined.\n newValue = newValue === undefined ? null : newValue;\n oldValue = oldValue === undefined ? null : oldValue;\n\n // There may still not be a callback.\n if (callback) {\n callback(target, {\n type: type,\n name: name,\n newValue: newValue,\n oldValue: oldValue\n });\n }\n }\n\n function triggerAttributesCreated(target, component) {\n var a;\n var attrs = target.attributes;\n var attrsCopy = [];\n var attrsLen = attrs.length;\n\n for (a = 0; a < attrsLen; a++) {\n attrsCopy.push(attrs[a]);\n }\n\n // In default web components, attribute changes aren't triggered for\n // attributes that already exist on an element when it is bound. This sucks\n // when you want to reuse and separate code for attributes away from your\n // lifecycle callbacks. Skate will initialise each attribute by calling the\n // created callback for the attributes that already exist on the element.\n for (a = 0; a < attrsLen; a++) {\n var attr = attrsCopy[a];\n triggerAttributeChanged(target, component, {\n name: attr.nodeName,\n newValue: attr.value || attr.nodeValue\n });\n }\n }\n\n function addAttributeListeners(target, component) {\n var attrs = target.attributes;\n\n if (!component.attributes || registry.isNativeCustomElement(component.id)) {\n return;\n }\n\n var observer = new window.MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n var name = mutation.attributeName;\n var attr = attrs[name];\n\n triggerAttributeChanged(target, component, {\n name: name,\n newValue: attr && (attr.value || attr.nodeValue),\n oldValue: mutation.oldValue\n });\n });\n });\n\n observer.observe(target, {\n attributes: true,\n attributeOldValue: true\n });\n }\n\n /**\n * Binds event listeners for the specified event handlers.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function addEventListeners(target, component) {\n if (typeof component.events !== \"object\") {\n return;\n }\n\n function makeHandler(handler, delegate) {\n return function (e) {\n // If we're not delegating, trigger directly on the component element.\n if (!delegate) {\n return handler(target, e, target);\n }\n\n // If we're delegating, but the target doesn't match, then we've have\n // to go up the tree until we find a matching ancestor or stop at the\n // component element, or document. If a matching ancestor is found, the\n // handler is triggered on it.\n var current = e.target;\n\n while (current && current !== document && current !== target.parentNode) {\n if (matchesSelector(current, delegate)) {\n return handler(target, e, current);\n }\n\n current = current.parentNode;\n }\n };\n }\n\n objEach(component.events, function (handler, name) {\n var evt = parseEvent(name);\n var useCapture = !!evt.delegate && (evt.name === \"blur\" || evt.name === \"focus\");\n target.addEventListener(evt.name, makeHandler(handler, evt.delegate), useCapture);\n });\n }\n\n /**\n * Triggers the created lifecycle callback.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function triggerCreated(target, component) {\n var targetData = data(target, component.id);\n\n if (targetData.created) {\n return;\n }\n\n targetData.created = true;\n\n // TODO: This doesn't need to happen if using native.\n inherit(target, component.prototype, true);\n\n // We use the unresolved / resolved attributes to flag whether or not the\n // element has been templated or not.\n if (component.template && !target.hasAttribute(component.resolvedAttribute)) {\n component.template(target);\n }\n\n target.removeAttribute(component.unresolvedAttribute);\n target.setAttribute(component.resolvedAttribute, \"\");\n addEventListeners(target, component);\n addAttributeListeners(target, component);\n addAttributeToPropertyLinks(target, component);\n initAttributes(target, component);\n triggerAttributesCreated(target, component);\n\n if (component.created) {\n component.created(target);\n }\n }\n\n /**\n * Triggers the attached lifecycle callback.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function triggerAttached(target, component) {\n var targetData = data(target, component.id);\n\n if (targetData.attached) {\n return;\n }\n\n if (!elementContains(document, target)) {\n return;\n }\n\n targetData.attached = true;\n\n if (component.attached) {\n component.attached(target);\n }\n\n targetData.detached = false;\n }\n\n /**\n * Triggers the detached lifecycle callback.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function triggerDetached(target, component) {\n var targetData = data(target, component.id);\n\n if (targetData.detached) {\n return;\n }\n\n targetData.detached = true;\n\n if (component.detached) {\n component.detached(target);\n }\n\n targetData.attached = false;\n }\n\n /**\n * Triggers the entire element lifecycle if it's not being ignored.\n *\n * @param {Element} target The component element.\n * @param {Object} component The component data.\n *\n * @returns {undefined}\n */\n function triggerLifecycle(target, component) {\n triggerCreated(target, component);\n triggerAttached(target, component);\n }\n\n /**\n * Initialises a set of elements.\n *\n * @param {DOMNodeList | Array} elements A traversable set of elements.\n *\n * @returns {undefined}\n */\n function initElements(elements) {\n // [CATION] Don't cache elements length! Components initialization could append nodes\n // as siblings (see label's element behaviour for example) and this could lead to problems with\n // components placed at the end of processing childNodes because they will change they index\n // position and get out of cached value range.\n for (var a = 0; a < elements.length; a++) {\n var element = elements[a];\n\n if (element.nodeType !== Node.ELEMENT_NODE || element.attributes[ATTR_IGNORE]) {\n continue;\n }\n\n var currentNodeDefinitions = registry.getForElement(element);\n var currentNodeDefinitionsLength = currentNodeDefinitions.length;\n\n for (var b = 0; b < currentNodeDefinitionsLength; b++) {\n triggerLifecycle(element, currentNodeDefinitions[b]);\n }\n\n // When <object> tag is used to expose NPAPI api to js may have different behaviour then other\n // tags. One of those differences is that it's childNodes can be undefined.\n var elementChildNodes = element.childNodes || [];\n var elementChildNodesLen = elementChildNodes.length;\n\n if (elementChildNodesLen) {\n initElements(elementChildNodes);\n }\n }\n }\n\n /**\n * Triggers the remove lifecycle callback on all of the elements.\n *\n * @param {DOMNodeList} elements The elements to trigger the remove lifecycle\n * callback on.\n *\n * @returns {undefined}\n */\n function removeElements(elements) {\n // Don't cache `childNodes` length. For more info see description in `initElements` function.\n for (var a = 0; a < elements.length; a++) {\n var element = elements[a];\n\n if (element.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n\n removeElements(element.childNodes);\n\n var definitions = registry.getForElement(element);\n var definitionsLen = definitions.length;\n\n for (var b = 0; b < definitionsLen; b++) {\n triggerDetached(element, definitions[b]);\n }\n }\n }\n\n exports.initElements = initElements;\n exports.removeElements = removeElements;\n exports.triggerAttached = triggerAttached;\n exports.triggerAttributeChanged = triggerAttributeChanged;\n exports.triggerCreated = triggerCreated;\n exports.triggerDetached = triggerDetached;\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n }\n})(function (exports) {\n \"use strict\";\n\n (function (self) {\n // Atlassian: added IIFE\n /**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n // @version 0.7.15\n if (typeof WeakMap === \"undefined\") {\n (function () {\n var defineProperty = Object.defineProperty;\n var counter = Date.now() % 1000000000;\n var WeakMap = function WeakMap() {\n this.name = \"__st\" + (Math.random() * 1000000000 >>> 0) + (counter++ + \"__\");\n };\n WeakMap.prototype = {\n set: function set(key, value) {\n var entry = key[this.name];\n if (entry && entry[0] === key) entry[1] = value;else defineProperty(key, this.name, {\n value: [key, value],\n writable: true\n });\n return this;\n },\n get: function get(key) {\n var entry;\n return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined;\n },\n \"delete\": function _delete(key) {\n var entry = key[this.name];\n if (!entry || entry[0] !== key) {\n return false;\n }entry[0] = entry[1] = undefined;\n return true;\n },\n has: function has(key) {\n var entry = key[this.name];\n if (!entry) {\n return false;\n }return entry[0] === key;\n }\n };\n window.WeakMap = WeakMap;\n })();\n }\n\n (function (global) {\n if (global.JsMutationObserver) {\n return;\n }\n var registrationsTable = new WeakMap();\n var setImmediate;\n if (/Trident|Edge/.test(navigator.userAgent)) {\n setImmediate = setTimeout;\n } else if (window.setImmediate) {\n setImmediate = window.setImmediate;\n } else {\n var setImmediateQueue = [];\n var sentinel = String(Math.random());\n window.addEventListener(\"message\", function (e) {\n if (e.data === sentinel) {\n var queue = setImmediateQueue;\n setImmediateQueue = [];\n queue.forEach(function (func) {\n func();\n });\n }\n });\n setImmediate = function (func) {\n setImmediateQueue.push(func);\n window.postMessage(sentinel, \"*\");\n };\n }\n var isScheduled = false;\n var scheduledObservers = [];\n function scheduleCallback(observer) {\n scheduledObservers.push(observer);\n if (!isScheduled) {\n isScheduled = true;\n setImmediate(dispatchCallbacks);\n }\n }\n function wrapIfNeeded(node) {\n return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node;\n }\n function dispatchCallbacks() {\n isScheduled = false;\n var observers = scheduledObservers;\n scheduledObservers = [];\n observers.sort(function (o1, o2) {\n return o1.uid_ - o2.uid_;\n });\n var anyNonEmpty = false;\n observers.forEach(function (observer) {\n var queue = observer.takeRecords();\n removeTransientObserversFor(observer);\n if (queue.length) {\n observer.callback_(queue, observer);\n anyNonEmpty = true;\n }\n });\n if (anyNonEmpty) dispatchCallbacks();\n }\n function removeTransientObserversFor(observer) {\n observer.nodes_.forEach(function (node) {\n var registrations = registrationsTable.get(node);\n if (!registrations) return;\n registrations.forEach(function (registration) {\n if (registration.observer === observer) registration.removeTransientObservers();\n });\n });\n }\n function forEachAncestorAndObserverEnqueueRecord(target, callback) {\n for (var node = target; node; node = node.parentNode) {\n var registrations = registrationsTable.get(node);\n if (registrations) {\n for (var j = 0; j < registrations.length; j++) {\n var registration = registrations[j];\n var options = registration.options;\n if (node !== target && !options.subtree) continue;\n var record = callback(options);\n if (record) registration.enqueue(record);\n }\n }\n }\n }\n var uidCounter = 0;\n function JsMutationObserver(callback) {\n this.callback_ = callback;\n this.nodes_ = [];\n this.records_ = [];\n this.uid_ = ++uidCounter;\n }\n JsMutationObserver.prototype = {\n observe: function observe(target, options) {\n target = wrapIfNeeded(target);\n if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) {\n throw new SyntaxError();\n }\n var registrations = registrationsTable.get(target);\n if (!registrations) registrationsTable.set(target, registrations = []);\n var registration;\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i].observer === this) {\n registration = registrations[i];\n registration.removeListeners();\n registration.options = options;\n break;\n }\n }\n if (!registration) {\n registration = new Registration(this, target, options);\n registrations.push(registration);\n this.nodes_.push(target);\n }\n registration.addListeners();\n },\n disconnect: function disconnect() {\n this.nodes_.forEach(function (node) {\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n var registration = registrations[i];\n if (registration.observer === this) {\n registration.removeListeners();\n registrations.splice(i, 1);\n break;\n }\n }\n }, this);\n this.records_ = [];\n },\n takeRecords: function takeRecords() {\n var copyOfRecords = this.records_;\n this.records_ = [];\n return copyOfRecords;\n }\n };\n function MutationRecord(type, target) {\n this.type = type;\n this.target = target;\n this.addedNodes = [];\n this.removedNodes = [];\n this.previousSibling = null;\n this.nextSibling = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n this.oldValue = null;\n }\n function copyMutationRecord(original) {\n var record = new MutationRecord(original.type, original.target);\n record.addedNodes = original.addedNodes.slice();\n record.removedNodes = original.removedNodes.slice();\n record.previousSibling = original.previousSibling;\n record.nextSibling = original.nextSibling;\n record.attributeName = original.attributeName;\n record.attributeNamespace = original.attributeNamespace;\n record.oldValue = original.oldValue;\n return record;\n }\n var currentRecord, recordWithOldValue;\n function getRecord(type, target) {\n return currentRecord = new MutationRecord(type, target);\n }\n function getRecordWithOldValue(oldValue) {\n if (recordWithOldValue) {\n return recordWithOldValue;\n }recordWithOldValue = copyMutationRecord(currentRecord);\n recordWithOldValue.oldValue = oldValue;\n return recordWithOldValue;\n }\n function clearRecords() {\n currentRecord = recordWithOldValue = undefined;\n }\n function recordRepresentsCurrentMutation(record) {\n return record === recordWithOldValue || record === currentRecord;\n }\n function selectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord) {\n return lastRecord;\n }if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) {\n return recordWithOldValue;\n }return null;\n }\n function Registration(observer, target, options) {\n this.observer = observer;\n this.target = target;\n this.options = options;\n this.transientObservedNodes = [];\n }\n Registration.prototype = {\n enqueue: function enqueue(record) {\n var records = this.observer.records_;\n var length = records.length;\n if (records.length > 0) {\n var lastRecord = records[length - 1];\n var recordToReplaceLast = selectRecord(lastRecord, record);\n if (recordToReplaceLast) {\n records[length - 1] = recordToReplaceLast;\n return;\n }\n } else {\n scheduleCallback(this.observer);\n }\n records[length] = record;\n },\n addListeners: function addListeners() {\n this.addListeners_(this.target);\n },\n addListeners_: function addListeners_(node) {\n var options = this.options;\n if (options.attributes) node.addEventListener(\"DOMAttrModified\", this, true);\n if (options.characterData) node.addEventListener(\"DOMCharacterDataModified\", this, true);\n if (options.childList) node.addEventListener(\"DOMNodeInserted\", this, true);\n if (options.childList || options.subtree) node.addEventListener(\"DOMNodeRemoved\", this, true);\n },\n removeListeners: function removeListeners() {\n this.removeListeners_(this.target);\n },\n removeListeners_: function removeListeners_(node) {\n var options = this.options;\n if (options.attributes) node.removeEventListener(\"DOMAttrModified\", this, true);\n if (options.characterData) node.removeEventListener(\"DOMCharacterDataModified\", this, true);\n if (options.childList) node.removeEventListener(\"DOMNodeInserted\", this, true);\n if (options.childList || options.subtree) node.removeEventListener(\"DOMNodeRemoved\", this, true);\n },\n addTransientObserver: function addTransientObserver(node) {\n if (node === this.target) {\n return;\n }this.addListeners_(node);\n this.transientObservedNodes.push(node);\n var registrations = registrationsTable.get(node);\n if (!registrations) registrationsTable.set(node, registrations = []);\n registrations.push(this);\n },\n removeTransientObservers: function removeTransientObservers() {\n var transientObservedNodes = this.transientObservedNodes;\n this.transientObservedNodes = [];\n transientObservedNodes.forEach(function (node) {\n this.removeListeners_(node);\n var registrations = registrationsTable.get(node);\n for (var i = 0; i < registrations.length; i++) {\n if (registrations[i] === this) {\n registrations.splice(i, 1);\n break;\n }\n }\n }, this);\n },\n handleEvent: function handleEvent(e) {\n e.stopImmediatePropagation();\n switch (e.type) {\n case \"DOMAttrModified\":\n var name = e.attrName;\n var namespace = e.relatedNode.namespaceURI;\n var target = e.target;\n var record = new getRecord(\"attributes\", target);\n record.attributeName = name;\n record.attributeNamespace = namespace;\n var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n if (!options.attributes) return;\n if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) {\n return;\n }\n if (options.attributeOldValue) return getRecordWithOldValue(oldValue);\n return record;\n });\n break;\n\n case \"DOMCharacterDataModified\":\n var target = e.target;\n var record = getRecord(\"characterData\", target);\n var oldValue = e.prevValue;\n forEachAncestorAndObserverEnqueueRecord(target, function (options) {\n if (!options.characterData) return;\n if (options.characterDataOldValue) return getRecordWithOldValue(oldValue);\n return record;\n });\n break;\n\n case \"DOMNodeRemoved\":\n this.addTransientObserver(e.target);\n\n case \"DOMNodeInserted\":\n var changedNode = e.target;\n var addedNodes, removedNodes;\n if (e.type === \"DOMNodeInserted\") {\n addedNodes = [changedNode];\n removedNodes = [];\n } else {\n addedNodes = [];\n removedNodes = [changedNode];\n }\n var previousSibling = changedNode.previousSibling;\n var nextSibling = changedNode.nextSibling;\n var record = getRecord(\"childList\", e.target.parentNode);\n record.addedNodes = addedNodes;\n record.removedNodes = removedNodes;\n record.previousSibling = previousSibling;\n record.nextSibling = nextSibling;\n forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function (options) {\n if (!options.childList) return;\n return record;\n });\n }\n clearRecords();\n }\n };\n global.JsMutationObserver = JsMutationObserver;\n if (!global.MutationObserver) {\n global.MutationObserver = JsMutationObserver;\n JsMutationObserver._isPolyfilled = true;\n }\n })(self);\n })(window); // Atlassian: added IIFE\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\", \"./constants\", \"./globals\", \"./utils\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module, require(\"./constants\"), require(\"./globals\"), require(\"./utils\"));\n }\n})(function (exports, module, _constants, _globals, _utils) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n var TYPE_ATTRIBUTE = _constants.TYPE_ATTRIBUTE;\n var TYPE_CLASSNAME = _constants.TYPE_CLASSNAME;\n var TYPE_ELEMENT = _constants.TYPE_ELEMENT;\n\n var globals = _interopRequire(_globals);\n\n var hasOwn = _utils.hasOwn;\n var isValidNativeCustomElementName = _utils.isValidNativeCustomElementName;\n var supportsNativeCustomElements = _utils.supportsNativeCustomElements;\n\n /**\n * Returns the class list for the specified element.\n *\n * @param {Element} element The element to get the class list for.\n *\n * @returns {ClassList | Array}\n */\n function getClassList(element) {\n var classList = element.classList;\n\n if (classList) {\n return classList;\n }\n\n var attrs = element.attributes;\n\n return attrs[\"class\"] && attrs[\"class\"].nodeValue.split(/\\s+/) || [];\n }\n\n module.exports = {\n clear: function clear() {\n globals.registry = {};\n return this;\n },\n\n get: function get(id) {\n return hasOwn(globals.registry, id) && globals.registry[id];\n },\n\n getForElement: function getForElement(element) {\n var attrs = element.attributes;\n var attrsLen = attrs.length;\n var definitions = [];\n var isAttr = attrs.is;\n var isAttrValue = isAttr && (isAttr.value || isAttr.nodeValue);\n\n // Using localName as fallback for edge cases when processing <object> tag that is used\n // as inteface to NPAPI plugin.\n var tag = (element.tagName || element.localName).toLowerCase();\n var isAttrOrTag = isAttrValue || tag;\n var definition;\n var tagToExtend;\n\n if (this.isType(isAttrOrTag, TYPE_ELEMENT)) {\n definition = globals.registry[isAttrOrTag];\n tagToExtend = definition[\"extends\"];\n\n if (isAttrValue) {\n if (tag === tagToExtend) {\n definitions.push(definition);\n }\n } else if (!tagToExtend) {\n definitions.push(definition);\n }\n }\n\n for (var a = 0; a < attrsLen; a++) {\n var attr = attrs[a].nodeName;\n\n if (this.isType(attr, TYPE_ATTRIBUTE)) {\n definition = globals.registry[attr];\n tagToExtend = definition[\"extends\"];\n\n if (!tagToExtend || tag === tagToExtend) {\n definitions.push(definition);\n }\n }\n }\n\n var classList = getClassList(element);\n var classListLen = classList.length;\n\n for (var b = 0; b < classListLen; b++) {\n var className = classList[b];\n\n if (this.isType(className, TYPE_CLASSNAME)) {\n definition = globals.registry[className];\n tagToExtend = definition[\"extends\"];\n\n if (!tagToExtend || tag === tagToExtend) {\n definitions.push(definition);\n }\n }\n }\n\n return definitions;\n },\n\n isType: function isType(id, type) {\n var def = this.get(id);\n return def && def.type === type;\n },\n\n isNativeCustomElement: function isNativeCustomElement(id) {\n return supportsNativeCustomElements() && this.isType(id, TYPE_ELEMENT) && isValidNativeCustomElementName(id);\n },\n\n set: function set(id, definition) {\n if (hasOwn(globals.registry, id)) {\n throw new Error(\"A component definition of type \\\"\" + definition.type + \"\\\" with the ID of \\\"\" + id + \"\\\" already exists.\");\n }\n\n globals.registry[id] = definition;\n\n return this;\n }\n };\n});","import './aui.page.reset';\nimport '@atlassian/aui/src/less/aui-group.less';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.pattern.button';\nimport '@atlassian/aui/src/less/aui-toolbar2.less';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport '@atlassian/aui/src/less/aui-banner.less';\nimport '@atlassian/aui/src/less/adg-banner.less';\n","import * as logger from './internal/log';\nimport amdify from './internal/amdify';\nimport skate from './internal/skate';\nimport SpinnerEl, {SIZE} from './spinner';\n\nfunction isBusy (button) {\n return button.hasAttribute('aria-busy') && button.getAttribute('aria-busy') === 'true';\n}\n\nfunction isInputNode (button) {\n return button.nodeName === 'INPUT';\n}\n\nskate('aui-button', {\n type: skate.type.CLASSNAME,\n created: function (element) {\n element._spinner = new SpinnerEl();\n element._spinner.setAttribute('size', SIZE.SMALL.name);\n },\n prototype: {\n /**\n * Adds a spinner to the button and hides the text\n *\n * @returns {HTMLElement}\n */\n busy: function () {\n if (isInputNode(this) || isBusy(this)) {\n logger.warn('It is not valid to call busy() on an input button.');\n return this;\n }\n\n this.appendChild(this._spinner);\n this.setAttribute('aria-busy', true);\n this.setAttribute('busy', '');\n\n return this;\n },\n\n /**\n * Removes the spinner and shows the tick on the button\n *\n * @returns {HTMLElement}\n */\n idle: function () {\n if (isInputNode(this) || !isBusy(this)) {\n logger.warn('It is not valid to call idle() on an input button.');\n return this;\n }\n\n this.removeChild(this._spinner);\n this.removeAttribute('aria-busy');\n this.removeAttribute('busy');\n\n return this;\n },\n\n /**\n * Removes the spinner and shows the tick on the button\n *\n * @returns {Boolean}\n */\n isBusy: function () {\n if (isInputNode(this)) {\n logger.warn('It is not valid to call isBusy() on an input button.');\n return false;\n }\n\n return isBusy(this);\n }\n }\n});\n\namdify('aui/button');\n","import i18n from './i18n';\nimport './spinner';\nimport $ from './jquery';\nimport template from 'skatejs-template-html';\nimport * as deprecate from './internal/deprecation';\nimport * as logger from './internal/log';\nimport { debounceImmediate } from './debounce';\nimport { supportsVoiceOver } from './internal/browser';\nimport Alignment from './internal/alignment';\nimport CustomEvent from './polyfills/custom-event';\nimport keyCode from './key-code';\nimport layer from './layer';\nimport state from './internal/state';\nimport skate from './internal/skate';\nimport {ifGone} from './internal/elements';\nimport {doIfTrigger, setTrigger} from './trigger';\n\nfunction isChecked(el) {\n return $(el).is('.checked, .aui-dropdown2-checked, [aria-checked=\"true\"]');\n}\n\nfunction setDropdownTriggerActiveState(trigger, isActive) {\n var $trigger = $(trigger);\n\n if (isActive) {\n $trigger.attr('aria-expanded', 'true');\n $trigger.addClass('active aui-dropdown2-active');\n } else {\n $trigger.attr('aria-expanded', 'false');\n $trigger.removeClass('active aui-dropdown2-active');\n }\n}\n\n// LOADING STATES\nvar UNLOADED = 'unloaded';\nvar LOADING = 'loading';\nvar ERROR = 'error';\nvar SUCCESS = 'success';\n\n\n// ASYNC DROPDOWN FUNCTIONS\n\nfunction makeAsyncDropdownContents (json) {\n var dropdownContents = json.map(function makeSection (sectionData) {\n var sectionItemsHtml = sectionData.items.map(function makeSectionItem (itemData) {\n function makeBooleanAttribute (attr) {\n return itemData[attr] ? `${attr} =\"true\"` : '';\n }\n\n function makeAttribute (attr) {\n return itemData[attr] ? `${attr}=\"${itemData[attr]}\"` : '';\n }\n\n var tagName = 'aui-item-' + itemData.type;\n var itemHtml = `\n <${tagName} ${makeAttribute('for')} ${makeAttribute('href')} ${makeBooleanAttribute('interactive')}\n ${makeBooleanAttribute('checked')} ${makeBooleanAttribute('disabled')} ${makeBooleanAttribute('hidden')}>\n ${itemData.content}\n </${tagName}>`;\n\n return itemHtml;\n }).join('');\n\n var sectionAttributes = sectionData.label ? `label=\"${sectionData.label}\"` : '';\n var sectionHtml = `\n <aui-section ${sectionAttributes}>\n ${sectionItemsHtml}\n </aui-section>`;\n\n return sectionHtml;\n }).join('\\n');\n\n return dropdownContents;\n}\n\nfunction setDropdownContents (dropdown, json) {\n state(dropdown).set('loading-state', SUCCESS);\n template.wrap(dropdown).innerHTML = makeAsyncDropdownContents(json);\n skate.init(dropdown);\n}\n\nfunction setDropdownErrorState (dropdown) {\n state(dropdown).set('loading-state', ERROR);\n state(dropdown).set('hasErrorBeenShown', dropdown.isVisible());\n template.wrap(dropdown).innerHTML = `\n <div class=\"aui-message aui-message-error aui-dropdown-error\">\n <p>${i18n.getText('aui.dropdown.async.error')}</p>\n </div>\n `;\n}\n\nfunction setDropdownLoadingState (dropdown) {\n state(dropdown).set('loading-state', LOADING);\n state(dropdown).set('hasErrorBeenShown', false);\n\n doIfTrigger(dropdown, function (trigger) {\n trigger.setAttribute('aria-busy', 'true');\n });\n\n template.wrap(dropdown).innerHTML = `\n <div class=\"aui-dropdown-loading\">\n <aui-spinner size=\"small\"></aui-spinner>\n ${i18n.getText('aui.dropdown.async.loading')}\n </div>\n `;\n}\n\nfunction setDropdownLoaded (dropdown) {\n doIfTrigger(dropdown, function (trigger) {\n trigger.setAttribute('aria-busy', 'false');\n });\n}\n\nfunction loadContentsIfAsync (dropdown) {\n if (!dropdown.src || state(dropdown).get('loading-state') === LOADING) {\n return;\n }\n\n setDropdownLoadingState(dropdown);\n\n $.ajax(dropdown.src)\n .done(function (json, status, xhr) {\n var isValidStatus = xhr.status === 200;\n if (isValidStatus) {\n setDropdownContents(dropdown, json);\n } else {\n setDropdownErrorState(dropdown);\n }\n })\n .fail(function () {\n setDropdownErrorState(dropdown);\n })\n .always(function () {\n setDropdownLoaded(dropdown);\n });\n}\n\nfunction loadContentWhenMouseEnterTrigger(dropdown) {\n var isDropdownUnloaded = state(dropdown).get('loading-state') === UNLOADED;\n var hasCurrentErrorBeenShown = state(dropdown).get('hasErrorBeenShown');\n if (isDropdownUnloaded || hasCurrentErrorBeenShown && !dropdown.isVisible()) {\n loadContentsIfAsync(dropdown);\n }\n}\n\nfunction loadContentWhenMenuShown(dropdown) {\n var isDropdownUnloaded = state(dropdown).get('loading-state') === UNLOADED;\n var hasCurrentErrorBeenShown = state(dropdown).get('hasErrorBeenShown');\n if (isDropdownUnloaded || hasCurrentErrorBeenShown) {\n loadContentsIfAsync(dropdown);\n }\n if (state(dropdown).get('loading-state') === ERROR) {\n state(dropdown).set('hasErrorBeenShown', true);\n }\n}\n\n\n// The dropdown's trigger\n// ----------------------\n\nfunction triggerCreated (trigger) {\n var dropdownID = trigger.getAttribute('aria-controls');\n\n if (!dropdownID) {\n dropdownID = trigger.getAttribute('aria-owns');\n\n if (!dropdownID) {\n logger.error('Dropdown triggers need either a \"aria-owns\" or \"aria-controls\" attribute');\n } else {\n trigger.removeAttribute('aria-owns');\n trigger.setAttribute('aria-controls', dropdownID);\n }\n }\n\n trigger.setAttribute('aria-haspopup', true);\n trigger.setAttribute('aria-expanded', false);\n\n const shouldSetHref = trigger.nodeName === 'A' && !trigger.href;\n if (shouldSetHref) {\n trigger.setAttribute('href', '#' + dropdownID);\n }\n\n function handleIt(e) {\n e.preventDefault();\n\n if (!trigger.isEnabled()) {\n return;\n }\n\n var dropdown = document.getElementById(dropdownID);\n\n // AUI-4271 - Maintains legacy integration with parent elements.\n const $trigger = $(trigger);\n if ($trigger.parent().hasClass('aui-buttons')) {\n dropdown.classList.add('aui-dropdown2-in-buttons');\n }\n if ($trigger.parents().hasClass('aui-header')) {\n dropdown.classList.add('aui-dropdown2-in-header');\n }\n\n dropdown.toggle(e);\n dropdown.isSubmenu = trigger.hasSubmenu();\n\n return dropdown;\n }\n\n function handleMouseEnter(e) {\n e.preventDefault();\n\n if (!trigger.isEnabled()) {\n return;\n }\n\n var dropdown = document.getElementById(dropdownID);\n loadContentWhenMouseEnterTrigger(dropdown);\n\n if (trigger.hasSubmenu()) {\n dropdown.show(e);\n dropdown.isSubmenu = trigger.hasSubmenu();\n }\n\n return dropdown;\n }\n\n function handleKeydown(e) {\n var normalInvoke = (e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE);\n var submenuInvoke = (e.keyCode === keyCode.RIGHT && trigger.hasSubmenu());\n var rootMenuInvoke = ((e.keyCode === keyCode.UP || e.keyCode === keyCode.DOWN) && !trigger.hasSubmenu());\n\n if (normalInvoke || submenuInvoke || rootMenuInvoke) {\n var dropdown = handleIt(e);\n\n if (dropdown) {\n dropdown.focusItem(0);\n }\n }\n }\n\n $(trigger)\n .on('aui-button-invoke', handleIt)\n .on('click', handleIt)\n .on('keydown', handleKeydown)\n .on('mouseenter', handleMouseEnter)\n ;\n}\n\nvar triggerPrototype = {\n disable: function () {\n this.setAttribute('aria-disabled', 'true');\n },\n\n enable: function () {\n this.setAttribute('aria-disabled', 'false');\n },\n\n isEnabled: function () {\n return this.getAttribute('aria-disabled') !== 'true';\n },\n\n hasSubmenu: function () {\n var triggerClasses = (this.className || '').split(/\\s+/);\n return triggerClasses.indexOf('aui-dropdown2-sub-trigger') !== -1;\n }\n};\n\n//To remove at a later date. Some dropdown triggers initialise lazily, so we need to listen for mousedown\n//and synchronously init before the click event is fired.\n//TODO: delete in AUI 8.0.0, see AUI-2868\nfunction bindLazyTriggerInitialisation() {\n $(document).on('mousedown', '.aui-dropdown2-trigger', function () {\n var isElementSkated = this.hasAttribute('resolved');\n if (!isElementSkated) {\n skate.init(this);\n var lazyDeprecate = deprecate.getMessageLogger('Dropdown2 lazy initialisation', {\n removeInVersion: '9.0.0',\n alternativeName: 'initialisation on DOM insertion',\n sinceVersion: '5.8.0',\n extraInfo: 'Dropdown2 triggers should have all necessary attributes on DOM insertion',\n deprecationType: 'JS'\n });\n lazyDeprecate();\n }\n });\n}\n\nbindLazyTriggerInitialisation();\n\n// Dropdown trigger groups\n// -----------------------\n\n$(document).on('mouseenter', '.aui-dropdown2-trigger-group a, .aui-dropdown2-trigger-group button', function (e) {\n const $item = $(e.currentTarget);\n\n if ($item.is('.aui-dropdown2-active')) {\n return; // No point doing anything if we're hovering over the already-active item trigger.\n }\n\n if ($item.closest('.aui-dropdown2').length) {\n return; // We don't want to deal with dropdown items, just the potential triggers in the group.\n }\n\n const $triggerGroup = $item.closest('.aui-dropdown2-trigger-group');\n\n const $groupActiveTrigger = $triggerGroup.find('.aui-dropdown2-active');\n if ($groupActiveTrigger.length && $item.is('.aui-dropdown2-trigger')) {\n $groupActiveTrigger.blur(); // Remove focus from the previously opened menu.\n $item.trigger('aui-button-invoke'); // Open this trigger's menu.\n e.preventDefault();\n }\n\n const $groupFocusedTrigger = $triggerGroup.find(':focus');\n if ($groupFocusedTrigger.length && $item.is('.aui-dropdown2-trigger')) {\n $groupFocusedTrigger.blur();\n }\n});\n\n\n// Dropdown items\n// --------------\n\nfunction getDropdownItems (dropdown, filter) {\n return $(dropdown)\n .find([\n // Legacy markup.\n '> ul > li',\n '> .aui-dropdown2-section > ul > li',\n // Accessible markup.\n '> div[role] > .aui-dropdown2-section > div[role=\"group\"] > ul[role] > li[role]',\n // Web component.\n 'aui-item-link',\n 'aui-item-checkbox',\n 'aui-item-radio'\n ].join(', '))\n .filter(filter)\n .children('a, button, [role=\"checkbox\"], [role=\"menuitemcheckbox\"], [role=\"radio\"], [role=\"menuitemradio\"]');\n}\n\nfunction getAllDropdownItems (dropdown) {\n return getDropdownItems(dropdown, function () {\n return true;\n });\n}\n\nfunction getVisibleDropdownItems (dropdown) {\n return getDropdownItems(dropdown, function () {\n return this.className.indexOf('hidden') === -1 && !this.hasAttribute('hidden');\n });\n}\n\nfunction amendDropdownItem (item) {\n var $item = $(item);\n\n $item.attr('tabindex', '-1');\n\n /**\n * Honouring the documentation.\n * @link https://aui.atlassian.com/latest/docs/dropdown2.html\n */\n if ($item.hasClass('aui-dropdown2-disabled') || $item.parent().hasClass('aui-dropdown2-hidden')) {\n $item.attr('aria-disabled', true);\n }\n}\n\nfunction amendDropdownContent (dropdown) {\n // Add assistive semantics to each dropdown item\n getAllDropdownItems(dropdown).each(function () {\n amendDropdownItem(this);\n });\n}\n\n/**\n * Honours behaviour for code written using only the legacy class names.\n * To maintain old behaviour (i.e., remove the 'hidden' class and the item will become un-hidden)\n * whilst allowing our code to only depend on the new classes, we need to\n * keep the state of the DOM in sync with legacy classes.\n *\n * Calling this function will add the new namespaced classes to elements with legacy names.\n * @returns {Function} a function to remove the new namespaced classes, only from the elements they were added to.\n */\nfunction migrateAndSyncLegacyClassNames (dropdown) {\n var $dropdown = $(dropdown);\n\n // Migrate away from legacy class names\n var $hiddens = $dropdown.find('.hidden').addClass('aui-dropdown2-hidden');\n var $disableds = $dropdown.find('.disabled').addClass('aui-dropdown2-disabled');\n var $interactives = $dropdown.find('.interactive').addClass('aui-dropdown2-interactive');\n\n return function revertToOriginalMarkup () {\n $hiddens.removeClass('aui-dropdown2-hidden');\n $disableds.removeClass('aui-dropdown2-disabled');\n $interactives.removeClass('aui-dropdown2-interactive');\n };\n}\n\n\n// The Dropdown itself\n// -------------------\n\nfunction destroyAlignment(dropdown) {\n if (dropdown._auiAlignment) {\n dropdown._auiAlignment.destroy();\n delete dropdown._auiAlignment;\n }\n}\n\nfunction setLayerAlignment(dropdown, trigger) {\n var hasSubmenu = trigger && trigger.hasSubmenu && trigger.hasSubmenu();\n var hasSubmenuAlignment = dropdown.getAttribute('data-aui-alignment') === 'submenu auto';\n\n if (!hasSubmenu && hasSubmenuAlignment) {\n restorePreviousAlignment(dropdown);\n }\n var hasAnyAlignment = dropdown.hasAttribute('data-aui-alignment');\n\n if (hasSubmenu && !hasSubmenuAlignment) {\n saveCurrentAlignment(dropdown);\n dropdown.setAttribute('data-aui-alignment', 'submenu auto');\n dropdown.setAttribute('data-aui-alignment-static', true);\n } else if (!hasAnyAlignment) {\n dropdown.setAttribute('data-aui-alignment', 'bottom auto');\n dropdown.setAttribute('data-aui-alignment-static', true);\n }\n\n destroyAlignment(dropdown);\n dropdown._auiAlignment = new Alignment(dropdown, trigger, {\n flip: false,\n positionFixed: false,\n preventOverflow: false\n });\n\n dropdown._auiAlignment.enable();\n}\n\nfunction saveCurrentAlignment(dropdown) {\n var $dropdown = $(dropdown);\n if (dropdown.hasAttribute('data-aui-alignment')) {\n $dropdown.data('previous-data-aui-alignment', dropdown.getAttribute('data-aui-alignment'));\n }\n $dropdown.data('had-data-aui-alignment-static', dropdown.hasAttribute('data-aui-alignment-static'));\n}\n\nfunction restorePreviousAlignment(dropdown) {\n var $dropdown = $(dropdown);\n\n var previousAlignment = $dropdown.data('previous-data-aui-alignment');\n if (previousAlignment) {\n dropdown.setAttribute('data-aui-alignment', previousAlignment);\n } else {\n dropdown.removeAttribute('data-aui-alignment');\n }\n $dropdown.removeData('previous-data-aui-alignment');\n\n if (!$dropdown.data('had-data-aui-alignment-static')) {\n dropdown.removeAttribute('data-aui-alignment-static');\n }\n $dropdown.removeData('had-data-aui-alignment-static');\n}\n\nfunction getDropdownHideLocation(dropdown, trigger) {\n var possibleHome = trigger.getAttribute('data-dropdown2-hide-location');\n return document.getElementById(possibleHome) || dropdown.parentNode;\n}\n\nvar keyboardClose = false;\nfunction keyboardCloseDetected () {\n keyboardClose = true;\n}\n\nfunction wasProbablyClosedViaKeyboard () {\n var result = (keyboardClose === true);\n keyboardClose = false;\n return result;\n}\n\nfunction bindDropdownBehaviourToLayer(dropdown) {\n layer(dropdown);\n\n\n dropdown.addEventListener('aui-layer-show', function () {\n $(dropdown).trigger('aui-dropdown2-show');\n\n dropdown._syncClasses = migrateAndSyncLegacyClassNames(dropdown);\n\n amendDropdownContent(this);\n\n doIfTrigger(dropdown, function (trigger) {\n setDropdownTriggerActiveState(trigger, true);\n dropdown._returnTo = getDropdownHideLocation(dropdown, trigger);\n });\n });\n\n dropdown.addEventListener('aui-layer-hide', function () {\n $(dropdown).trigger('aui-dropdown2-hide');\n\n if (dropdown._syncClasses) {\n dropdown._syncClasses();\n delete dropdown._syncClasses;\n }\n\n if (dropdown._auiAlignment) {\n dropdown._auiAlignment.destroy();\n }\n\n if (dropdown._returnTo) {\n if (dropdown.parentNode && dropdown.parentNode !== dropdown._returnTo) {\n dropdown._returnTo.appendChild(dropdown);\n }\n }\n\n $(dropdown).removeClass('aui-dropdown2-in-buttons');\n\n getVisibleDropdownItems(dropdown).removeClass('active aui-dropdown2-active');\n\n doIfTrigger(dropdown, function (trigger) {\n if (wasProbablyClosedViaKeyboard()) {\n trigger.focus();\n setDropdownTriggerActiveState(trigger, trigger.hasSubmenu && trigger.hasSubmenu());\n } else {\n setDropdownTriggerActiveState(trigger, false);\n }\n });\n\n // Gets set by submenu trigger invocation. Bad coupling point?\n delete dropdown.isSubmenu;\n setTrigger(dropdown, null);\n });\n}\n\nfunction bindItemInteractionBehaviourToDropdown (dropdown) {\n var $dropdown = $(dropdown);\n\n $dropdown.on('keydown', function (e) {\n if (e.keyCode === keyCode.DOWN) {\n dropdown.focusNext();\n e.preventDefault();\n } else if (e.keyCode === keyCode.UP) {\n dropdown.focusPrevious();\n e.preventDefault();\n } else if (e.keyCode === keyCode.LEFT) {\n if (dropdown.isSubmenu) {\n keyboardCloseDetected();\n dropdown.hide(e);\n e.preventDefault();\n }\n } else if (e.keyCode === keyCode.ESCAPE) {\n // The closing will be handled by the LayerManager!\n keyboardCloseDetected();\n } else if (e.keyCode === keyCode.TAB) {\n keyboardCloseDetected();\n dropdown.hide(e);\n }\n });\n\n const hideIfNotSubmenuAndNotInteractive = function(e) {\n var $item = $(e.currentTarget);\n\n if ($item.attr('aria-disabled') === 'true') {\n e.preventDefault();\n return;\n }\n\n const isSubmenuTrigger = e.currentTarget.hasSubmenu && e.currentTarget.hasSubmenu();\n if (!isSubmenuTrigger && !$item.is('.aui-dropdown2-interactive')) {\n\n var theMenu = dropdown;\n do {\n var dd = layer(theMenu);\n theMenu = layer(theMenu).below();\n if (dd.$el.is('.aui-dropdown2')) {\n dd.hide(e);\n }\n } while (theMenu);\n }\n };\n\n $dropdown.on('click keydown', 'a, button, [role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"checkbox\"], [role=\"menuitemradio\"], [role=\"radio\"]', function (e) {\n const item = e.currentTarget;\n const $item = $(item);\n const eventKeyCode = e.keyCode;\n const isEnter = eventKeyCode === keyCode.ENTER;\n const isSpace = eventKeyCode === keyCode.SPACE;\n\n // AUI-4283: Accessibility - need to ignore enter on links/buttons so\n // that the dropdown remains visible to allow the click event to eventually fire.\n const itemIgnoresEnter = isEnter && $item.is('a[href], button');\n\n if (!itemIgnoresEnter && (e.type === 'click' || isEnter || isSpace)) {\n hideIfNotSubmenuAndNotInteractive(e);\n }\n });\n\n // close a submenus when the mouse moves over items other than its trigger\n $dropdown.on('mouseenter', 'a, button, [role=\"menuitem\"], [role=\"menuitemcheckbox\"], [role=\"checkbox\"], [role=\"menuitemradio\"], [role=\"radio\"]', function (e) {\n var item = e.currentTarget;\n var hasSubmenu = item.hasSubmenu && item.hasSubmenu();\n\n if (!e.isDefaultPrevented() && !hasSubmenu) {\n var maybeALayer = layer(dropdown).above();\n\n if (maybeALayer) {\n layer(maybeALayer).hide();\n }\n }\n });\n}\n\n$(window).on('resize', debounceImmediate(function () {\n $('.aui-dropdown2').each(function (index, dropdown) {\n skate.init(dropdown);\n if (dropdown.isVisible()){\n dropdown.hide();\n }\n });\n}, 1000));\n\n// Dropdowns\n// ---------\n\nfunction dropdownCreated (dropdown) {\n var $dropdown = $(dropdown);\n\n $dropdown.addClass('aui-dropdown2');\n\n // swap the inner div to presentation as application is only needed for Windows\n if (supportsVoiceOver()) {\n $dropdown.find('> div[role=\"application\"]').attr('role', 'presentation');\n }\n\n if (dropdown.hasAttribute('data-container')) {\n $dropdown.attr('data-aui-alignment-container', $dropdown.attr('data-container'));\n $dropdown.removeAttr('data-container');\n }\n\n bindDropdownBehaviourToLayer(dropdown);\n bindItemInteractionBehaviourToDropdown(dropdown);\n dropdown.hide();\n\n $(dropdown).on('click keydown', '.aui-dropdown2-checkbox:not(.disabled):not(.aui-dropdown2-disabled)', function (e) {\n if (e.type === 'click' || e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE) {\n let checkbox = this;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (checkbox.isInteractive()) {\n e.preventDefault();\n }\n if (checkbox.isEnabled()) {\n // toggle the checked state\n if (checkbox.isChecked()) {\n checkbox.uncheck();\n } else {\n checkbox.check();\n }\n }\n }\n });\n\n $(dropdown).on('click keydown', '.aui-dropdown2-radio:not(.checked):not(.aui-dropdown2-checked):not(.disabled):not(.aui-dropdown2-disabled)', function (e) {\n if (e.type === 'click' || e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE) {\n let radio = this;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (radio.isInteractive()) {\n e.preventDefault();\n }\n\n let $radio = $(this);\n if (this.isEnabled() && this.isChecked() === false) {\n // toggle the checked state\n $radio.closest('ul,[role=group]').find('.aui-dropdown2-checked').not(this).each(function () {\n this.uncheck();\n });\n radio.check();\n }\n }\n });\n}\n\nvar dropdownPrototype = {\n /**\n * Toggles the visibility of the dropdown menu\n */\n toggle: function (e) {\n if (this.isVisible()) {\n this.hide(e);\n } else {\n this.show(e);\n }\n },\n\n /**\n * Explicitly shows the menu\n *\n * @returns {HTMLElement}\n */\n show: function (e) {\n var dropdown = this;\n if (e && e.currentTarget && e.currentTarget.classList.contains('aui-dropdown2-trigger')) {\n setTrigger(dropdown, e.currentTarget);\n }\n layer(dropdown).show();\n\n doIfTrigger(dropdown, function (trigger) {\n setLayerAlignment(dropdown, trigger);\n });\n\n return this;\n },\n\n /**\n * Explicitly hides the menu\n *\n * @returns {HTMLElement}\n */\n hide: function () {\n layer(this).hide();\n return this;\n },\n\n /**\n * Shifts explicit focus to the next available item in the menu\n *\n * @returns {undefined}\n */\n focusNext: function () {\n var $items = getVisibleDropdownItems(this);\n var selected = document.activeElement;\n var idx;\n\n if ($items.last()[0] !== selected) {\n idx = $items.toArray().indexOf(selected);\n this.focusItem($items.get(idx + 1));\n }\n },\n\n /**\n * Shifts explicit focus to the previous available item in the menu\n *\n * @returns {undefined}\n */\n focusPrevious: function () {\n var $items = getVisibleDropdownItems(this);\n var selected = document.activeElement;\n var idx;\n\n if ($items.first()[0] !== selected) {\n idx = $items.toArray().indexOf(selected);\n this.focusItem($items.get(idx - 1));\n }\n },\n\n /**\n * Shifts explicit focus to the menu item matching the index param\n */\n focusItem: function (item) {\n var $items = getVisibleDropdownItems(this);\n var $item;\n if (typeof item === 'number') {\n item = $items.get(item);\n }\n $item = $(item);\n $item.focus();\n $items.removeClass('active aui-dropdown2-active');\n $item.addClass('active aui-dropdown2-active');\n },\n\n /**\n * Checks whether or not the menu is currently displayed\n *\n * @returns {Boolean}\n */\n isVisible: function () {\n return layer(this).isVisible();\n }\n};\n\n// Web component API for dropdowns\n// -------------------------------\n\nvar disabledAttributeHandler = {\n created: function (element) {\n var a = element.children[0];\n a.setAttribute('aria-disabled', 'true');\n a.className += ' aui-dropdown2-disabled';\n },\n removed: function (element) {\n var a = element.children[0];\n a.setAttribute('aria-disabled', 'false');\n $(a).removeClass('aui-dropdown2-disabled');\n }\n};\n\nvar interactiveAttributeHandler = {\n created: function (element) {\n var a = element.children[0];\n a.className += ' aui-dropdown2-interactive';\n },\n removed: function (element) {\n var a = element.children[0];\n $(a).removeClass('aui-dropdown2-interactive');\n }\n};\n\nvar checkedAttributeHandler = {\n created: function (element) {\n var a = element.children[0];\n $(a).addClass('checked aui-dropdown2-checked');\n a.setAttribute('aria-checked', true);\n element.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n },\n removed: function (element) {\n var a = element.children[0];\n $(a).removeClass('checked aui-dropdown2-checked');\n a.setAttribute('aria-checked', false);\n element.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n }\n};\n\nvar hiddenAttributeHandler = {\n created: function (element) {\n disabledAttributeHandler.created(element);\n },\n removed: function (element) {\n disabledAttributeHandler.removed(element);\n }\n};\n\nvar stringAttributeHandlerGenerator = function(attrName) {\n return {\n fallback: function (element, change) {\n var a = element.children[0];\n a.setAttribute(attrName, change.newValue);\n },\n removed: function (element) {\n var a = element.children[0];\n a.removeAttribute(attrName);\n }\n };\n};\n\nconst ItemLinkEl = skate('aui-item-link', {\n template: template(\n '<a role=\"menuitem\" tabindex=\"-1\"><content></content></a>'\n ),\n attributes: {\n disabled: disabledAttributeHandler,\n interactive: interactiveAttributeHandler,\n hidden: hiddenAttributeHandler,\n href: stringAttributeHandlerGenerator('href'),\n 'item-id': stringAttributeHandlerGenerator('id'),\n for: {\n created: function (element) {\n var anchor = element.children[0];\n anchor.setAttribute('aria-controls', element.getAttribute('for'));\n $(anchor).addClass('aui-dropdown2-sub-trigger');\n },\n updated: function (element) {\n var anchor = element.children[0];\n anchor.setAttribute('aria-controls', element.getAttribute('for'));\n },\n removed: function (element) {\n var anchor = element.children[0];\n anchor.removeAttribute('aria-controls');\n $(anchor).removeClass('aui-dropdown2-sub-trigger');\n }\n }\n }\n});\n\nconst ItemCheckboxEl = skate('aui-item-checkbox', {\n template: template(\n '<span role=\"checkbox\" class=\"aui-dropdown2-checkbox\" tabindex=\"-1\"><content></content></span>'\n ),\n attributes: {\n 'item-id': stringAttributeHandlerGenerator('id'),\n disabled: disabledAttributeHandler,\n interactive: interactiveAttributeHandler,\n checked: checkedAttributeHandler,\n hidden: hiddenAttributeHandler\n }\n});\n\nconst ItemRadioEl = skate('aui-item-radio', {\n template: template(\n '<span role=\"radio\" class=\"aui-dropdown2-radio\" tabindex=\"-1\"><content></content></span>'\n ),\n attributes: {\n 'item-id': stringAttributeHandlerGenerator('id'),\n disabled: disabledAttributeHandler,\n interactive: interactiveAttributeHandler,\n checked: checkedAttributeHandler,\n hidden: hiddenAttributeHandler\n }\n});\n\nconst SectionEl = skate('aui-section', {\n template: template(`\n <strong aria-role=\"presentation\" class=\"aui-dropdown2-heading\"></strong>\n <div role=\"group\">\n <content></content>\n </div>\n `),\n attributes: {\n label: function (element, data) {\n var headingElement = element.children[0];\n var groupElement = element.children[1];\n headingElement.textContent = data.newValue;\n groupElement.setAttribute('aria-label', data.newValue);\n }\n },\n created: function (element) {\n element.className += ' aui-dropdown2-section';\n element.setAttribute('role', 'presentation');\n }\n});\n\nconst DropdownEl = skate('aui-dropdown-menu', {\n template: template(`\n <div role=\"application\">\n <content></content>\n </div>\n `),\n created: function (dropdown) {\n dropdown.setAttribute('role', 'menu');\n dropdown.className = 'aui-dropdown2 aui-style-default aui-layer';\n state(dropdown).set('loading-state', UNLOADED);\n // Now skate the .aui-dropdown2 behaviour.\n skate.init(dropdown);\n },\n detached: function (dropdown) {\n ifGone(dropdown).then(() => destroyAlignment(dropdown));\n },\n attributes: {\n src: {}\n },\n prototype: dropdownPrototype,\n events: {\n 'aui-layer-show': loadContentWhenMenuShown\n }\n});\n\n// Legacy dropdown inits\n// ---------------------\n\nskate('aui-dropdown2', {\n type: skate.type.CLASSNAME,\n created: dropdownCreated,\n prototype: dropdownPrototype\n});\n\nskate('data-aui-dropdown2', {\n type: skate.type.ATTRIBUTE,\n created: dropdownCreated,\n prototype: dropdownPrototype\n});\n\nskate('aui-dropdown2-trigger', {\n type: skate.type.CLASSNAME,\n created: triggerCreated,\n prototype: triggerPrototype\n});\n\nskate('aui-dropdown2-sub-trigger', {\n type: skate.type.CLASSNAME,\n created: function (trigger) {\n trigger.className += ' aui-dropdown2-trigger';\n skate.init(trigger);\n }\n});\n\n// Checkboxes and radios\n// ---------------------\n\nskate('aui-dropdown2-checkbox', {\n type: skate.type.CLASSNAME,\n\n created: function (checkbox) {\n var checked = isChecked(checkbox);\n if (checked) {\n $(checkbox).addClass('checked aui-dropdown2-checked');\n }\n checkbox.setAttribute('aria-checked', checked);\n checkbox.setAttribute('tabindex', '0');\n\n // swap from menuitemcheckbox to just plain checkbox for VoiceOver\n if (supportsVoiceOver()) {\n checkbox.setAttribute('role','checkbox');\n }\n },\n\n prototype: {\n isEnabled: function () {\n return !(this.getAttribute('aria-disabled') !== null && this.getAttribute('aria-disabled') === 'true');\n },\n\n isChecked: function () {\n return this.getAttribute('aria-checked') !== null && this.getAttribute('aria-checked') === 'true';\n },\n\n isInteractive: function () {\n return $(this).hasClass('aui-dropdown2-interactive');\n },\n\n uncheck: function () {\n if (this.parentNode.tagName.toLowerCase() === 'aui-item-checkbox') {\n this.parentNode.removeAttribute('checked');\n }\n this.setAttribute('aria-checked', 'false');\n $(this).removeClass('checked aui-dropdown2-checked');\n $(this).trigger('aui-dropdown2-item-uncheck');\n },\n\n check: function () {\n if (this.parentNode.tagName.toLowerCase() === 'aui-item-checkbox') {\n this.parentNode.setAttribute('checked', '');\n }\n this.setAttribute('aria-checked', 'true');\n $(this).addClass('checked aui-dropdown2-checked');\n $(this).trigger('aui-dropdown2-item-check');\n }\n }\n});\n\nskate('aui-dropdown2-radio', {\n type: skate.type.CLASSNAME,\n\n created: function (radio) {\n // add a dash of ARIA\n var checked = isChecked(radio);\n if (checked) {\n $(radio).addClass('checked aui-dropdown2-checked');\n }\n radio.setAttribute('aria-checked', checked);\n radio.setAttribute('tabindex', '0');\n\n // swap from menuitemradio to just plain radio for VoiceOver\n if (supportsVoiceOver()) {\n radio.setAttribute('role','radio');\n }\n },\n\n prototype: {\n isEnabled: function () {\n return !(this.getAttribute('aria-disabled') !== null && this.getAttribute('aria-disabled') === 'true');\n },\n\n isChecked: function () {\n return this.getAttribute('aria-checked') !== null && this.getAttribute('aria-checked') === 'true';\n },\n\n isInteractive: function () {\n return $(this).hasClass('aui-dropdown2-interactive');\n },\n\n uncheck: function () {\n if (this.parentNode.tagName.toLowerCase() === 'aui-item-radio') {\n this.parentNode.removeAttribute('checked');\n }\n this.setAttribute('aria-checked', 'false');\n $(this).removeClass('checked aui-dropdown2-checked');\n $(this).trigger('aui-dropdown2-item-uncheck');\n },\n\n check: function () {\n if (this.parentNode.tagName.toLowerCase() === 'aui-item-radio') {\n this.parentNode.setAttribute('checked', '');\n }\n this.setAttribute('aria-checked', 'true');\n $(this).addClass('checked aui-dropdown2-checked');\n $(this).trigger('aui-dropdown2-item-check');\n }\n }\n});\n\nexport {\n DropdownEl,\n ItemLinkEl,\n ItemRadioEl,\n ItemCheckboxEl,\n SectionEl,\n};\n","import './styles/aui.pattern.messages';\nimport { MessageEl } from '@atlassian/aui/src/js/aui/messages';\nexport { MessageEl };\n","import $ from './jquery';\nimport './spinner';\nimport skate from './internal/skate';\nimport { fn } from './internal/deprecation';\n\n/**\n * @typedef {Object} jQuerySpinnerConfig\n * @property {SpinnerSize} size - the size of the spinner.\n */\n\n/**\n * @param {jQuerySpinnerConfig|String|Boolean} [firstArgs]\n * - when an object, it is a {jQuerySpinnerConfig}\n * - when a string, it represents the `size` the spinner should take.\n * - when boolean, the argument can take only FALSE, in this case, the spinner will be stopped.\n * @param {jQuerySpinnerConfig} [maybeArgs]\n * @deprecated since AUI 7.9.4. Use the `<aui-spinner>` web component directly.\n */\n$.fn.spin = fn(function spinStart(firstArgs, maybeArgs) {\n let args = { size: 'small' };\n if (typeof maybeArgs === 'object') {\n args = $.extend(args, maybeArgs)\n }\n if (typeof firstArgs === 'object') {\n args = $.extend(args, firstArgs);\n }\n if (typeof firstArgs === 'string') {\n args.size = firstArgs;\n }\n if (typeof firstArgs === 'boolean' && firstArgs === false) {\n return this.spinStop();\n }\n\n return this.each(function() {\n if (!this || !this.nodeType) { return; }\n const $this = $(this);\n const data = $this.data();\n if (data) {\n const $spinnerDom = $('<aui-spinner filled></aui-spinner>');\n $spinnerDom.attr('size', args.size); // the web component handles validation\n $spinnerDom.css('color', args.color);\n\n $this.spinStop();\n $this.append($spinnerDom);\n // AUI-4819 - ensure web component is initialised synchronously.\n skate.init(this);\n\n data.spinner = $spinnerDom;\n }\n });\n}, 'jQuery.fn.spin', {\n sinceVersion: '7.9.4',\n removeInVersion: '9.0.0',\n alternativeName: '<aui-spinner>'\n});\n\n/**\n * @deprecated since AUI 7.9.4. Use the `<aui-spinner>` web component directly.\n */\n$.fn.spinStop = fn(function spinStop() {\n return this.each(function() {\n if (!this || !this.nodeType) { return; }\n const $this = $(this);\n const data = $this.data();\n if (data && data.spinner) {\n data.spinner.remove();\n\n delete data.spinner;\n }\n });\n}, 'jQuery.fn.spinStop', {\n sinceVersion: '7.9.4',\n removeInVersion: '9.0.0',\n alternativeName: '<aui-spinner>'\n});\n","/**\n * Like el.hasAttribute(attr) but designed for use within a skate attribute\n * change handler where you only have access to change.oldValue.\n */\nexport function computeBooleanValue(attrValue) {\n return attrValue !== null;\n}\n\nexport function setBooleanAttribute(el, attr, newValue) {\n if (newValue) {\n el.setAttribute(attr, '');\n } else {\n el.removeAttribute(attr);\n }\n}\n\nexport function computeEnumValue(enumOptions, value) {\n const matchesEnumValue = enumValue => enumValue.toLowerCase() === value.toLowerCase();\n\n const isMissing = value === null;\n const isInvalid = !isMissing && !enumOptions.values.filter(matchesEnumValue).length;\n\n if (isMissing) {\n if (enumOptions.hasOwnProperty('missingDefault')) {\n return enumOptions.missingDefault;\n }\n return null;\n }\n\n if (isInvalid) {\n if (enumOptions.hasOwnProperty('invalidDefault')) {\n return enumOptions.invalidDefault;\n } else if (enumOptions.hasOwnProperty('missingDefault')) {\n return enumOptions.missingDefault;\n }\n return null;\n }\n\n return enumOptions.values.length ? enumOptions.values.filter(matchesEnumValue)[0] : null;\n}\n\n\nexport function setEnumAttribute(el, enumOptions, newValue) {\n el.setAttribute(enumOptions.attribute, newValue);\n}\n\n/**\n * Helper functions useful for implementing reflected boolean and enumerated\n * attributes and properties.\n *\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#reflecting-content-attributes-in-idl-attributes\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#boolean-attribute\n * @see https://html.spec.whatwg.org/multipage/infrastructure.html#enumerated-attribute\n */\nexport default {\n computeBooleanValue,\n setBooleanAttribute,\n\n computeEnumValue,\n setEnumAttribute\n};\n","import './styles/aui.page.reset';\nimport '@atlassian/aui/src/less/aui-spinner.less';\nexport { default as SpinnerEl } from '@atlassian/aui/src/js/aui/spinner';\n","import $ from './jquery';\nimport Alignment from './internal/alignment';\nimport amdify from './internal/amdify';\nimport attributes from './internal/attributes';\nimport enforce from './internal/enforcer';\nimport globalize from './internal/globalize';\nimport layer, {EVENT_PREFIX} from './layer';\nimport skate from './internal/skate';\nimport state from './internal/state';\nimport {doIfTrigger, forEachTrigger, getTrigger, setTrigger} from './trigger';\nimport {ifGone} from './internal/elements';\n\nconst DEFAULT_HOVEROUT_DELAY = 1000;\n\nfunction changeTrigger(element, newTrigger) {\n doIfTrigger(element, function(oldTrigger) {\n oldTrigger.setAttribute('aria-expanded', 'false');\n newTrigger.setAttribute('aria-expanded', element.open);\n });\n setTrigger(element, newTrigger);\n}\n\nfunction enableAlignment (element, trigger) {\n if (element._auiAlignment){\n element._auiAlignment.changeTarget(trigger);\n element._auiAlignment.enable();\n element._auiAlignment.scheduleUpdate();\n } else {\n element._auiAlignment = new Alignment(element, trigger, {\n overflowContainer: element.getAttribute('contained-by') === 'viewport' ? 'viewport' : 'window'\n });\n element._auiAlignment.enable();\n }\n}\n\nfunction disableAlignment (element) {\n if (element._auiAlignment) {\n element._auiAlignment.disable();\n }\n}\n\nfunction destroyAlignment (element) {\n if (element._auiAlignment) {\n element._auiAlignment.destroy();\n delete element._auiAlignment;\n }\n}\n\nfunction handleMessage (element, message) {\n var messageTypeMap = {\n toggle: ['click'],\n hover: ['mouseenter', 'mouseleave', 'focus', 'blur']\n };\n\n var messageList = messageTypeMap[element.respondsTo];\n if (messageList && messageList.indexOf(message.type) > -1) {\n messageHandler[message.type](element, message);\n }\n}\n\nvar messageHandler = {\n click: function (element, e) {\n if (element.open && !layer(element).isPersistent()) {\n element.open = false;\n } else {\n changeTrigger(element, e.currentTarget);\n element.open = true;\n }\n },\n\n mouseenter: function (element, e) {\n var newTrigger = e.currentTarget;\n if (newTrigger) {\n changeTrigger(element, newTrigger);\n enableAlignment(element, newTrigger);\n }\n\n if (!element.open) {\n element.open = true;\n }\n\n if (element._clearMouseleaveTimeout) {\n element._clearMouseleaveTimeout();\n }\n },\n\n mouseleave: function (element) {\n if (!element.open || layer(element).isPersistent()) {\n return;\n }\n\n if (element._clearMouseleaveTimeout) {\n element._clearMouseleaveTimeout();\n }\n\n var timeout = setTimeout(function () {\n if (!state(element).get('mouse-inside')) {\n element.open = false;\n }\n }, DEFAULT_HOVEROUT_DELAY);\n\n element._clearMouseleaveTimeout = function () {\n clearTimeout(timeout);\n element._clearMouseleaveTimeout = null;\n };\n },\n\n focus: function (element, e) {\n if (!element.open) {\n changeTrigger(element, e.currentTarget);\n element.open = true;\n }\n },\n\n blur: function (element) {\n if (!layer(element).isPersistent() && element.open) {\n element.open = false;\n }\n }\n};\n\nfunction onMouseEnter(e) {\n var element = e.target;\n state(element).set('mouse-inside', true);\n element.message({\n type: 'mouseenter'\n });\n}\n\nfunction onMouseLeave(e) {\n var element = e.target;\n state(element).set('mouse-inside', false);\n element.message({\n type: 'mouseleave'\n });\n}\n\nfunction rebindMouseEvents(el) {\n state(el).set('mouse-inside', undefined);\n el.removeEventListener('mouseenter', onMouseEnter);\n el.removeEventListener('mouseleave', onMouseLeave);\n\n if (el.respondsTo === 'hover') {\n state(el).set('mouse-inside', false);\n el.addEventListener('mouseenter', onMouseEnter);\n el.addEventListener('mouseleave', onMouseLeave);\n }\n}\nfunction namespaceEvent(eventName, elId) {\n return `${eventName}.nested-layer-${elId}`\n}\n\nfunction handleNestedLayers(el) {\n let $el = $(el);\n const elId = el.id;\n const noNestedTriggers = e => {\n return $el.find(getTrigger(e.target)).length < 1;\n };\n // Temporary timeout variable to resolve AUI-5025 issue\n // as described in further detail below.\n const selectCloseTimeout = 150;\n\n $(document)\n .on(namespaceEvent('aui-layer-show', elId), e => {\n if (noNestedTriggers(e)) {\n return;\n }\n $el.attr('persistent', '');\n })\n .on(namespaceEvent('aui-layer-hide', elId), e => {\n if (noNestedTriggers(e)) {\n return;\n }\n $el.removeAttr('persistent');\n })\n .on(namespaceEvent('select2-opening', elId), () => {\n $el.attr('persistent', '');\n })\n // Relates to solving AUI-5025\n // Temporary solution to race condition with select2,\n // where this runs before select2's dropdown is closed.\n .on(namespaceEvent('select2-close', elId), () => {\n setTimeout(() => {\n $el.removeAttr('persistent');\n }, selectCloseTimeout);\n });\n}\n\nfunction cleanupNestedLayerHandler(elId) {\n $(document)\n .off(namespaceEvent('aui-layer-hide', elId))\n .off(namespaceEvent('aui-layer-show', elId))\n .off(namespaceEvent('select2-opening', elId))\n .off(namespaceEvent('select2-close', elId));\n}\n\nfunction cleanupOnHide(el) {\n cleanupNestedLayerHandler(el.id);\n disableAlignment(el);\n}\n\nfunction showInlineDialog(el) {\n layer(el).show();\n if (layer(el).isVisible()) {\n $(el).on(`${EVENT_PREFIX}-hide`, () => cleanupOnHide(el));\n handleNestedLayers(el);\n doIfTrigger(el, function (trigger) {\n enableAlignment(el, trigger);\n trigger.setAttribute('aria-expanded', 'true');\n });\n } else {\n el.open = false;\n }\n}\n\nfunction hideInlineDialog(el) {\n layer(el).hide();\n if (!layer(el).isVisible()) {\n cleanupOnHide(el);\n doIfTrigger(el, function (trigger) {\n trigger.setAttribute('aria-expanded', 'false');\n });\n } else {\n el.open = true;\n }\n setTrigger(el, null);\n}\n\nfunction reflectOpenness(el) {\n const isInitalizing = !el.hasAttribute('aria-hidden');\n const shouldBeOpen = el.hasAttribute('open');\n if (isInitalizing || el.open !== shouldBeOpen) {\n if (shouldBeOpen) {\n state(el).set('is-processing-show', true);\n showInlineDialog(el);\n state(el).set('is-processing-show', false);\n } else {\n hideInlineDialog(el);\n }\n }\n}\n\nconst RESPONDS_TO_ATTRIBUTE_ENUM = {\n attribute: 'responds-to',\n values: ['toggle', 'hover'],\n missingDefault: 'toggle',\n invalidDefault: 'toggle'\n};\n\nconst InlineDialogEl = skate('aui-inline-dialog', {\n prototype: {\n /**\n * Returns whether the inline dialog is open.\n */\n get open() {\n return layer(this).isVisible();\n },\n\n /**\n * Opens or closes the inline dialog, returning whether the dialog is\n * open or closed as a result (since event handlers can prevent either\n * action).\n *\n * You should check the value of open after setting this\n * value since the before show/hide events may have prevented it.\n */\n set open(value) {\n // TODO AUI-3726 Revisit double calls to canceled event handlers.\n // Explicitly calling reflectOpenness(…) in this setter means\n // that in native we'll get two sync calls to reflectOpenness(…)\n // and in polyfill one sync (here) and one async (attr change\n // handler). The latter of the two calls, for both cases, will\n // usually be a noop (except when show/hide events are cancelled).\n attributes.setBooleanAttribute(this, 'open', value);\n reflectOpenness(this);\n },\n\n get persistent() {\n return this.hasAttribute('persistent');\n },\n\n set persistent(value) {\n attributes.setBooleanAttribute(this, 'persistent', value);\n },\n\n get respondsTo() {\n var attr = RESPONDS_TO_ATTRIBUTE_ENUM.attribute;\n return attributes.computeEnumValue(RESPONDS_TO_ATTRIBUTE_ENUM, this.getAttribute(attr));\n },\n\n set respondsTo(value) {\n const oldComputedValue = this.respondsTo;\n attributes.setEnumAttribute(this, RESPONDS_TO_ATTRIBUTE_ENUM, value);\n if (oldComputedValue !== this.respondsTo) {\n rebindMouseEvents(this);\n }\n },\n\n /**\n * Handles the receiving of a message from another component.\n *\n * @param {Object} msg The message to act on.\n *\n * @returns {HTMLElement}\n */\n message: function (msg) {\n handleMessage(this, msg);\n return this;\n }\n },\n created: function (element) {\n state(element).set('is-processing-show', false);\n },\n\n attributes: {\n 'aria-hidden': function (element, change) {\n if (change.newValue === 'true') {\n doIfTrigger(element, function(trigger) {\n trigger.setAttribute('aria-expanded', 'false');\n });\n }\n\n // Whenever layer manager hides us, we need to sync the open attribute.\n attributes.setBooleanAttribute(element, 'open', change.newValue === 'false');\n },\n\n open: function (element) {\n // skate runs the created callback for attributes before the\n // element is attached to the DOM, so guard against that.\n if (document.body.contains(element)) {\n reflectOpenness(element);\n }\n },\n 'responds-to': function (element, change) {\n const oldComputedValue = attributes.computeEnumValue(RESPONDS_TO_ATTRIBUTE_ENUM, change.oldValue);\n const newComputedValue = attributes.computeEnumValue(RESPONDS_TO_ATTRIBUTE_ENUM, change.newValue);\n if (oldComputedValue !== newComputedValue) {\n rebindMouseEvents(element);\n }\n }\n },\n\n attached: function (element) {\n enforce(element).attributeExists('id');\n if (element.hasAttribute('open')) {\n // show() can cause the element to be reattached (to the <body>),\n // so guard against a nested show() call that blows up the layer\n // manager (since it sees us pushing the same element twice).\n if (!state(element).get('is-processing-show')) {\n reflectOpenness(element);\n }\n } else {\n reflectOpenness(element);\n }\n rebindMouseEvents(element);\n doIfTrigger(element, function (trigger) {\n trigger.setAttribute('aria-expanded', element.open);\n });\n forEachTrigger(element, function (trigger) {\n trigger.setAttribute('aria-haspopup', 'true');\n });\n },\n\n detached: function (element) {\n ifGone(element).then(() => {\n destroyAlignment(element);\n forEachTrigger(element, function (trigger) {\n trigger.removeAttribute('aria-haspopup');\n trigger.removeAttribute('aria-expanded');\n })\n });\n },\n\n template: function (element) {\n var elem = $('<div class=\"aui-inline-dialog-contents\"></div>').append(element.childNodes);\n $(element)\n .addClass('aui-layer')\n .html(elem);\n }\n});\n\namdify('aui/inline-dialog2', InlineDialogEl);\nglobalize('InlineDialog2', InlineDialogEl);\nexport default InlineDialogEl;\n","import './styles/aui.pattern.nav';\nexport {default as navigation, NavigationEl} from '@atlassian/aui/src/js/aui/navigation';\n","import i18n from './i18n';\nimport $ from './jquery';\nimport skate from './internal/skate';\nimport globalize from './internal/globalize';\nimport widget from './internal/widget';\n\n/**\n * Navigation (\".aui-nav\" elements).\n *\n * @param {(string|HtmlElement|jQuery)} selector - An expression\n * representing a single .aui-nav element; you may also pass an expression\n * for a descendent element, in which case the closest containing\n * .aui-nav element is used.\n * @constructor\n */\nfunction Navigation (selector) {\n this.$el = $(selector).closest('.aui-nav');\n\n // If there are multiple objects, initialise them separately\n if (this.$el.length > 1) {\n return this.$el.map(function (idx, elm) {\n return new Navigation(elm);\n })[0];\n }\n\n // If already initialised, return existing object\n if (this.$el.data('aui-navigation')) {\n return this.$el.data('aui-navigation');\n }\n\n this.$el.data('aui-navigation', this);\n\n this.$treeParent = this.$el.parent('li[aria-expanded]');\n this.$subtreeToggleIcon = this.$treeParent\n .children('.aui-nav-subtree-toggle')\n .children('span.aui-icon');\n\n // Hide extra items under a 'More...' link\n this.hideMoreItems();\n\n // Add child-selected class to relevant attributes\n this.$el.children('li:has(.aui-nav-selected)').addClass('aui-nav-child-selected');\n\n // Auto-expand if child is selected\n var $selected = this.$el.children('.aui-nav-selected');\n $selected\n .parents('.aui-nav > [aria-expanded=false]')\n .add($selected.filter('[aria-expanded=false]'))\n .each(function () {\n var nav = navigationWidget($(this).children('.aui-nav'));\n nav.expand();\n });\n\n // Toggle expand on click\n this.$el.find('> li[aria-expanded] > .aui-nav-subtree-toggle').on('click', function () {\n var nav = navigationWidget($(this).siblings('.aui-nav'));\n nav.toggle();\n });\n\n return this;\n}\n\nNavigation.prototype.isNested = function () {\n return this.$treeParent.length === 1;\n};\n\nNavigation.prototype.isCollapsed = function () {\n return this.$treeParent.attr('aria-expanded') === 'false';\n};\n\nNavigation.prototype.expand = function () {\n this.$treeParent.attr('aria-expanded', 'true');\n this.$subtreeToggleIcon\n .removeClass('aui-iconfont-collapsed')\n .addClass('aui-iconfont-expanded');\n this.hideMoreItems();\n return this;\n};\n\nNavigation.prototype.collapse = function () {\n this.$treeParent.attr('aria-expanded', 'false');\n this.$subtreeToggleIcon\n .removeClass('aui-iconfont-expanded')\n .addClass('aui-iconfont-collapsed');\n return this;\n};\n\nNavigation.prototype.toggle = function () {\n if (this.isCollapsed()) {\n this.expand();\n } else {\n this.collapse();\n }\n return this;\n};\n\nNavigation.prototype.hideMoreItems = function () {\n if (this.$el.is('.aui-nav:not([aria-expanded=false]) [data-more]')) {\n var moreText = this.$el.attr('data-more') || i18n.getText('aui.words.moreitem');\n var limit = Math.abs(parseInt(this.$el.attr('data-more-limit'))) || 5;\n var $listElements = this.$el.children('li');\n\n // Only add 'More...' if there is more than one element to hide and there are no selected elements\n var lessThanTwoToHide = $listElements.length <= limit + 1;\n var selectedElementPresent = $listElements.filter('.aui-nav-selected').length;\n var alreadyInitialised = $listElements.filter('.aui-nav-more').length;\n if (lessThanTwoToHide || selectedElementPresent || alreadyInitialised) {\n return this;\n }\n\n $('<li>', {\n 'class': 'aui-nav-more',\n 'aria-hidden': 'true'\n }).append($('<a>', {\n 'href': '#',\n 'class': 'aui-nav-item',\n 'text': moreText,\n 'click': function (e) {\n e.preventDefault();\n $(this).parent().remove();\n }\n })).insertAfter($listElements.eq(limit - 1));\n }\n\n return this;\n};\n\n\nconst navigationWidget = widget('navigation', Navigation);\n\n// Initialise nav elements\nconst NavigationEl = skate('aui-nav', {\n type: skate.type.CLASSNAME,\n attached: function (element) {\n new Navigation(element);\n },\n detached: function (element) {\n $(element).removeData();\n }\n});\n\nglobalize('navigation', navigationWidget);\n\nexport default navigationWidget;\nexport {\n NavigationEl\n};\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport '@atlassian/aui/src/less/tabs.less';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport '@atlassian/aui/src/less/aui-badge.less';\n","import './styles/aui.page.iconography';\nimport './styles/aui.pattern.icon';\nimport './styles/aui.pattern.forms';\nimport './aui.component.tooltip';\nimport '@atlassian/aui/src/less/form-notification.less';\nimport '@atlassian/aui/src/js/aui/form-notification.js';\nexport {};\n","import $ from './jquery';\nimport amdify from './internal/amdify';\nimport skate from './internal/skate';\nimport './spinner'\nimport {getMessageLogger} from './internal/deprecation'\n\nconst CLASS_NOTIFICATION_INITIALISED = '_aui-form-notification-initialised';\n\nconst ATTRIBUTE_NOTIFICATION_PREFIX = 'data-aui-notification-';\nconst ATTRIBUTE_NOTIFICATION_WAIT = ATTRIBUTE_NOTIFICATION_PREFIX + 'wait';\nconst ATTRIBUTE_NOTIFICATION_INFO = ATTRIBUTE_NOTIFICATION_PREFIX + 'info';\nconst ATTRIBUTE_NOTIFICATION_ERROR = ATTRIBUTE_NOTIFICATION_PREFIX + 'error';\nconst ATTRIBUTE_NOTIFICATION_SUCCESS = ATTRIBUTE_NOTIFICATION_PREFIX + 'success';\n\nconst NOTIFICATION_PRIORITY = [\n ATTRIBUTE_NOTIFICATION_ERROR,\n ATTRIBUTE_NOTIFICATION_SUCCESS,\n ATTRIBUTE_NOTIFICATION_WAIT,\n ATTRIBUTE_NOTIFICATION_INFO\n];\n\nfunction initialiseNotification($field) {\n if (!isFieldInitialised($field)) {\n prepareFieldMarkup($field);\n synchroniseNotificationDisplay($field);\n }\n}\n\nfunction isFieldInitialised($field) {\n return $field.hasClass(CLASS_NOTIFICATION_INITIALISED);\n}\n\nfunction prepareFieldMarkup($field) {\n $field.addClass(CLASS_NOTIFICATION_INITIALISED);\n appendDescription($field);\n}\n\nfunction appendDescription($field, message) {\n message = message ? message : getNotificationMessage($field);\n if (getFieldNotificationType($field) === ATTRIBUTE_NOTIFICATION_INFO) {\n $field.after(descriptionTemplate(message))\n }\n}\n\nfunction getNotificationMessage($field) {\n var notificationType = getFieldNotificationType($field);\n var message = notificationType ? $field.attr(notificationType) : '';\n return message === '' ? message : jsonToArray(message);\n}\n\nfunction jsonToArray(jsonOrString) {\n var jsonArray;\n try {\n jsonArray = JSON.parse(jsonOrString);\n } catch (exception) {\n jsonArray = [jsonOrString];\n }\n return jsonArray;\n}\n\nfunction getFieldNotificationType($field) {\n var fieldNotificationType;\n NOTIFICATION_PRIORITY.some(function (prioritisedNotification) {\n if ($field.is('[' + prioritisedNotification + ']')) {\n fieldNotificationType = prioritisedNotification;\n return true;\n }\n });\n\n return fieldNotificationType;\n}\n\nfunction synchroniseNotificationDisplay(field) {\n const $field = $(field);\n\n if (!isFieldInitialised($field)) {\n return;\n }\n const type = getFieldNotificationType($field);\n const showSpinner = type === ATTRIBUTE_NOTIFICATION_WAIT;\n\n setFieldSpinner($field, showSpinner);\n\n const message = getNotificationMessage($field);\n if (message && type === ATTRIBUTE_NOTIFICATION_ERROR) {\n appendErrorMessages($field, message);\n }\n}\n\nfunction errorMessageTemplate(messages) {\n let list = messages\n .map(message => `<li><span class=\"aui-icon aui-icon-small aui-iconfont-error aui-icon-notification\">${message}</span>${message}</li>`)\n .join('');\n return `<div class=\"error\"><ul>${list}</ul></div>`;\n}\n\nfunction descriptionTemplate(messages) {\n if (messages.length > 1) {\n let list = messages\n .map(message => `<li>${message}</li>`)\n .join('');\n return `<div class=\"description\"><ul>${list}</ul></div>`;\n }\n return `<div class=\"description\">${messages}</div>`;\n}\n\nfunction appendErrorMessages($field, messages) {\n let previousErrors = getMessageContainer($field, 'error');\n if (previousErrors.length > 0) {\n previousErrors.remove();\n }\n $field.after(errorMessageTemplate(messages));\n}\n\nfunction getMessageContainer($field, type) {\n return $field.parent().find(`.${type}`);\n}\n\nfunction isSpinnerForFieldAlreadyExisting($field) {\n return $field.next('aui-spinner').length > 0;\n}\n\nfunction setFieldSpinner($field, isSpinnerVisible) {\n if (isSpinnerVisible && !isSpinnerForFieldAlreadyExisting($field)) {\n $field.after('<aui-spinner class=\"form-notification-spinner\" size=\"small\"></aui-spinner>');\n } else {\n $field.parent().find('aui-spinner').remove();\n }\n}\n\nconst deprecationLogger = getMessageLogger('data-aui-notification-field attribute', {\n deprecationType: 'ATTRIBUTE',\n alternativeName: 'HTML markup'\n});\n\nskate('data-aui-notification-field', {\n attached: function (element) {\n deprecationLogger();\n initialiseNotification($(element));\n },\n attributes: (function () {\n const attrs = {};\n NOTIFICATION_PRIORITY.forEach(function (type) {\n attrs[type] = synchroniseNotificationDisplay;\n });\n return attrs;\n }()),\n type: skate.type.ATTRIBUTE\n});\n\namdify('aui/form-notification');\n\nexport {\n getMessageContainer,\n appendErrorMessages,\n appendDescription,\n errorMessageTemplate,\n setFieldSpinner\n}\n","import $ from '../jquery';\nimport * as logger from '../internal/log';\nimport amdify from '../internal/amdify';\n\nvar ATTRIBUTE_RESERVED_ARGUMENTS = ['displayfield', 'watchfield', 'when', 'novalidate', 'state'];\nvar validators = [];\n\nfunction getReservedArgument (validatorArguments) {\n var reservedArgument = false;\n\n validatorArguments.some(function (arg) {\n var isReserved = $.inArray(arg, ATTRIBUTE_RESERVED_ARGUMENTS) !== -1;\n\n if (isReserved) {\n reservedArgument = arg;\n }\n\n return isReserved;\n });\n\n return reservedArgument;\n}\n\n/**\n * Register a validator that can be used to validate fields. The main entry point for validator plugins.\n * @param trigger - when to run the validator. Can be an array of arguments, or a selector\n * @param validatorFunction - the function that will be called on the field to determine validation. Receives\n * field - the field that is being validated\n * args - the arguments that have been specified in HTML markup.\n */\nfunction registerValidator (trigger, validatorFunction) {\n var triggerSelector;\n\n if (typeof trigger === 'string') {\n triggerSelector = trigger;\n } else {\n var reservedArgument = getReservedArgument(trigger);\n\n if (reservedArgument) {\n logger.warn('Validators cannot be registered with the argument \"' + reservedArgument + '\", as it is a reserved argument.');\n return false;\n }\n\n triggerSelector = '[data-aui-validation-' + trigger.join('],[data-aui-validation-') + ']';\n }\n\n var validator = {\n validatorFunction: validatorFunction,\n validatorTrigger: triggerSelector\n };\n\n validators.push(validator);\n\n return validator;\n}\n\nvar validatorRegister = {\n register: registerValidator,\n validators: function () {\n return validators;\n }\n};\n\namdify('aui/form-validation/validator-register', validatorRegister);\n\nexport default validatorRegister;\n","import $ from '../../jquery';\nimport CustomEvent from '../../polyfills/custom-event';\nimport debounce from '../../debounce';\nimport i18n from '../../i18n';\nimport skate from '../skate';\nimport template from 'skatejs-template-html';\n\nconst $window = $(window);\n\nfunction Header (element) {\n var that = this;\n\n this.element = element;\n this.$element = $(element);\n this.index = $('aui-header, .aui-header').index(element);\n this.$secondaryNav = this.$element.find('.aui-header-secondary .aui-nav').first();\n this.menuItems = [];\n this.totalWidth = 0;\n this.$moreMenu = undefined;\n this.rightMostNavItemIndex = undefined;\n this.$applicationLogo = this.$element.find('#logo');\n this.moreMenuWidth = 0;\n this.primaryButtonsWidth = 0;\n\n // to cache the selector and give .find convenience\n this.$headerFind = (function () {\n var $header = $(that.$element[0].querySelector('.aui-header-primary'));\n\n return function (selector) {\n return $header.find(selector);\n };\n }());\n}\n\nHeader.prototype = {\n init: function () {\n var that = this;\n\n this.element.setAttribute('data-aui-responsive', 'true');\n this.$headerFind('.aui-button').parent().each(function () {\n that.primaryButtonsWidth += $(this).outerWidth(true);\n });\n\n // remember the widths of all the menu items\n this.$headerFind('.aui-nav > li > a:not(.aui-button)').each(function () {\n var $this = $(this).parent();\n var outerWidth = $this.outerWidth(true);\n\n that.totalWidth += outerWidth;\n that.menuItems.push({\n $element: $this,\n outerWidth: outerWidth\n });\n });\n\n /** The zero based index of the right-most visible nav menu item. */\n this.rightMostNavItemIndex = this.menuItems.length - 1;\n\n $window.on('resize', this._resizeHandler = debounce(function () {\n that.constructResponsiveDropdown();\n }, 100));\n\n // So that the header logo doesn't mess things up. (size is unknown before the image loads)\n var $logoImg = this.$applicationLogo.find('img');\n\n if ($logoImg.length !== 0) {\n $logoImg.attr('data-aui-responsive-header-index', this.index);\n $logoImg.on('load', function () {\n that.constructResponsiveDropdown();\n });\n }\n\n this.constructResponsiveDropdown();\n\n // show the aui nav (hidden via css on load)\n this.$headerFind('.aui-nav').css('width', 'auto');\n },\n\n destroy: function () {\n $window.off('resize', this._resizeHandler);\n },\n\n // calculate widths based on the current state of the page\n calculateAvailableWidth: function () {\n // if there is no secondary nav, use the right of the screen as the boundary instead\n var rightMostBoundary = this.$secondaryNav.is(':visible') ? this.$secondaryNav.offset().left : this.$element.outerWidth();\n\n // the right most side of the primary nav, this is assumed to exists if this code is running\n var primaryNavRight = this.$applicationLogo.offset().left + this.$applicationLogo.outerWidth(true) + this.primaryButtonsWidth;\n\n return rightMostBoundary - primaryNavRight;\n },\n\n showResponsiveDropdown: function () {\n if (this.$moreMenu === undefined) {\n this.$moreMenu = this.createResponsiveDropdownTrigger();\n }\n this.$moreMenu.css('display', '');\n },\n\n hideResponsiveDropdown: function () {\n if (this.$moreMenu !== undefined) {\n this.$moreMenu.css('display', 'none');\n }\n },\n\n constructResponsiveDropdown: function () {\n if (!this.menuItems.length) {\n return;\n }\n\n var remainingWidth;\n var availableWidth = this.calculateAvailableWidth(this.$element, this.primaryButtonsWidth);\n\n if (availableWidth > this.totalWidth) {\n this.showAll();\n } else {\n this.showResponsiveDropdown();\n remainingWidth = availableWidth - this.moreMenuWidth;\n\n // Figure out how many nav menu items fit into the available space.\n var newRightMostNavItemIndex = -1;\n while (remainingWidth - this.menuItems[newRightMostNavItemIndex + 1].outerWidth >= 0) {\n remainingWidth -= this.menuItems[newRightMostNavItemIndex + 1].outerWidth;\n newRightMostNavItemIndex++;\n }\n\n if (newRightMostNavItemIndex < this.rightMostNavItemIndex) {\n this.moveToResponsiveDropdown(this.rightMostNavItemIndex - newRightMostNavItemIndex);\n } else if (this.rightMostNavItemIndex < newRightMostNavItemIndex) {\n this.moveOutOfResponsiveDropdown(newRightMostNavItemIndex - this.rightMostNavItemIndex);\n }\n }\n },\n\n // creates the trigger and content elements for the show more dropdown\n createResponsiveDropdownTrigger: function () {\n var moreNavItemEl = document.createElement('li');\n var dropdownEl = document.createElement('aui-dropdown-menu');\n dropdownEl.id = `aui-responsive-header-dropdown-${this.index}`;\n skate.init(dropdownEl);\n\n var dropdownSectionEl = document.createElement('aui-section');\n dropdownSectionEl.id = `aui-responsive-header-dropdown-list-${this.index}`;\n skate.init(dropdownSectionEl);\n\n template.wrap(dropdownEl).appendChild(dropdownSectionEl);\n\n var triggerEl = createTriggerAndAssociate(dropdownEl);\n moreNavItemEl.appendChild(triggerEl);\n moreNavItemEl.appendChild(dropdownEl);\n\n // Append the More menu before any primary buttons.\n if (this.primaryButtonsWidth === 0) {\n this.$headerFind('.aui-nav').append(moreNavItemEl);\n } else {\n this.$headerFind('.aui-nav > li > .aui-button:first').parent().before(moreNavItemEl);\n }\n\n this.moreMenuWidth = $(moreNavItemEl).outerWidth(true);\n return $(moreNavItemEl);\n },\n\n // function that handles moving items out of the show more menu into the app header\n moveOutOfResponsiveDropdown: function (numItems) {\n if (numItems <= 0) {\n return;\n }\n\n var $moreDropdown = $(`#aui-responsive-header-dropdown-${this.index}`);\n\n // Move items (working top-to-bottom) from the more menu into the nav bar.\n var leftMostIndexToMove = this.rightMostNavItemIndex + 1;\n var rightMostIndexToMove = this.rightMostNavItemIndex + numItems;\n for (var i = leftMostIndexToMove; i <= rightMostIndexToMove; i++) {\n var $navItem = this.menuItems[i].$element;\n var $navItemTrigger = $navItem.children('a');\n\n if ($navItemTrigger.attr('aria-controls')) {\n var $navItemDropdown = $(document.getElementById($navItemTrigger.attr('aria-controls')));\n $navItemDropdown.removeClass('aui-dropdown2-sub-menu');\n $navItem.append($navItemDropdown);\n }\n\n $moreDropdown.find('aui-item-link:first').remove();\n $navItem.insertBefore(this.$moreMenu);\n }\n\n this.rightMostNavItemIndex += numItems;\n },\n\n // function that handles moving items into the show more menu\n moveToResponsiveDropdown: function (numItems) {\n if (numItems <= 0) {\n return;\n }\n\n var moreDropdownSectionEl = template.wrap(this.$moreMenu[0].querySelector('aui-section'));\n\n // Move items (working right-to-left) from the nav bar to the more menu.\n var rightMostIndexToMove = this.rightMostNavItemIndex;\n var leftMostIndexToMove = this.rightMostNavItemIndex - numItems + 1;\n for (var i = rightMostIndexToMove; i >= leftMostIndexToMove; i--) {\n var $navItem = this.menuItems[i].$element;\n var $navItemTrigger = $navItem.children('a');\n skate.init($navItemTrigger); // ensure all triggers have gone through their lifecycle before we check for submenus\n\n var moreDropdownItemEl = document.createElement('aui-item-link');\n moreDropdownItemEl.setAttribute('href', $navItemTrigger.attr('href'));\n if ($navItemTrigger.attr('aria-controls')) {\n var $navItemDropdown = $(document.getElementById($navItemTrigger.attr('aria-controls')));\n moreDropdownItemEl.setAttribute('for', $navItemTrigger.attr('aria-controls'));\n $navItemDropdown.addClass('aui-dropdown2-sub-menu');\n $navItemDropdown.appendTo('body');\n }\n skate.init(moreDropdownItemEl);\n template.wrap(moreDropdownItemEl).textContent = $navItemTrigger.text();\n\n $navItem.detach();\n moreDropdownSectionEl.insertBefore(moreDropdownItemEl, moreDropdownSectionEl.firstChild);\n this.element.dispatchEvent(new CustomEvent('aui-responsive-menu-item-created', {\n bubbles: true,\n detail: {\n originalItem: $navItem[0],\n newItem: moreDropdownItemEl\n }\n }));\n }\n\n this.rightMostNavItemIndex -= numItems;\n },\n\n // function that handles show everything\n showAll: function () {\n this.moveOutOfResponsiveDropdown((this.menuItems.length - 1) - this.rightMostNavItemIndex);\n this.hideResponsiveDropdown();\n }\n};\n\nfunction createTriggerAndAssociate(dropdown) {\n var trigger = document.createElement('a');\n trigger.setAttribute('class', 'aui-dropdown2-trigger');\n trigger.setAttribute('href', '#');\n trigger.id = dropdown.id + '-trigger';\n trigger.setAttribute('aria-controls', dropdown.id);\n trigger.innerHTML = i18n.getText('aui.words.more');\n\n return trigger;\n}\n\n/**\n * Initialise a Header, or return an existing Header for an element.\n */\nfunction createHeader (element) {\n let header = element._header;\n if (!(header instanceof Header)) {\n header = new Header(element);\n header.init();\n element._header = header;\n }\n return header;\n}\n\nexport default createHeader;\n","( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\n\n// This file is deprecated\nreturn $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n} ) );\n","/*!\n * jQuery UI :data 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: http://api.jqueryui.com/data-selector/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\nreturn $.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n} ) );\n","/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\n\nreturn $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n} ) );\n","import $ from '../jquery';\n\nconst eventRoot = document || {};\nconst $eventTarget = $(eventRoot);\n\n/**\n * Triggers a custom event on the AJS object\n *\n * @param {String} name - name of event\n * @param {Array} args - args for event handler\n */\nfunction triggerEvt (name, args) {\n $eventTarget.trigger(name, args);\n}\n\n/**\n * Binds handler to the AJS object\n *\n * @param {String} name\n * @param {Function} func\n */\nfunction bindEvt (name, func) {\n $eventTarget.bind(name, func);\n}\n\n/**\n * Some generic error handling that fires event in multiple contexts\n * - on AJS object\n * - on Instance\n * - on AJS object with prefixed id.\n *\n * @param evt\n * @param inst\n * @param args\n */\nfunction triggerEvtForInst (evt, inst, args) {\n $(inst).trigger(evt, args);\n triggerEvt(evt, args);\n if (inst.id) {\n triggerEvt(inst.id + '-' + evt, args);\n }\n}\n\nexport {\n bindEvt,\n triggerEvt,\n triggerEvtForInst\n};\n","export * from './aui.side-effects';\nexport { log, error, warn } from './behaviours/aui.behaviour.logger';\nimport {i18n as I18n} from './behaviours/aui.behaviour.i18n';\nimport './aui.batch.page';\nimport './aui.batch.patterns';\nimport './aui.batch.iconography';\nexport * from './aui.batch.components';\n// Optional features\nimport './aui.component.form-notification';\nimport './aui.component.form-validation';\nimport { Header } from './aui.component.async-header';\nimport { DatePicker } from './aui.component.form.date-select';\nimport { RestfulTable } from './aui.component.restful-table';\nimport { sidebar } from './aui.component.sidebar';\nimport { whenIType } from './behaviours/aui.behaviour.keyboard-shortcuts';\n\nexport {\n I18n,\n Header,\n DatePicker,\n RestfulTable,\n sidebar,\n whenIType,\n};\n\nexport const {\n FocusManager,\n InlineDialog2,\n LayerManager,\n ProgressiveDataSet,\n clone,\n debounce,\n debounceImmediate,\n dim,\n escapeHtml,\n formValidation,\n id,\n isClipped,\n keyCode,\n layer,\n messages,\n populateParameters,\n responsiveheader,\n select,\n tablessortable,\n tabs,\n undim,\n _addID\n} = window.AJS;\n\n// Fix AUI + WRM compatibility in a hacky way.\nexport const { contextPath } = window.AJS;\n","/**\n * @fileOverview\n * This imports everything that should be available and executed\n * if a consumer requests the \"core\" of AUI (i.e., the \"ajs\" web-resource).\n * It should be kept as lean as possible!\n * Only import things that are used across 90% of pages.\n */\nimport './styles/aui.page.reset';\nimport './styles/aui.page.typography';\nimport './styles/aui.page.iconography';\nimport './styles/aui.page.links';\nimport './styles/aui.pattern.basic';\nimport './styles/aui.pattern.page-layout';\nimport './styles/aui.pattern.page-header';\nimport './styles/aui.pattern.group';\nimport './styles/aui.pattern.avatar';\nimport './styles/aui.pattern.button';\nimport './styles/aui.pattern.forms';\nimport './styles/aui.pattern.toolbar2';\nexport * from './aui.core';\n// todo AUI-4814: undo the weird relationships between layer, layerManager, and LayerManager.global\nexport * from './behaviours/aui.behaviour.layer-manager'; // because this is created in layer.js, and is needed as a side-effect on most pages :(\nexport {default as $} from '@atlassian/aui/src/js/aui/setup';\nexport {default as toInit} from '@atlassian/aui/src/js/aui/to-init';\n","/**\n * @fileOverview\n * Includes the most minimal set of JavaScript\n * possible to make an Atlassian UI \"work\".\n *\n * This entry-point should *not* include anything that causes\n * a global side-effect. The only exception to this rule\n * is registering a global variable or AMD module.\n */\nexport * from './behaviours/aui.behaviour.format';\nexport * from './behaviours/aui.behaviour.version';\nexport * from './behaviours/aui.behaviour.event-bus';\nexport * from './behaviours/aui.behaviour.escape-html';\n","/**\n * @fileOverview\n * Provides the `AJS.format` function, which powers\n * all code transformed through the WRM's jsI18n transformation.\n * @note This behaviour really should be a part of the WRM itself.\n * @see https://ecosystem.atlassian.net/browse/PLUGWEB-109\n */\nexport {default as format} from '@atlassian/aui/src/js/aui/format';\n","export {default as version} from '@atlassian/aui/src/js/aui/version';\n","export * from '@atlassian/aui/src/js/aui/event';\n","export * from '@atlassian/aui/src/js/aui/escape-html';\n","// todo AUI-4814: undo the weird relationships between layer, layerManager, and LayerManager.global\nexport * from '@atlassian/aui/src/js/aui/layer-manager';\n","import globalize from './internal/globalize';\nimport layer from './layer';\n\nglobalize('LayerManager', layer.Manager);\n\nexport default layer.Manager;\n","import $ from './jquery';\nimport globalize from './internal/globalize';\nimport keyCodes from './key-code';\nimport {getTrigger} from './trigger';\n\n(function initSelectors () {\n /*\n :tabbable and :focusable functions from jQuery UI v 1.10.4\n renamed to :aui-tabbable and :aui-focusable to not clash with jquery-ui if it's included.\n */\n\n function visible (element) {\n return ($.css(element, 'visibility') === 'visible') && $(element).is(':visible');\n }\n\n function focusable (element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n\n if (nodeName === 'aui-select') {\n return true;\n }\n\n if (nodeName === 'area') {\n var map = element.parentNode;\n var mapName = map.name;\n var imageMap = $('img[usemap=#' + mapName + ']').get();\n\n if (!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {\n return false;\n }\n return imageMap && visible(imageMap);\n }\n var isFormElement = /input|select|textarea|button|object/.test(nodeName);\n var isAnchor = nodeName === 'a';\n var isAnchorTabbable = (element.href || isTabIndexNotNaN);\n\n return (\n isFormElement ? !element.disabled :\n (isAnchor ? isAnchorTabbable : isTabIndexNotNaN)\n ) && visible(element);\n }\n\n function tabbable (element) {\n var tabIndex = $.attr(element, 'tabindex');\n var isTabIndexNaN = isNaN(tabIndex);\n var hasTabIndex = (isTabIndexNaN || tabIndex >= 0);\n\n return hasTabIndex && focusable(element, !isTabIndexNaN);\n }\n\n $.extend($.expr.pseudos, {\n 'aui-focusable': element => focusable(element, !isNaN($.attr(element, 'tabindex'))),\n 'aui-tabbable': tabbable\n });\n}());\n\nvar RESTORE_FOCUS_DATA_KEY = '_aui-focus-restore';\n\nfunction setLastFocus ($el, lastFocussedEl = document.activeElement) {\n $el.data(RESTORE_FOCUS_DATA_KEY, lastFocussedEl);\n}\n\nfunction getLastFocus ($el) {\n return $($el.data(RESTORE_FOCUS_DATA_KEY));\n}\n\nfunction elementTrapsFocus ($el) {\n return $el.is('.aui-dialog2');\n}\n\nfunction FocusManager() {\n this._focusTrapStack = [];\n this._handler;\n}\nFocusManager.defaultFocusSelector = ':aui-tabbable';\nFocusManager.prototype.enter = function ($el) {\n setLastFocus($el);\n\n // focus on new selector\n if ($el.attr('data-aui-focus') !== 'false') {\n var focusSelector = $el.attr('data-aui-focus-selector') || FocusManager.defaultFocusSelector;\n var $focusEl = $el.is(focusSelector) ? $el : $el.find(focusSelector);\n $focusEl.first().trigger('focus');\n }\n\n if (elementTrapsFocus($el)) {\n this._focusTrapStack.push($el);\n if (!this._handler) {\n this._handler = focusTrapHandler.bind(undefined, this._focusTrapStack);\n $(document).on('keydown.aui-focus-manager', this._handler);\n }\n }\n};\n\nFocusManager.prototype.exit = function ($el) {\n if (elementTrapsFocus($el)) {\n this._focusTrapStack.pop();\n if (!this._focusTrapStack.length) {\n $(document).off('.aui-focus-manager', this._handler);\n delete this._handler;\n }\n }\n\n // AUI-1059: remove focus from the active element when dialog is hidden\n // AUI-5014 - if focus is already outside focus trap there is no need to restore it\n var activeElement = document.activeElement;\n if ($el[0] === activeElement || $el.has(activeElement).length) {\n $(activeElement).trigger('blur');\n var $restoreFocus = getLastFocus($el);\n if ($restoreFocus.length) {\n $el.removeData(RESTORE_FOCUS_DATA_KEY);\n $restoreFocus.trigger('focus');\n }\n }\n};\n\nfunction focusTrapHandler(focusTrapStack, event) {\n if (focusTrapStack.length === 0) {\n return;\n }\n\n if (event.keyCode !== keyCodes.TAB) {\n return;\n }\n\n const backwards = event.shiftKey;\n const offset = backwards ? -1 : 1;\n\n /**\n * always the element where focus is about to be blurred\n * @type {HTMLElement}\n */\n const focusOrigin = event.target;\n\n const $focusTrapElement = focusTrapStack[focusTrapStack.length - 1];\n const $tabbableElements = $focusTrapElement.find(':aui-tabbable');\n\n // it's not possible to trap focus inside something with no focussable elements!\n if (!$tabbableElements.length) {\n return;\n }\n\n const originIdx = $tabbableElements.index(focusOrigin);\n let newFocusIdx = -1;\n\n if (originIdx > -1) {\n // the currently focussed element is inside our trap container.\n // excellent! we'll work with this.\n newFocusIdx = originIdx;\n } else {\n // the currently focussed element was outside our trap container.\n // it might be okay to leave it there, though, since AUI has a few layer elements\n // and the focussed element might be in one of those.\n // let's see if the focus was in an element that AUI roughly \"controls\".\n let $controlledElementWithFocus;\n\n // look for a layer in the \"cheapest\" way possible first -- check if a parent is a layer.\n $controlledElementWithFocus = $(focusOrigin).closest('.aui-layer');\n\n if (!$controlledElementWithFocus.length) {\n // look up the controlled layers in a different way -- by finding all controllers first,\n // then their layers.\n const $controllingElements = $focusTrapElement.find('[aria-controls]');\n const $controlledElements = $controllingElements.map(function () {\n return document.getElementById(this.getAttribute('aria-controls'));\n });\n\n // Find out whether the new focus target is inside a controlled element or not.\n $controlledElementWithFocus = $controlledElements.has(focusOrigin);\n }\n\n if ($controlledElementWithFocus.length) {\n // Find out whether we need to jump the focus out of the controlled element.\n const $subTabbable = $controlledElementWithFocus.find(':aui-tabbable');\n const subOriginIdx = $subTabbable.index(focusOrigin);\n const subMove = subOriginIdx + offset;\n if (subMove < 0 || subMove >= $subTabbable.length) {\n // This element was on the edge of the list, so we'll pop focus out.\n // We'll assume we can pop the focus to a controlled element.\n const triggerEl = getTrigger($controlledElementWithFocus.get(0));\n newFocusIdx = $tabbableElements.index(triggerEl);\n } else {\n // Focus will happen normally. Let it happen.\n return;\n }\n }\n }\n\n if (newFocusIdx > -1) {\n // wrap around the focus trap.\n newFocusIdx = (newFocusIdx + offset) % $tabbableElements.length;\n } else {\n // we will focus the first element in the trap.\n newFocusIdx = 0;\n }\n\n $tabbableElements.eq(newFocusIdx).trigger('focus');\n event.preventDefault();\n}\n\n// AUI-4403 - Previous maintainers pretended multiple FocusManager instances made sense.\n// However, the class is implemented in a way that would never play well with others,\n// so here I'm locking it down as a singleton.\nlet instance;\nfunction getFocusManager() {\n if (!instance) {\n instance = new FocusManager();\n }\n return instance;\n}\ngetFocusManager.global = getFocusManager();\n\nglobalize('FocusManager', getFocusManager);\n\nexport default getFocusManager;\n","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\", \"./globals\", \"./lifecycle\", \"./mutation-observer\", \"./fix-ie-innerhtml\", \"./utils\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module, require(\"./globals\"), require(\"./lifecycle\"), require(\"./mutation-observer\"), require(\"./fix-ie-innerhtml\"), require(\"./utils\"));\n }\n})(function (exports, module, _globals, _lifecycle, _mutationObserver, _fixIeInnerhtml, _utils) {\n \"use strict\";\n\n var _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n var globals = _interopRequire(_globals);\n\n var initElements = _lifecycle.initElements;\n var removeElements = _lifecycle.removeElements;\n var getClosestIgnoredElement = _utils.getClosestIgnoredElement;\n\n /**\n * The document observer handler.\n *\n * @param {Array} mutations The mutations to handle.\n *\n * @returns {undefined}\n */\n function documentObserverHandler(mutations) {\n var mutationsLen = mutations.length;\n\n for (var a = 0; a < mutationsLen; a++) {\n var mutation = mutations[a];\n var addedNodes = mutation.addedNodes;\n var removedNodes = mutation.removedNodes;\n\n // Since siblings are batched together, we check the first node's parent\n // node to see if it is ignored. If it is then we don't process any added\n // nodes. This prevents having to check every node.\n if (addedNodes && addedNodes.length && !getClosestIgnoredElement(addedNodes[0].parentNode)) {\n initElements(addedNodes);\n }\n\n // We can't check batched nodes here because they won't have a parent node.\n if (removedNodes && removedNodes.length) {\n removeElements(removedNodes);\n }\n }\n }\n\n /**\n * Creates a new mutation observer for listening to Skate definitions for the\n * document.\n *\n * @param {Element} root The element to observe.\n *\n * @returns {MutationObserver}\n */\n function createDocumentObserver() {\n var observer = new window.MutationObserver(documentObserverHandler);\n\n // Observe after the DOM content has loaded.\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n module.exports = {\n register: function register(fixIe) {\n // IE has issues with reporting removedNodes correctly. See the polyfill for\n // details. If we fix IE, we must also re-define the document observer.\n if (fixIe) {\n this.unregister();\n }\n\n if (!globals.observer) {\n globals.observer = createDocumentObserver();\n }\n\n return this;\n },\n\n unregister: function unregister() {\n if (globals.observer) {\n globals.observer.disconnect();\n globals.observer = undefined;\n }\n\n return this;\n }\n };\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\", \"module\"], factory);\n } else if (typeof exports !== \"undefined\" && typeof module !== \"undefined\") {\n factory(exports, module);\n }\n})(function (exports, module) {\n \"use strict\";\n\n module.exports = function (element) {\n var namespace = arguments[1] === undefined ? \"\" : arguments[1];\n\n var data = element.__SKATE_DATA || (element.__SKATE_DATA = {});\n return namespace && (data[namespace] || (data[namespace] = {})) || data;\n };\n});","(function (factory) {\n if (typeof define === \"function\" && define.amd) {\n define([\"exports\"], factory);\n } else if (typeof exports !== \"undefined\") {\n factory(exports);\n }\n})(function (exports) {\n \"use strict\";\n\n var isIeUntil10 = /MSIE/.test(navigator.userAgent);\n var isIe11 = /Trident/.test(navigator.userAgent);\n var isIe = isIeUntil10 || isIe11;\n var elementPrototype = window.HTMLElement.prototype;\n\n // ! This walkTree method differs from the implementation in ../../utils/walk-tree\n // It invokes the callback only for the children, not the passed node and the second parameter to the callback is the parent node\n function walkTree(node, cb) {\n var childNodes = node.childNodes;\n\n if (!childNodes) {\n return;\n }\n\n var childNodesLen = childNodes.length;\n\n for (var a = 0; a < childNodesLen; a++) {\n var childNode = childNodes[a];\n cb(childNode, node);\n walkTree(childNode, cb);\n }\n }\n\n function fixInnerHTML() {\n var originalInnerHTML = Object.getOwnPropertyDescriptor(elementPrototype, \"innerHTML\");\n\n var get = function get() {\n return originalInnerHTML.get.call(this);\n };\n get._hasBeenEnhanced = true;\n\n // This redefines the innerHTML property so that we can ensure that events\n // are properly triggered.\n Object.defineProperty(elementPrototype, \"innerHTML\", {\n get: get,\n set: function set(html) {\n walkTree(this, function (node, parentNode) {\n var mutationEvent = document.createEvent(\"MutationEvent\");\n mutationEvent.initMutationEvent(\"DOMNodeRemoved\", true, false, parentNode, null, null, null, null);\n node.dispatchEvent(mutationEvent);\n });\n originalInnerHTML.set.call(this, html);\n }\n });\n }\n\n if (isIe) {\n // IE 9-11\n var propertyDescriptor = Object.getOwnPropertyDescriptor(elementPrototype, \"innerHTML\");\n var hasBeenEnhanced = !!propertyDescriptor && propertyDescriptor.get._hasBeenEnhanced;\n\n if (!hasBeenEnhanced) {\n if (isIe11) {\n // IE11's native MutationObserver needs some help as well :()\n window.MutationObserver = window.JsMutationObserver || window.MutationObserver;\n }\n\n fixInnerHTML();\n }\n }\n});","// Global setup that used to be in the main AJS namespace file.\nimport $ from './jquery';\nimport globalize from './internal/globalize';\nimport populateParameters from './populate-parameters';\nimport version from './version';\n\n// Set the version.\n$(function () {\n var $body = $('body');\n\n if (!$body.data('auiVersion')) {\n $body.attr('data-aui-version', version);\n }\n\n populateParameters();\n});\n\n// Setting Traditional to handle our default param serialisation.\n// See http://api.jquery.com/jQuery.param/ for more information.\n$.ajaxSettings.traditional = true;\nglobalize('$', $);\nexport default $;\n","import $ from './jquery';\nimport globalize from './internal/globalize';\nimport params from './params';\n\nfunction populateParameters (parameters) {\n if (!parameters) {\n parameters = params;\n }\n\n $('.parameters input').each(function () {\n var value = this.value;\n var id = this.title || this.id;\n\n if ($(this).hasClass('list')) {\n if (parameters[id]) {\n parameters[id].push(value);\n } else {\n parameters[id] = [value];\n }\n } else {\n parameters[id] = (value.match(/^(tru|fals)e$/i) ? value.toLowerCase() === 'true' : value);\n }\n });\n}\n\nglobalize('populateParameters', populateParameters);\n\nexport default populateParameters;\n","import globalize from './internal/globalize';\nexport default globalize('params', {});\n","import $ from './jquery';\nimport * as logger from './internal/log';\nimport globalize from './internal/globalize';\n\n/**\n * Adds functions to the list of methods to be run asynchronously after DomContentLoaded.\n *\n * Wraps error handling around the provided function so its failure won't prevent\n * other init functions running.\n *\n * @param {Function} func Function to be called on initialisation.\n *\n * @return {Object}\n */\nfunction toInit (func) {\n $.when($.ready).then(function () {\n // Ensure that every function passed through toInit happens asynchronously after DomContentLoaded events,\n // and will be executed in its own stack, meaning that the UI can be updated in-between expensive handlers.\n setTimeout(function () {\n try {\n func.call(this, $);\n } catch (ex) {\n logger.error('Failed to run init function: ' + ex.message, func, ex, ex.stack);\n }\n }, 1);\n });\n\n return this;\n}\n\nglobalize('toInit', toInit);\n\nexport default toInit;\n","export * from '@atlassian/aui/src/js/aui/internal/log';\n","// JS components\nexport * from './aui.component.banner'\nexport * from './aui.component.button'\nexport * from './aui.component.dialog2'\nexport * from './aui.component.dropdown2'\nexport * from './aui.component.expander'\nexport * from './aui.component.flag'\nexport * from './aui.component.form.checkbox-multi-select'\nexport * from './aui.component.form.file-select'\nexport * from './aui.component.form.label'\nexport * from './aui.component.form.select2'\nexport * from './aui.component.form.single-select'\nexport * from './aui.component.form.toggle'\nexport * from './aui.component.inline-dialog2'\n// export * from './aui.component.layer'\nexport * from './aui.component.message'\nexport * from './aui.component.nav'\nexport * from './aui.component.progressbar'\nexport * from './aui.component.sortable-table'\nexport * from './aui.component.spinner'\nexport * from './aui.component.tabs'\nexport * from './aui.component.tooltip'\nexport * from './aui.component.trigger'\n","import './styles/aui.pattern.banner';\nimport './styles/aui.pattern.messages'; // for header interop\nimport '@atlassian/aui/src/less/aui-banner-message-header-interop.less';\nexport { default as banner } from '@atlassian/aui/src/js/aui/banner';\n","import $ from './jquery';\nimport { recomputeStyle } from './internal/animation';\nimport amdify from './internal/amdify';\nimport globalize from './internal/globalize';\n\nvar ID_BANNER_CONTAINER = 'header';\n\nfunction banner (options) {\n var $banner = renderBannerElement(options);\n\n pruneBannerContainer();\n insertBanner($banner);\n\n return $banner[0];\n}\n\nfunction renderBannerElement({body, type = 'error'}) {\n return $('<div class=\"aui-banner\" role=\"banner\"></div>')\n .append($.parseHTML(body || ''))\n .addClass(`aui-banner-${type}`);\n}\n\nfunction pruneBannerContainer() {\n var $container = findContainer();\n var $allBanners = $container.find('.aui-banner');\n\n $allBanners.get().forEach(function (banner) {\n var isBannerAriaHidden = banner.getAttribute('aria-hidden') === 'true';\n if (isBannerAriaHidden) {\n $(banner).remove();\n }\n });\n}\n\nfunction findContainer() {\n return $('#' + ID_BANNER_CONTAINER);\n}\n\nfunction insertBanner($banner) {\n var $bannerContainer = findContainer();\n if (!$bannerContainer.length) {\n throw new Error('You must implement the application header');\n }\n\n $banner.prependTo($bannerContainer);\n recomputeStyle($banner);\n $banner.attr('aria-hidden', 'false');\n}\n\namdify('aui/banner', banner);\nglobalize('banner', banner);\nexport default banner;\n","import './styles/aui.pattern.button';\nimport '@atlassian/aui/src/js/aui/button';\nexport {};\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","import './aui.component.layer';\nimport '@atlassian/aui/src/less/dialog2.less';\nexport { default as dialog2 } from '@atlassian/aui/src/js/aui/dialog2';\n","import $ from './jquery';\nimport amdify from './internal/amdify';\nimport globalize from './internal/globalize';\nimport layerWidget from './layer';\nimport widget from './internal/widget';\nimport keyCode from './key-code';\nimport i18n from './i18n';\n\nvar defaults = {\n 'aui-focus': 'false', // do not focus by default as it's overridden below\n 'aui-blanketed': 'true'\n};\n\nfunction applyDefaults($el) {\n $.each(defaults, function (key, value) {\n var dataKey = 'data-' + key;\n if (!$el[0].hasAttribute(dataKey)) {\n $el.attr(dataKey, value);\n }\n });\n}\n\nconst template = `\n <section role=\"dialog\" class=\"aui-layer aui-dialog2 aui-dialog2-medium\" aria-hidden=\"true\">\n <header class=\"aui-dialog2-header\">\n <h2 class=\"aui-dialog2-header-main\"></h2>\n <button class=\"aui-dialog2-header-close\" aria-label=\"${i18n.getText('aui.words.close')}\">\n <span class=\"aui-icon aui-icon-small aui-iconfont-close-dialog\"></span>\n </button>\n </header>\n <div class=\"aui-dialog2-content\"></div>\n <footer class=\"aui-dialog2-footer\"></footer>\n </section>`;\n\nfunction Dialog2(selector) {\n if (selector) {\n this.$el = $(selector);\n } else {\n this.$el = $(template);\n }\n applyDefaults(this.$el);\n}\n\nDialog2.prototype.on = function (event, fn) {\n layerWidget(this.$el).on(event, fn);\n return this;\n};\n\nDialog2.prototype.off = function (event, fn) {\n layerWidget(this.$el).off(event, fn);\n return this;\n};\n\nDialog2.prototype.show = function () {\n layerWidget(this.$el).show();\n return this;\n};\n\nDialog2.prototype.hide = function () {\n layerWidget(this.$el).hide();\n return this;\n};\n\nDialog2.prototype.remove = function () {\n layerWidget(this.$el).remove();\n return this;\n};\n\nDialog2.prototype.isVisible = function () {\n return layerWidget(this.$el).isVisible();\n};\n\nvar dialog2Widget = widget('dialog2', Dialog2);\n\ndialog2Widget.on = function (eventName, fn) {\n layerWidget.on(eventName, '.aui-dialog2', fn);\n return this;\n};\n\ndialog2Widget.off = function (eventName, fn) {\n layerWidget.off(eventName, '.aui-dialog2', fn);\n return this;\n};\n\n/* Live events */\n\n$(document).on('click keydown', '.aui-dialog2-header-close', function(e) {\n const shouldHandle = e.type === 'click' || e.keyCode === keyCode.ENTER || e.keyCode === keyCode.SPACE;\n if (shouldHandle) {\n e.preventDefault();\n dialog2Widget($(e.target).closest('.aui-dialog2')).hide();\n }\n});\n\ndialog2Widget.on('show', function (e, $el) {\n // prevent inability to focus the close button.\n $el.find('.aui-dialog2-header-close').attr('tabindex', 0);\n\n // find appropriate content to focus, in order of importance of the content.\n var selectors = ['.aui-dialog2-content', '.aui-dialog2-footer', '.aui-dialog2-header'];\n var $selected;\n selectors.some(function (selector) {\n $selected = $el.find(selector).find(':aui-tabbable');\n return $selected.length;\n });\n $selected && $selected.first().focus();\n});\n\ndialog2Widget.on('hide', function (e,$el) {\n var layer = layerWidget($el);\n\n if ($el.data('aui-remove-on-hide')) {\n layer.remove();\n }\n});\n\namdify('aui/dialog2', dialog2Widget);\nglobalize('dialog2', dialog2Widget);\nexport default dialog2Widget;\n","export default {\n 'aui.dropdown.async.error': 'Error loading dropdown',\n 'aui.dropdown.async.loading': 'Loading dropdown',\n 'aui.words.add': 'Add',\n 'aui.words.update': 'Update',\n 'aui.words.delete': 'Delete',\n 'aui.words.remove': 'Remove',\n 'aui.words.cancel': 'Cancel',\n 'aui.words.loading': 'Loading',\n 'aui.words.close': 'Close',\n 'aui.enter.value': 'Enter value',\n 'aui.words.more': 'More',\n 'aui.words.moreitem': 'More…',\n 'aui.keyboard.shortcut.type.x': \"Type ''{0}''\",\n 'aui.keyboard.shortcut.then.x': \"then ''{0}''\",\n 'aui.keyboard.shortcut.or.x': \"OR ''{0}''\",\n 'aui.sidebar.expand.tooltip': 'Expand sidebar ( [ )',\n 'aui.sidebar.collapse.tooltip': 'Collapse sidebar ( [ )',\n 'aui.validation.message.maxlength': 'Must be fewer than or equal to {0} characters',\n 'aui.validation.message.minlength': 'Must be greater than or equal to {0} characters',\n 'aui.validation.message.exactlength': 'Must be exactly {0} characters',\n 'aui.validation.message.matchingfield': '{0} and {1} do not match.',\n 'aui.validation.message.matchingfield-novalue': 'These fields do not match.',\n 'aui.validation.message.doesnotcontain': 'Do not include the phrase {0} in this field',\n 'aui.validation.message.pattern': 'This field does not match the required format',\n 'aui.validation.message.required': 'This is a required field',\n 'aui.validation.message.validnumber': 'Please enter a valid number',\n 'aui.validation.message.min': 'Enter a value greater than or equal to {0}',\n 'aui.validation.message.max': 'Enter a value less than or equal to {0}',\n 'aui.validation.message.dateformat': 'Enter a valid date',\n 'aui.validation.message.minchecked': 'Tick at least {0,choice,0#0 checkboxes|1#1 checkbox|1<{0,number} checkboxes}.',\n 'aui.validation.message.maxchecked': 'Tick at most {0,choice,0#0 checkboxes|1#1 checkbox|1<{0,number} checkboxes}.',\n 'aui.checkboxmultiselect.clear.selected': 'Clear selected items',\n 'aui.select.no.suggestions': 'No suggestions',\n 'aui.select.new.suggestions': 'New suggestions added. Please use the up and down arrows to select.',\n 'aui.select.new.value': 'new value',\n 'aui.toggle.on': 'On',\n 'aui.toggle.off': 'Off',\n 'ajs.datepicker.localisations.day-names.sunday': 'Sunday',\n 'ajs.datepicker.localisations.day-names.monday': 'Monday',\n 'ajs.datepicker.localisations.day-names.tuesday': 'Tuesday',\n 'ajs.datepicker.localisations.day-names.wednesday': 'Wednesday',\n 'ajs.datepicker.localisations.day-names.thursday': 'Thursday',\n 'ajs.datepicker.localisations.day-names.friday': 'Friday',\n 'ajs.datepicker.localisations.day-names.saturday': 'Saturday',\n 'ajs.datepicker.localisations.day-names-min.sunday': 'Sun',\n 'ajs.datepicker.localisations.day-names-min.monday': 'Mon',\n 'ajs.datepicker.localisations.day-names-min.tuesday': 'Tue',\n 'ajs.datepicker.localisations.day-names-min.wednesday': 'Wed',\n 'ajs.datepicker.localisations.day-names-min.thursday': 'Thu',\n 'ajs.datepicker.localisations.day-names-min.friday': 'Fri',\n 'ajs.datepicker.localisations.day-names-min.saturday': 'Sat',\n 'ajs.datepicker.localisations.first-day': 0,\n 'ajs.datepicker.localisations.is-RTL': false,\n 'ajs.datepicker.localisations.month-names.january': 'January',\n 'ajs.datepicker.localisations.month-names.february': 'February',\n 'ajs.datepicker.localisations.month-names.march': 'March',\n 'ajs.datepicker.localisations.month-names.april': 'April',\n 'ajs.datepicker.localisations.month-names.may': 'May',\n 'ajs.datepicker.localisations.month-names.june': 'June',\n 'ajs.datepicker.localisations.month-names.july': 'July',\n 'ajs.datepicker.localisations.month-names.august': 'August',\n 'ajs.datepicker.localisations.month-names.september': 'September',\n 'ajs.datepicker.localisations.month-names.october': 'October',\n 'ajs.datepicker.localisations.month-names.november': 'November',\n 'ajs.datepicker.localisations.month-names.december': 'December',\n 'ajs.datepicker.localisations.show-month-after-year': false,\n 'ajs.datepicker.localisations.year-suffix': null\n}\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.5\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n // Avoid blurry text by using full pixel integers.\n // For pixel-perfect positioning, top/bottom prefers rounded\n // values, while left/right prefers floored values.\n var offsets = {\n left: Math.floor(popper.left),\n top: Math.round(popper.top),\n bottom: Math.round(popper.bottom),\n right: Math.floor(popper.right)\n };\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","import '@atlassian/aui/src/less/aui-experimental-expander.less';\nimport '@atlassian/aui/src/js/aui/expander.js';\nexport {};\n","import $ from './jquery';\n\nvar $document = $(document);\n\n//convenience function because this needs to be run for all the events.\nvar getExpanderProperties = function (event) {\n var properties = {};\n\n properties.$trigger = $(event.currentTarget);\n properties.$content = $document.find('#' + properties.$trigger.attr('aria-controls'));\n properties.triggerIsParent = properties.$content.parent().filter(properties.$trigger).length !== 0;\n properties.$shortContent = properties.triggerIsParent ? properties.$trigger.find('.aui-expander-short-content') : null;\n properties.height = properties.$content.css('min-height');\n properties.isCollapsible = properties.$trigger.data('collapsible') !== false;\n properties.replaceText = properties.$trigger.attr('data-replace-text'); //can't use .data here because it doesn't update after the first call\n properties.replaceSelector = properties.$trigger.data('replace-selector');\n\n return properties;\n};\n\nvar replaceText = function (properties) {\n if (properties.replaceText) {\n var $replaceElement = properties.replaceSelector ?\n properties.$trigger.find(properties.replaceSelector) :\n properties.$trigger;\n\n properties.$trigger.attr('data-replace-text', $replaceElement.text());\n $replaceElement.text(properties.replaceText);\n }\n};\n\n//events that the expander listens to\nvar EXPANDER_EVENTS = {\n 'aui-expander-invoke': function (event) {\n var $trigger = $(event.currentTarget);\n var $content = $document.find('#' + $trigger.attr('aria-controls'));\n var isCollapsible = $trigger.data('collapsible') !== false;\n\n //determine if content should be expanded or collapsed\n if ($content.attr('aria-expanded') === 'true' && isCollapsible) {\n $trigger.trigger('aui-expander-collapse');\n } else {\n $trigger.trigger('aui-expander-expand');\n }\n },\n\n 'aui-expander-expand': function (event) {\n var properties = getExpanderProperties(event);\n\n // If the expander is already expanded, do nothing.\n if (properties.$content.attr('aria-expanded') === 'true') {\n return;\n }\n\n properties.$content.attr('aria-expanded', 'true');\n properties.$trigger.attr('aria-expanded', 'true');\n\n if (properties.$content.outerHeight() > 0) {\n properties.$content.attr('aria-hidden', 'false');\n }\n\n //handle replace text\n replaceText(properties);\n\n //if the trigger is the parent also hide the short-content (default)\n if (properties.triggerIsParent) {\n properties.$shortContent.hide();\n }\n properties.$trigger.trigger('aui-expander-expanded');\n\n },\n\n 'aui-expander-collapse': function (event) {\n var properties = getExpanderProperties(event);\n\n // If the expander is already collapsed, do nothing.\n if (properties.$content.attr('aria-expanded') !== 'true') {\n return;\n }\n\n //handle replace text\n replaceText(properties);\n\n //collapse the expander\n properties.$content.attr('aria-expanded', 'false');\n properties.$trigger.attr('aria-expanded', 'false');\n\n //if the trigger is the parent also hide the short-content (default)\n if (properties.triggerIsParent) {\n properties.$shortContent.show();\n }\n\n //handle the height option\n if (properties.$content.outerHeight() === 0) {\n properties.$content.attr('aria-hidden', 'true');\n }\n\n properties.$trigger.trigger('aui-expander-collapsed');\n },\n\n 'click.aui-expander': function (event) {\n var $target = $(event.currentTarget);\n $target.trigger('aui-expander-invoke', event.currentTarget);\n }\n};\n\n//delegate events to the triggers on the page\n$document.on(EXPANDER_EVENTS, '.aui-expander-trigger');\n","import './aui.component.message';\nimport '@atlassian/aui/src/less/flag.less';\nexport { default as flag } from '@atlassian/aui/src/js/aui/flag';\n","import $ from './jquery';\nimport { recomputeStyle } from './internal/animation';\nimport amdify from './internal/amdify';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport CustomEvent from './polyfills/custom-event';\nimport escapeHtml from './escape-html';\nimport i18n from './i18n';\n\nvar AUTO_CLOSE_TIME = 5000;\nvar ID_FLAG_CONTAINER = 'aui-flag-container';\nvar defaultOptions = {\n body: '',\n close: 'manual',\n title: '',\n type: 'info'\n};\n\nfunction flag (options) {\n options = $.extend({}, defaultOptions, options);\n\n // clean the title value\n options.title = (options.title || '').toString().trim();\n\n var $flag = renderFlagElement(options);\n extendFlagElement($flag);\n\n if (options.close === 'auto') {\n makeCloseable($flag);\n makeAutoClosable($flag);\n } else if (options.close === 'manual') {\n makeCloseable($flag);\n }\n\n pruneFlagContainer();\n\n return insertFlag($flag);\n}\n\nfunction extendFlagElement ($flag) {\n var flag = $flag[0];\n\n flag.close = function () {\n closeFlag($flag);\n };\n}\n\nfunction renderFlagElement ({body, title, close, type}) {\n const titleHtml = title ? `<p class=\"title\"><strong>${escapeHtml(title)}</strong></p>` : '';\n const html = `<div class=\"aui-message\">${titleHtml}</div>`;\n\n const $message = $(html)\n .append($.parseHTML(body || ''))\n .addClass(close === 'never' ? '' : 'closeable')\n .addClass(`aui-message-${type}`);\n return $('<div class=\"aui-flag\" aria-live=\"polite\"></div>').append($message);\n}\n\nfunction makeCloseable ($flag) {\n var $icon = $(`<button class=\"aui-icon icon-close\" tabindex=\"0\" aria-label=\"${i18n.getText('aui.words.close')}\"></button>`);\n\n $icon.on('click', function () {\n closeFlag($flag);\n });\n\n $icon.on('keypress', function (e) {\n if ((e.which === keyCode.ENTER) || (e.which === keyCode.SPACE)) {\n closeFlag($flag);\n e.preventDefault();\n }\n });\n\n return $flag.find('.aui-message').append($icon)[0];\n}\n\nfunction makeAutoClosable ($flag) {\n $flag.find('.aui-message').addClass('aui-will-close');\n setTimeout(function () {\n $flag[0].close();\n }, AUTO_CLOSE_TIME);\n}\n\nfunction closeFlag ($flagToClose) {\n var flag = $flagToClose.get(0);\n\n flag.setAttribute('aria-hidden', 'true');\n flag.dispatchEvent(new CustomEvent('aui-flag-close', {bubbles: true}));\n\n return flag;\n}\n\nfunction pruneFlagContainer () {\n var $container = findContainer();\n var $allFlags = $container.find('.aui-flag');\n\n $allFlags.get().forEach(function (flag) {\n var isFlagAriaHidden = flag.getAttribute('aria-hidden') === 'true';\n\n if (isFlagAriaHidden) {\n $(flag).remove();\n }\n });\n}\n\nfunction findContainer () {\n return $('#' + ID_FLAG_CONTAINER);\n}\n\nfunction insertFlag ($flag) {\n var $flagContainer = findContainer();\n\n if (!$flagContainer.length) {\n $flagContainer = $('<div id=\"' + ID_FLAG_CONTAINER + '\"></div>');\n $('body').prepend($flagContainer);\n }\n\n $flag.appendTo($flagContainer);\n recomputeStyle($flag);\n\n return $flag.attr('aria-hidden', 'false')[0];\n}\n\namdify('aui/flag', flag);\nglobalize('flag', flag);\nexport default flag;\n","import $ from './jquery';\nimport * as deprecate from './internal/deprecation';\nimport * as logger from './internal/log';\nimport globalize from './internal/globalize';\nimport escapeHtml from './escape-html';\nimport keyCode from './key-code';\nimport skate from './internal/skate';\nimport i18n from './i18n';\n\nvar DEFAULT_FADEOUT_DURATION = 500;\nvar DEFAULT_FADEOUT_DELAY = 5000;\nvar FADEOUT_RESTORE_DURATION = 100;\n\nfunction createMessageConstructor(type) {\n /**\n *\n * @param context\n * @param {Object} obj - message configuration\n * @param {String} [obj.id] - ID to add to the message.\n * @param {String} [obj.title] - Plain-text title of the message. If provided, will appear above the message body.\n * @param {String} obj.body - Content of the message. Can be HTML content.\n * @param {boolean} [obj.closeable] - If true, the message can be manually closed by the end-user via the UI.\n * @param {boolean} [obj.fadeout]\n * @param {boolean} [obj.duration]\n * @param {boolean} [obj.delay]\n * @returns {*|HTMLElement}\n */\n messages[type] = function (context, obj) {\n if (!obj) {\n obj = context;\n context = '#aui-message-bar';\n }\n\n // Set up our template options\n obj.closeable = obj.closeable !== null && obj.closeable !== false;\n\n // clean the title value\n obj.title = (obj.title || '').toString().trim();\n\n let $message = renderMessageElement(obj, type);\n insertMessageIntoContext($message, obj.insert, context);\n\n // Attach the optional extra behaviours\n if (obj.closeable) {\n makeCloseable($message);\n }\n\n if (obj.fadeout) {\n makeFadeout($message, obj.delay, obj.duration);\n }\n\n return $message;\n };\n}\n\nfunction makeCloseable(message) {\n $(message || 'div.aui-message.closeable').each(function () {\n var $this = $(this);\n var $closeIcons = $this.find('.aui-icon.icon-close');\n var $icon = $closeIcons.length > 0 ? $closeIcons.first() : $(`<button class=\"aui-icon icon-close\" tabindex=\"0\" aria-label=\"${i18n.getText('aui.words.close')}\"></button>`);\n\n $this.addClass('closeable');\n $this.append($icon);\n\n initCloseMessageBoxOnClickAndKeypress($this);\n });\n}\n\nfunction makeFadeout(message, delay, duration) {\n delay = (typeof delay !== 'undefined') ? delay : DEFAULT_FADEOUT_DELAY;\n duration = (typeof duration !== 'undefined') ? duration : DEFAULT_FADEOUT_DURATION;\n\n $(message || 'div.aui-message.fadeout').each(function () {\n var $this = $(this);\n\n //Store the component state to avoid collisions between animations\n var hasFocus = false;\n var isHover = false;\n\n //Small functions to keep the code easier to read and avoid code duplication\n function fadeOut(){\n //Algorithm:\n //1. Stop all running animations (first arg), including any fade animation and delay\n // Do not jump to the end of the animation (second arg). This prevents the message to abruptly\n // jump to opacity:0 or opacity:1\n //2. Wait <delay> ms before starting the fadeout\n //3. Start the fadeout with a duration of <duration> ms\n //4. Close the message at the end of the animation\n $this.stop(true,false).delay(delay).fadeOut(duration, function () {\n $this.closeMessage();\n });\n }\n function resetFadeOut(){\n //Algorithm:\n //1. Stop all running animations (first arg), including any fade animation and delay\n // Do not jump to the end of the animation (second arg). This prevents the message to abruptly\n // jump to opacity:0 or opacity:1\n //2. Fast animation to opacity:1\n $this.stop(true,false).fadeTo(FADEOUT_RESTORE_DURATION, 1);\n }\n function shouldStartFadeOut(){\n return !hasFocus && !isHover;\n }\n\n //Attach handlers for user interactions (focus and hover)\n $this\n .focusin(function () {\n hasFocus = true;\n resetFadeOut();\n })\n .focusout(function () {\n hasFocus = false;\n if (shouldStartFadeOut()) {\n fadeOut();\n }\n })\n .hover(\n function () { //should be called .hoverin(), but jQuery does not implement that method\n isHover = true;\n resetFadeOut();\n },\n function () { //should be called .hoverout(), but jQuery does not implement that method\n isHover = false;\n if (shouldStartFadeOut()) {\n fadeOut();\n }\n }\n );\n\n //Initial animation\n fadeOut();\n });\n}\n\n/**\n * Utility methods to display different message types to the user.\n * Usage:\n * <pre>\n * messages.info(\"#container\", {\n * title: \"Info\",\n * body: \"You can choose to have messages without Close functionality.\",\n * closeable: false,\n * });\n * </pre>\n */\nvar messages = {\n setup: function () {\n makeCloseable();\n makeFadeout();\n },\n makeCloseable: makeCloseable,\n makeFadeout: makeFadeout,\n createMessage: createMessageConstructor\n};\n\nfunction initCloseMessageBoxOnClickAndKeypress($message) {\n $message.unbind('click.aui-message').unbind('keydown.aui-message');\n\n $message.on('click.aui-message', '.aui-icon.icon-close', function (e) {\n $(e.target).closest('.aui-message').closeMessage();\n }).on('keydown.aui-message', '.aui-icon.icon-close', function (e) {\n if ((e.which === keyCode.ENTER) || (e.which === keyCode.SPACE)) {\n $(e.target).closest('.aui-message').closeMessage();\n e.preventDefault(); // this is especially important when handling the space bar, as we don't want to page down\n }\n });\n}\n\nfunction insertMessageIntoContext($message, insertWhere, context) {\n if (insertWhere === 'prepend') {\n $message.prependTo(context);\n } else if (insertWhere === 'before') {\n $message.insertBefore(context);\n } else if (insertWhere === 'after') {\n $message.insertAfter(context);\n } else {\n $message.appendTo(context);\n }\n}\n\nfunction renderMessageElement ({id, closeable, fadeout, title, body}, type) {\n // Convert the options in to template values\n const titleHtml = title ? `<p class=\"title\"><strong>${escapeHtml(title)}</strong></p>` : '';\n const html = `<div class=\"aui-message\">${titleHtml}</div>`;\n\n // Construct the message element\n const $message = $(html)\n .append($.parseHTML(body || ''))\n .addClass(closeable ? 'closeable' : '')\n .addClass(fadeout ? 'fadeout' : '')\n .addClass(`aui-message-${type}`);\n\n // Add ID if supplied\n if (id) {\n if (/[#\\'\\\"\\.\\s]/g.test(id)) {\n // reject IDs that don't comply with style guide (ie. they'll break stuff)\n logger.warn('Messages error: ID rejected, must not include spaces, hashes, dots or quotes.');\n } else {\n $message.attr('id', id);\n }\n }\n\n return $message;\n}\n\n$.fn.closeMessage = function () {\n var $message = $(this);\n if ($message.hasClass('aui-message') && $message.hasClass('closeable')) {\n $message.stop(true); //Stop any running animation\n $message.trigger('messageClose', [this]); //messageClose event Deprecated as of 5.3\n $message.remove();\n $(document).trigger('aui-message-close', [this]); //must trigger on document since the element has been removed\n }\n};\n\ncreateMessageConstructor('generic'); //Deprecated Oct 2017\ncreateMessageConstructor('error');\ncreateMessageConstructor('warning');\ncreateMessageConstructor('info');\ncreateMessageConstructor('confirmation');\ncreateMessageConstructor('change');\ncreateMessageConstructor('success'); //Deprecated Oct 2017\ncreateMessageConstructor('hint'); //Deprecated Oct 2017\n\nconst MessageEl = skate('aui-message', {\n created: function (element) {\n var body = element.innerHTML;\n var type = element.getAttribute('type') || 'info';\n\n element.innerHTML = '';\n messages[type](element, {\n body: body,\n closeable: element.getAttribute('closeable'),\n delay: element.getAttribute('delay'),\n duration: element.getAttribute('duration'),\n fadeout: element.getAttribute('fadeout'),\n title: element.getAttribute('title')\n });\n }\n});\n\n$(function () {\n messages.setup();\n});\n\ndeprecate.prop(messages, 'makeCloseable', {\n extraInfo: 'Use the \"closeable\" option in the constructor instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messages, 'createMessage', {\n extraInfo: 'Use the provided convenience methods instead e.g. messages.info(). Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messages, 'makeFadeout', {\n extraInfo: 'Use the \"fadeout\" option in the constructor instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messages, 'generic', {\n extraInfo: 'use the messages.info() method instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\ndeprecate.prop(messages, 'hint', {\n extraInfo: 'use the messages.info() method instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\ndeprecate.prop(messages, 'success', {\n extraInfo: 'use the messages.confirmation() method instead. Docs: https://aui.atlassian.com/latest/docs/messages.html'\n});\n\n// Exporting\n// ---------\nglobalize('messages', messages);\n\nexport default messages;\nexport {\n MessageEl\n};\n","import './styles/aui.pattern.forms';\nimport '@atlassian/aui/src/less/checkbox-multiselect.less';\nexport { default as CheckboxMultiselectEl } from '@atlassian/aui/src/js/aui/checkbox-multiselect';\n","import $ from './jquery';\nimport './dropdown2';\nimport './tooltip';\nimport i18n from './i18n';\nimport amdify from './internal/amdify';\nimport skate from './internal/skate';\nimport uid from './unique-id';\n\nvar templates = {\n dropdown: function (items) {\n function createSection() {\n return $('<div class=\"aui-dropdown2-section\">');\n }\n\n // clear items section\n var $clearItemsSection = createSection();\n\n $('<button />').attr({\n type: 'button',\n 'data-aui-checkbox-multiselect-clear': '',\n class: 'aui-button aui-button-link'\n })\n .text(i18n.getText('aui.checkboxmultiselect.clear.selected'))\n .appendTo($clearItemsSection);\n\n // list of items\n var $section = createSection();\n var $itemList = $('<ul />').appendTo($section);\n\n $.each(items, function (idx, item) {\n var $li = $('<li />').attr({\n class: item.styleClass || ''\n }).appendTo($itemList);\n\n var $a = $('<a />')\n .text(item.label)\n .attr('data-value', item.value)\n .addClass('aui-dropdown2-checkbox aui-dropdown2-interactive')\n .appendTo($li);\n\n if (item.icon) {\n $('<span />')\n .addClass('aui-icon')\n .css('backgroundImage', 'url(' + item.icon + ')\")')\n .appendTo($a);\n }\n\n if (item.selected) {\n $a.addClass('aui-dropdown2-checked');\n }\n });\n\n return $('<div />')\n .append($clearItemsSection)\n .append($section)\n .html();\n },\n\n furniture: function (name, optionsHtml) {\n var dropdownId = name + '-dropdown';\n\n var $select = $('<select />').attr({\n name: name,\n multiple: 'multiple'\n }).html(optionsHtml);\n\n var $dropdown = $('<div>')\n .attr({\n id: dropdownId,\n class: 'aui-checkbox-multiselect-dropdown aui-dropdown2 aui-style-default'\n });\n\n var $button = $('<button />')\n .attr({\n class: 'aui-checkbox-multiselect-btn aui-button aui-dropdown2-trigger',\n type: 'button',\n 'aria-owns': dropdownId,\n 'aria-haspopup': true\n });\n\n return $('<div />')\n .append($select)\n .append($button)\n .append($dropdown)\n .html();\n }\n};\n\n/**\n * Handles when user clicks an item in the dropdown list. Either selects or unselects the corresponding\n * option in the <select>.\n * @private\n */\nfunction handleDropdownSelection (e) {\n var $a = $(e.target);\n var value = $a.attr('data-value');\n updateOption(this, value, $a.hasClass('aui-dropdown2-checked'));\n}\n\n/**\n * Selects or unselects the <option> corresponding the given value.\n * @private\n * @param component - Checkbox MultiSelect web component\n * @param value - value of option to update\n * @param {Boolean} selected - select or unselect it.\n */\nfunction updateOption (component, value, selected) {\n var $toUpdate = component.$select.find('option').filter(function () {\n var $this = $(this);\n return $this.attr('value') === value && $this.prop('selected') !== selected;\n });\n if ($toUpdate.length) {\n $toUpdate.prop('selected', selected);\n component.$select.trigger('change');\n }\n}\n\n/**\n * Enables 'clear all' button if there are any selected <option>s, otherwise disables it.\n * @private\n */\nfunction updateClearAll (component) {\n component.$dropdown.find('[data-aui-checkbox-multiselect-clear]').prop('disabled', function () {\n return getSelectedDescriptors(component).length < 1;\n });\n}\n\n/**\n * Gets button title used for tipsy. Is blank when dropdown is open so we don't get tipsy hanging over options.\n * @private\n * @param component\n * @returns {string}\n */\nfunction getButtonTitle (component) {\n return component.$dropdown.is('[aria-hidden=false]') ? '' : getSelectedLabels(component).join(', ');\n}\n\n/**\n * Converts a jQuery collection of <option> elements into an object that describes them.\n * @param {jQuery} $options\n * @returns {Array<Object>}\n * @private\n */\nfunction mapOptionDescriptors ($options) {\n return $options.map(function () {\n var $option = $(this);\n return {\n value: $option.val(),\n label: $option.text(),\n icon: $option.data('icon'),\n styleClass: $option.data('styleClass'),\n title: $option.attr('title'),\n disabled: $option.attr('disabled'),\n selected: $option.prop('selected')\n };\n });\n}\n\n/**\n * Gets label for when nothing is selected\n * @returns {string}\n * @private\n */\nfunction getImplicitAllLabel (component) {\n return $(component).data('allLabel') || 'All';\n}\n\n\n/**\n * Renders dropdown with list of items representing the selected or unselect state of the <option>s in <select>\n * @private\n */\nfunction renderDropdown (component) {\n component.$dropdown.html(templates.dropdown(getDescriptors(component)));\n updateClearAll(component);\n}\n\n/**\n * Renders button with the selected <option>'s innerText in a comma seperated list. If nothing is selected 'All'\n * is displayed.\n * @private\n */\nfunction renderButton (component) {\n var selectedLabels = getSelectedLabels(component);\n var label = isImplicitAll(component) ? getImplicitAllLabel(component) : selectedLabels.join(', ');\n component.$btn.text(label);\n}\n\n/**\n * Gets descriptor for selected options, the descriptor is an object that contains meta information about\n * the option, such as value, label, icon etc.\n * @private\n * @returns Array<Object>\n */\nfunction getDescriptors (component) {\n return mapOptionDescriptors(component.getOptions());\n}\n\n/**\n * Gets descriptor for selected options, the descriptor is an object that contains meta information about\n * the option, such as value, label, icon etc.\n * @private\n * @returns Array<Object>\n */\nfunction getSelectedDescriptors (component) {\n return mapOptionDescriptors(component.getSelectedOptions());\n}\n\n/**\n * Gets the innerText of the selected options\n * @private\n * @returns Array<String>\n */\nfunction getSelectedLabels (component) {\n return $.map(getSelectedDescriptors(component), function (descriptor) {\n return descriptor.label;\n });\n}\n\n/**\n * If nothing is selected, we take this to mean that everything is selected.\n * @returns Boolean\n */\nfunction isImplicitAll (component) {\n return getSelectedDescriptors(component).length === 0;\n}\n\nconst CheckboxMultiselectEl = skate('aui-checkbox-multiselect', {\n attached: function (component) {\n // This used to be template logic, however, it breaks tests if we\n // keep it there after starting to use native custom elements. This\n // should be refactored.\n //\n // Ideally we should be templating the element within the \"template\"\n // hook which will ensure it's templated prior to calling the\n // \"attached\" callback.\n var name = component.getAttribute('name') || uid('aui-checkbox-multiselect-');\n component.innerHTML = templates.furniture(name, component.innerHTML);\n\n component.$select = $('select', component)\n .on('change', function () {\n renderButton(component);\n updateClearAll(component);\n });\n\n component.$dropdown = $('.aui-checkbox-multiselect-dropdown', component)\n .on('aui-dropdown2-item-check', handleDropdownSelection.bind(component))\n .on('aui-dropdown2-item-uncheck', handleDropdownSelection.bind(component))\n .on('click', 'button[data-aui-checkbox-multiselect-clear]', component.deselectAllOptions.bind(component));\n\n component.$btn = $('.aui-checkbox-multiselect-btn', component)\n .tooltip({\n title: function () {\n return getButtonTitle(component);\n }\n });\n\n renderButton(component);\n renderDropdown(component);\n },\n prototype: {\n\n /**\n * Gets all options regardless of selected or unselected\n * @returns {jQuery}\n */\n getOptions: function () {\n return this.$select.find('option');\n },\n\n /**\n * Gets all selected options\n * @returns {jQuery}\n */\n getSelectedOptions: function () {\n return this.$select.find('option:selected');\n },\n\n /**\n * Sets <option> elements matching given value to selected\n */\n selectOption: function (value) {\n updateOption(this, value, true);\n },\n\n /**\n * Sets <option> elements matching given value to unselected\n */\n unselectOption: function (value) {\n updateOption(this, value, false);\n },\n\n /**\n * Gets value of <select>\n * @returns Array\n */\n getValue: function () {\n return this.$select.val();\n },\n\n /**\n * Unchecks all items in the dropdown and in the <select>\n */\n deselectAllOptions: function () {\n this.$select.val([]).trigger('change');\n this.$dropdown.find('.aui-dropdown2-checked,.checked').removeClass('aui-dropdown2-checked checked');\n },\n\n /**\n * Adds an option to the <select>\n * @param descriptor\n */\n addOption: function (descriptor) {\n $('<option />').attr({\n value: descriptor.value,\n icon: descriptor.icon,\n disabled: descriptor.disabled,\n selected: descriptor.selected,\n title: descriptor.title\n })\n .text(descriptor.label)\n .appendTo(this.$select);\n renderButton(this);\n renderDropdown(this);\n },\n\n /**\n * Removes options matching value from <select>\n * @param value\n */\n removeOption: function (value) {\n this.$select.find(\"[value='\" + value + \"']\").remove();\n renderButton(this);\n renderDropdown(this);\n }\n }\n});\n\namdify('aui/checkbox-multiselect', CheckboxMultiselectEl);\nexport default CheckboxMultiselectEl;\n","// tipsy, facebook style tooltips for jquery\n// version 1.3.1\n// (c) 2008-2010 jason frame [jason@onehackoranother.com]\n// released under the MIT license\n//\n// Modified by Atlassian\n// https://github.com/atlassian/tipsy\n\n(function($) {\n var liveBindingWarning = \"To be compatible with jQuery 1.9 and higher,\";\n \" You must pass a selector to tipsy's live argument.\" +\n \" For instance, `$(document).tipsy({live: 'a.live'});`\";\n\n function maybeCall(thing, ctx) {\n return typeof thing == \"function\" ? thing.call(ctx) : thing;\n }\n\n function isElementInDOM(ele) {\n var el = ele && ele.jquery ? ele.get(0) : ele;\n return $.contains(document.documentElement, el);\n }\n\n var tipsyIDcounter = 0;\n function tipsyID() {\n var tipsyID = tipsyIDcounter++;\n return \"tipsyuid\" + tipsyID;\n }\n\n function Tipsy(element, options) {\n this.$element = $(element);\n this.options = options;\n this.enabled = true;\n this.fixTitle();\n }\n\n Tipsy.prototype = {\n show: function() {\n // if element is not in the DOM then don't show the Tipsy and return early\n if (!isElementInDOM(this.$element)) {\n return;\n }\n\n var title = this.getTitle();\n if (title && this.enabled) {\n var $tip = this.tip();\n\n $tip.find(\".tipsy-inner\")[this.options.html ? \"html\" : \"text\"](\n title\n );\n $tip[0].className = \"tipsy\"; // reset classname in case of dynamic gravity\n $tip.remove()\n .css({\n top: 0,\n left: 0,\n visibility: \"hidden\",\n display: \"block\"\n })\n .appendTo(document.body);\n\n var that = this;\n function tipOver() {\n that.hoverTooltip = true;\n }\n function tipOut() {\n if (that.hoverState == \"in\") return; // If field is still focused.\n that.hoverTooltip = false;\n if (that.options.trigger != \"manual\") {\n var eventOut =\n that.options.trigger == \"hover\"\n ? \"mouseleave.tipsy\"\n : \"blur.tipsy\";\n that.$element.trigger(eventOut);\n }\n }\n\n if (this.options.hoverable) {\n $tip.hover(tipOver, tipOut);\n }\n\n if (this.options.className) {\n $tip.addClass(\n maybeCall(this.options.className, this.$element[0])\n );\n }\n\n var pos = $.extend({}, this.$element.offset(), {\n width: this.$element[0].getBoundingClientRect().width,\n height: this.$element[0].getBoundingClientRect().height\n });\n\n var tipCss = {};\n var actualWidth = $tip[0].offsetWidth,\n actualHeight = $tip[0].offsetHeight;\n var gravity = maybeCall(this.options.gravity, this.$element[0]);\n\n if (gravity.length === 2) {\n if (gravity.charAt(1) === \"w\") {\n tipCss.left = pos.left + pos.width / 2 - 15;\n } else {\n tipCss.left =\n pos.left + pos.width / 2 - actualWidth + 15;\n }\n }\n\n switch (gravity.charAt(0)) {\n case \"n\":\n // left could already be set if gravity is 'nw' or 'ne'\n if (typeof tipCss.left === \"undefined\") {\n tipCss.left =\n pos.left + pos.width / 2 - actualWidth / 2;\n }\n tipCss.top = pos.top + pos.height + this.options.offset;\n break;\n case \"s\":\n // left could already be set if gravity is 'sw' or 'se'\n if (typeof tipCss.left === \"undefined\") {\n tipCss.left =\n pos.left + pos.width / 2 - actualWidth / 2;\n\n // We need to apply the left positioning and then recalculate the tooltip height\n // If the tooltip is positioned close to the right edge of the window, it could cause\n // the tooltip text to overflow and change height.\n $tip.css(tipCss);\n actualHeight = $tip[0].offsetHeight;\n }\n tipCss.top =\n pos.top - actualHeight - this.options.offset;\n break;\n case \"e\":\n tipCss.left =\n pos.left - actualWidth - this.options.offset;\n tipCss.top =\n pos.top + pos.height / 2 - actualHeight / 2;\n break;\n case \"w\":\n tipCss.left =\n pos.left + pos.width + this.options.offset;\n tipCss.top =\n pos.top + pos.height / 2 - actualHeight / 2;\n break;\n }\n\n $tip.css(tipCss).addClass(\"tipsy-\" + gravity);\n $tip.find(\".tipsy-arrow\")[0].className =\n \"tipsy-arrow tipsy-arrow-\" + gravity.charAt(0);\n\n if (this.options.fade) {\n $tip.stop()\n .css({\n opacity: 0,\n display: \"block\",\n visibility: \"visible\"\n })\n .animate({ opacity: this.options.opacity });\n } else {\n $tip.css({\n visibility: \"visible\",\n opacity: this.options.opacity\n });\n }\n\n if (this.options.aria) {\n var $tipID = tipsyID();\n $tip.attr(\"id\", $tipID);\n this.$element.attr(\"aria-describedby\", $tipID);\n }\n }\n },\n\n destroy: function() {\n this.$element.removeData(\"tipsy\");\n\n this.unbindHandlers();\n this.hide();\n },\n\n unbindHandlers: function() {\n if (this.options.live) {\n $(document).off(\".tipsy\", this.options.live);\n } else {\n this.$element.off(\".tipsy\");\n }\n },\n\n hide: function() {\n if (this.options.fade) {\n this.tip()\n .stop()\n .fadeOut(function() {\n $(this).remove();\n });\n } else {\n this.tip().remove();\n }\n if (this.options.aria) {\n this.$element.removeAttr(\"aria-describedby\");\n }\n },\n\n fixTitle: function() {\n var $e = this.$element;\n if (\n $e.attr(\"title\") ||\n typeof $e.attr(\"original-title\") != \"string\"\n ) {\n $e.attr(\"original-title\", $e.attr(\"title\") || \"\").removeAttr(\n \"title\"\n );\n }\n },\n\n getTitle: function() {\n var title,\n $e = this.$element,\n o = this.options;\n this.fixTitle();\n var title,\n o = this.options;\n if (typeof o.title == \"string\") {\n title = $e.attr(\n o.title == \"title\" ? \"original-title\" : o.title\n );\n } else if (typeof o.title == \"function\") {\n title = o.title.call($e[0]);\n }\n title = (\"\" + title).replace(/(^\\s*|\\s*$)/, \"\");\n return title || o.fallback;\n },\n\n tip: function() {\n if (!this.$tip) {\n this.$tip = $('<div class=\"tipsy\"></div>')\n .html(\n '<div class=\"tipsy-arrow\"></div><div class=\"tipsy-inner\"></div>'\n )\n .attr(\"role\", \"tooltip\");\n this.$tip.data(\"tipsy-pointee\", this.$element[0]);\n }\n return this.$tip;\n },\n\n validate: function() {\n if (!this.$element[0].parentNode) {\n this.hide();\n this.$element = null;\n this.options = null;\n }\n },\n\n enable: function() {\n this.enabled = true;\n },\n disable: function() {\n this.enabled = false;\n },\n toggleEnabled: function() {\n this.enabled = !this.enabled;\n }\n };\n\n $.fn.tipsy = function(options) {\n if (options === true) {\n return this.data(\"tipsy\");\n } else if (typeof options == \"string\") {\n var tipsy = this.data(\"tipsy\");\n if (tipsy) tipsy[options]();\n return this;\n }\n\n options = $.extend({}, $.fn.tipsy.defaults, options);\n if (options.hoverable) {\n options.delayOut = options.delayOut || 20;\n }\n\n // Check for jQuery support and patch live binding for jQuery 3 compat.\n if (options.live === true) {\n if (!this.selector) {\n // No more jQuery support!\n throw new Error(liveBindingWarning);\n } else {\n // Deprecated behaviour\n console && console.warn && console.warn(liveBindingWarning);\n options.live = this.selector;\n }\n }\n\n function get(ele) {\n var tipsy = $.data(ele, \"tipsy\");\n if (!tipsy) {\n tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options));\n $.data(ele, \"tipsy\", tipsy);\n }\n return tipsy;\n }\n\n function enter() {\n var tipsy = get(this);\n tipsy.hoverState = \"in\";\n if (options.delayIn == 0) {\n tipsy.show();\n } else {\n tipsy.fixTitle();\n setTimeout(function() {\n if (\n tipsy.hoverState == \"in\" &&\n isElementInDOM(tipsy.$element)\n ) {\n tipsy.show();\n }\n }, options.delayIn);\n }\n }\n\n function leave() {\n var tipsy = get(this);\n tipsy.hoverState = \"out\";\n if (options.delayOut == 0) {\n tipsy.hide();\n } else {\n setTimeout(function() {\n if (tipsy.hoverState == \"out\" && !tipsy.hoverTooltip) {\n tipsy.hide();\n }\n }, options.delayOut);\n }\n }\n\n // create a tipsy object for every selected element,\n // even when the events are delegated.\n // this allows destruction to occur.\n this.each(function() {\n get(this);\n });\n\n if (options.trigger != \"manual\") {\n var eventIn =\n options.trigger == \"hover\"\n ? \"mouseenter.tipsy focus.tipsy\"\n : \"focus.tipsy\",\n eventOut =\n options.trigger == \"hover\"\n ? \"mouseleave.tipsy blur.tipsy\"\n : \"blur.tipsy\";\n if (options.live) {\n $(document)\n .on(eventIn, options.live, enter)\n .on(eventOut, options.live, leave);\n } else {\n this.on(eventIn, enter).on(eventOut, leave);\n }\n }\n\n return this;\n };\n\n $.fn.tipsy.defaults = {\n aria: false,\n className: null,\n delayIn: 0,\n delayOut: 0,\n fade: false,\n fallback: \"\",\n gravity: \"n\",\n html: false,\n live: false,\n hoverable: false,\n offset: 0,\n opacity: 0.8,\n title: \"title\",\n trigger: \"hover\"\n };\n\n $.fn.tipsy.revalidate = function() {\n $(\".tipsy\").each(function() {\n var pointee = $.data(this, \"tipsy-pointee\");\n if (!pointee || !isElementInDOM(pointee)) {\n $(this).remove();\n }\n });\n };\n\n // Overwrite this method to provide options on a per-element basis.\n // For example, you could store the gravity in a 'tipsy-gravity' attribute:\n // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' });\n // (remember - do not modify 'options' in place!)\n $.fn.tipsy.elementOptions = function(ele, options) {\n return $.metadata ? $.extend({}, options, $(ele).metadata()) : options;\n };\n\n $.fn.tipsy.autoNS = function() {\n return $(this).offset().top >\n $(document).scrollTop() + $(window).height() / 2\n ? \"s\"\n : \"n\";\n };\n\n $.fn.tipsy.autoWE = function() {\n return $(this).offset().left >\n $(document).scrollLeft() + $(window).width() / 2\n ? \"e\"\n : \"w\";\n };\n\n /**\n * yields a closure of the supplied parameters, producing a function that takes\n * no arguments and is suitable for use as an autogravity function like so:\n *\n * @param margin (int) - distance from the viewable region edge that an\n * element should be before setting its tooltip's gravity to be away\n * from that edge.\n * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer\n * if there are no viewable region edges effecting the tooltip's\n * gravity. It will try to vary from this minimally, for example,\n * if 'sw' is preferred and an element is near the right viewable\n * region edge, but not the top edge, it will set the gravity for\n * that element's tooltip to be 'se', preserving the southern\n * component.\n */\n $.fn.tipsy.autoBounds = function(margin, prefer) {\n return function() {\n var dir = {\n ns: prefer[0],\n ew: prefer.length > 1 ? prefer[1] : false\n },\n boundTop = $(document).scrollTop() + margin,\n boundLeft = $(document).scrollLeft() + margin,\n $this = $(this);\n\n if ($this.offset().top < boundTop) dir.ns = \"n\";\n if ($this.offset().left < boundLeft) dir.ew = \"w\";\n if (\n $(window).width() +\n $(document).scrollLeft() -\n $this.offset().left <\n margin\n )\n dir.ew = \"e\";\n if (\n $(window).height() +\n $(document).scrollTop() -\n $this.offset().top <\n margin\n )\n dir.ns = \"s\";\n\n return dir.ns + (dir.ew ? dir.ew : \"\");\n };\n };\n})(jQuery);\n","import './styles/aui.pattern.forms';\nimport 'fancy-file-input/dist/fancy-file-input.css';\nimport '@atlassian/aui/src/less/adg-fancy-file-input.less';\nexport { default as FancyFileInput } from '@atlassian/aui/src/js/aui/fancy-file-input';\n","/* AUI-4199: This puts the FFI object on the jQuery global for backwards compatibility. */\nimport FancyFileInput from 'fancy-file-input/dist/fancy-file-input';\n\nexport default FancyFileInput;\n","/*! jQuery Fancy File Input plugin - v2.0.4 - 2018-11-23\n* Copyright (c) 2018 Atlassian Pty Ltd; Licensed Apache-2.0 */\n(function (root, factory) {\n if (root === undefined && window !== undefined) root = window;\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module unless amdModuleId is set\n define([\"jquery\"], function (a0) {\n return (root['FancyFileInput'] = factory(a0));\n });\n } else if (typeof module === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require(\"jquery\"));\n } else {\n root['FancyFileInput'] = factory(root[\"jQuery\"]);\n }\n}(this, function ($) {\n\n/**\n * --------------------------------------------------------------------\n * jQuery Fancy File Input plugin\n * Author: Atlassian Pty Ltd\n * Copyright © 2012 - 2016 Atlassian Pty Ltd. Licensed under the\n * Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n * implied. See the License for the specific language governing\n * permissions and limitations under the License.\n * --------------------------------------------------------------------\n */\n\n/* jshint -W097 */\n'use strict';\n\nvar fakePathRegex = /^.*[\\\\\\/]/;\nvar multipleFileTextRegex = /\\{0\\}/gi;\nvar ie = (function() {\n var v = 3;\n var div = document.createElement( 'div' );\n var all = div.getElementsByTagName( 'i' );\n\n do {\n div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->';\n } while (all[0]);\n\n return v > 4 ? v : document.documentMode;\n}());\n\nfunction FancyFileInput(el, options) {\n var instance = $(el).data('FancyFileInput');\n if (instance) {\n return instance;\n }\n options = $.extend({}, FancyFileInput.defaults, options);\n this.el = el;\n this.$el = $(el);\n this.$label = this.createLabel(options.buttonText);\n this._addLabelText();\n this.$clearButton = $('<button>', {\n text: (this.$label.attr('data-ffi-clearButtonText') || options.clearButtonText),\n 'class': 'ffi-clear',\n type: 'button',\n 'tabindex': '-1'\n });\n this.multipleFileTextPattern = this.$label.attr('data-ffi-multipleFileTextPattern') || options.multipleFileTextPattern;\n this._eventNamespace = '.ffi';\n this.CLASSES = {\n disabled: 'is-disabled',\n focused: 'is-focused',\n active: 'is-active',\n valid: 'is-valid',\n invalid: 'is-invalid'\n };\n this[this.isDisabled() ? 'disable' : 'enable']();\n this.isFocused = false;\n}\n\nFancyFileInput.defaults = {\n buttonText: 'Browse\\u2026',\n clearButtonText: 'Clear',\n multipleFileTextPattern: '{0} files'\n};\n\nFancyFileInput.prototype._addLabelText = function attLabelText() {\n var $associatedLabel = $('label[for=\"' + this.el.id + '\"]');\n if ($associatedLabel.length) {\n this.$el.attr('aria-label', $associatedLabel.text());\n }\n};\n\nFancyFileInput.prototype.createLabel = function (buttonText) {\n var $label = this.$el.parent('.ffi[data-ffi-button-text]');\n if (!$label.length) {\n $label = this.$el.wrap($('<label>', { 'class': 'ffi', 'data-ffi-button-text': buttonText })).parent();\n }\n return $label;\n};\n\nFancyFileInput.prototype.isDisabled = function () {\n return this.$el.is(':disabled');\n};\n\nFancyFileInput.prototype.formatMultipleFileText = function (numFiles) {\n return this.multipleFileTextPattern.replace(multipleFileTextRegex, numFiles);\n};\n\nFancyFileInput.prototype.bindEvents = function () {\n this.$el\n .on('invalid' + this._eventNamespace, $.proxy(this.checkValidity, this))\n .on('change' + this._eventNamespace, $.proxy(this.change, this))\n .on('keydown' + this._eventNamespace, $.proxy(this.keydown, this))\n .on('mousedown' + this._eventNamespace, $.proxy(this.mousedown, this))\n .on('mouseup' + this._eventNamespace, $.proxy(this.mouseup, this))\n .on('focus' + this._eventNamespace, $.proxy(this.focus, this))\n .on('blur' + this._eventNamespace, $.proxy(this.blur, this));\n this.$clearButton.on('click' + this._eventNamespace, $.proxy(this.clear, this));\n};\n\nFancyFileInput.prototype.unbindEvents = function () {\n this.$el.off(this._eventNamespace);\n this.$clearButton.off(this._eventNamespace);\n};\n\nFancyFileInput.prototype.fireEvent = function (event) {\n this.$el.trigger(event + this._eventNamespace);\n};\n\nFancyFileInput.prototype.enable = function () {\n this.bindEvents();\n this.$el.prop('disabled', false);\n this.$label.removeClass(this.CLASSES.disabled);\n};\n\nFancyFileInput.prototype.disable = function () {\n this.unbindEvents();\n this.$el.prop('disabled', true);\n this.$label.addClass(this.CLASSES.disabled);\n};\n\nFancyFileInput.prototype.clear = function () {\n this.$el.wrap('<form>').closest('form').get(0).reset();\n this.$el.unwrap();\n this.el.value = '';\n this.change();\n return false;\n};\n\nFancyFileInput.prototype.focus = function () {\n var instance = this;\n\n this.$label.addClass(this.CLASSES.focused);\n\n // toggle focus so that the cursor appears back in the field instead of on the button\n if (ie && !this.isFocused) {\n this.isFocused = true;\n\n setTimeout(function() {\n instance.$el.blur();\n instance.$el.focus();\n }, 0);\n }\n};\n\nFancyFileInput.prototype.blur = function () {\n if (!ie || !this.isFocused) {\n this.$label.removeClass(this.CLASSES.focused);\n this.isFocused = false;\n }\n};\n\nFancyFileInput.prototype.mousedown = function () {\n this.$label.addClass(this.CLASSES.active);\n};\n\nFancyFileInput.prototype.mouseup = function () {\n this.$label.removeClass(this.CLASSES.active);\n};\n\nFancyFileInput.prototype.keydown = function (e) {\n var keyCode = e.which;\n var BACKSPACE = 8;\n var TAB = 9;\n var DELETE = 46;\n\n // Add clear behaviour for all browsers\n if (keyCode === BACKSPACE || keyCode === DELETE) {\n this.clear();\n e.preventDefault();\n }\n\n // This works around the IE double tab-stop - no events or blur/change occur when moving between\n // the field part of the input and the button part. This is dirty, but it works.\n if (ie && keyCode === TAB) {\n var instance = this;\n\n this.isFocused = false;\n this.$el.prop('disabled',true);\n\n setTimeout(function(){\n instance.$el.prop('disabled', false).blur();\n }, 0);\n }\n};\n\nFancyFileInput.prototype.checkValidity = function () {\n if (!this.el.required) {\n return;\n }\n var isInvalid = this.$el.is(':invalid');\n\n this.$label.toggleClass(this.CLASSES.invalid, isInvalid).toggleClass(this.CLASSES.valid, !isInvalid);\n};\n\nFancyFileInput.prototype.change = function () {\n var files;\n var val = '';\n\n this.checkValidity();\n\n // multiple file selection\n if (this.el.multiple && this.el.files.length > 1) {\n files = this.formatMultipleFileText(this.el.files.length); // '5 files'\n } else {\n files = this.el.value; // 'README.txt'\n }\n\n if (files.length) {\n val = files.replace(fakePathRegex, ''); // Strips off the C:\\fakepath nonsense\n this.$clearButton.appendTo(this.$label);\n } else {\n this.$clearButton.detach();\n }\n\n this.$el.focus();\n this.setFieldText(val);\n this.fireEvent('value-changed');\n};\n\nFancyFileInput.prototype.setFieldText = function (text) {\n var dataAttribute = 'data-ffi-value';\n if (text.length) {\n this.$label.attr(dataAttribute, text);\n this.fireEvent('value-added');\n } else {\n this.$label.removeAttr(dataAttribute);\n this.fireEvent('value-cleared');\n }\n};\n\n$.fn.fancyFileInput = function (options) {\n return this.each(function () {\n var ffi = new FancyFileInput(this, options);\n $(this).data('FancyFileInput', ffi);\n });\n};\n\nreturn FancyFileInput;\n\n}));\n","import './styles/aui.pattern.forms';\nexport { default as LabelEl } from '@atlassian/aui/src/js/aui/label';\n","import skate from './internal/skate';\nimport skateTemplateHtml from 'skatejs-template-html';\nimport enforce from './internal/enforcer';\nimport { INPUT_SUFFIX } from './internal/constants';\n\nfunction getLabel(element) {\n return element.querySelector('label');\n}\n\nfunction updateLabelFor(element, change) {\n if (element.hasAttribute('for')) {\n getLabel(element).setAttribute('for', `${change.newValue}${INPUT_SUFFIX}`);\n } else {\n getLabel(element).removeAttribute('for');\n }\n}\n\nfunction updateLabelForm(element, change) {\n if (element.hasAttribute('form')) {\n getLabel(element).setAttribute('form', change.newValue);\n } else {\n getLabel(element).removeAttribute('form');\n }\n}\n\nconst LabelEl = skate('aui-label', {\n template: skateTemplateHtml('<label><content></content></label>'),\n created: function (element) {\n element._label = getLabel(element); // required for quick access from test\n },\n attached: function (element) {\n enforce(element).attributeExists('for');\n },\n attributes: {\n 'for': updateLabelFor,\n form: updateLabelForm\n },\n prototype: {\n get disabled() {\n return this.hasAttribute('disabled');\n },\n set disabled(value) {\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n },\n events: {\n click: function (element, e) {\n if (element.disabled) {\n e.preventDefault();\n }\n }\n }\n});\n\nexport default LabelEl;\n","import './styles/aui.pattern.forms';\nimport '@atlassian/aui/src/css-vendor/jquery/plugins/jquery.select2.css';\nimport '@atlassian/aui/src/less/aui-select2.less';\nimport '@atlassian/aui/src/js/aui/select2.js';\nexport {};\n","import $ from './jquery';\nimport '../../js-vendor/jquery/plugins/jquery.select2';\n\n/**\n * Wraps a vanilla Select2 with ADG _style_, as an auiSelect2 method on jQuery objects.\n *\n * @since 5.2\n */\n\n/**\n * We make a copy of the original select2 so that later we might re-specify $.fn.auiSelect2 as $.fn.select2. That\n * way, calling code will be able to call $thing.select2() as if they were calling the original library,\n * and ADG styling will just magically happen.\n */\nvar originalSelect2 = $.fn.select2;\n\n// AUI-specific classes\nvar auiContainer = 'aui-select2-container';\nvar auiDropdown = 'aui-select2-drop aui-dropdown2 aui-style-default';\nvar auiHasAvatar = 'aui-has-avatar';\n\n$.fn.auiSelect2 = function (first) {\n var updatedArgs;\n\n if ($.isPlainObject(first)) {\n var auiOpts = $.extend({}, first);\n var auiAvatarClass = auiOpts.hasAvatar ? ' ' + auiHasAvatar : '';\n //add our classes in addition to those the caller specified\n auiOpts.containerCssClass = auiContainer + auiAvatarClass + (auiOpts.containerCssClass ? ' ' + auiOpts.containerCssClass : '');\n auiOpts.dropdownCssClass = auiDropdown + auiAvatarClass + (auiOpts.dropdownCssClass ? ' ' + auiOpts.dropdownCssClass : '');\n updatedArgs = Array.prototype.slice.call(arguments, 1);\n updatedArgs.unshift(auiOpts);\n } else if (!arguments.length) {\n updatedArgs = [{\n containerCssClass: auiContainer,\n dropdownCssClass: auiDropdown\n }];\n } else {\n updatedArgs = arguments;\n }\n\n return originalSelect2.apply(this, updatedArgs);\n};\n","/*\n Copyright 2012 Igor Vaynberg\n\n Version: 3.4.5 Timestamp: Mon Nov 4 08:22:42 PST 2013\n (with cherry-picked https://github.com/select2/select2/commit/60359f9d43d0fd0bd93e2cb861d677dbb04d3d79)\n\n This software is licensed under the Apache License, Version 2.0 (the \"Apache License\") or the GNU\n General Public License version 2 (the \"GPL License\"). You may choose either license to govern your\n use of this software only upon the condition that you accept all of the terms of either the Apache\n License or the GPL License.\n\n You may obtain a copy of the Apache License and the GPL License at:\n\n http://www.apache.org/licenses/LICENSE-2.0\n http://www.gnu.org/licenses/gpl-2.0.html\n\n Unless required by applicable law or agreed to in writing, software distributed under the\n Apache License or the GPL Licesnse is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for\n the specific language governing permissions and limitations under the Apache License and the GPL License.\n */\n(function ($) {\n if(typeof $.fn.each2 == \"undefined\") {\n $.extend($.fn, {\n /*\n * 4-10 times faster .each replacement\n * use it carefully, as it overrides jQuery context of element on each iteration\n */\n each2 : function (c) {\n var j = $([0]), i = -1, l = this.length;\n while (\n ++i < l\n && (j.context = j[0] = this[i])\n && c.call(j[0], i, j) !== false //\"this\"=DOM, i=index, j=jQuery object\n );\n return this;\n }\n });\n }\n})(jQuery);\n\n(function ($, undefined) {\n \"use strict\";\n /*global document, window, jQuery, console */\n\n if (window.Select2 !== undefined) {\n return;\n }\n\n var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,\n lastMousePosition={x:0,y:0}, $document, scrollBarDimensions,\n\n KEY = {\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n SPACE: 32,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n SHIFT: 16,\n CTRL: 17,\n ALT: 18,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n HOME: 36,\n END: 35,\n BACKSPACE: 8,\n DELETE: 46,\n isArrow: function (k) {\n k = k.which ? k.which : k;\n switch (k) {\n case KEY.LEFT:\n case KEY.RIGHT:\n case KEY.UP:\n case KEY.DOWN:\n return true;\n }\n return false;\n },\n isControl: function (e) {\n var k = e.which;\n switch (k) {\n case KEY.SHIFT:\n case KEY.CTRL:\n case KEY.ALT:\n return true;\n }\n\n if (e.metaKey) return true;\n\n return false;\n },\n isFunctionKey: function (k) {\n k = k.which ? k.which : k;\n return k >= 112 && k <= 123;\n }\n },\n MEASURE_SCROLLBAR_TEMPLATE = \"<div class='select2-measure-scrollbar'></div>\",\n\n DIACRITICS = {\"\\u24B6\":\"A\",\"\\uFF21\":\"A\",\"\\u00C0\":\"A\",\"\\u00C1\":\"A\",\"\\u00C2\":\"A\",\"\\u1EA6\":\"A\",\"\\u1EA4\":\"A\",\"\\u1EAA\":\"A\",\"\\u1EA8\":\"A\",\"\\u00C3\":\"A\",\"\\u0100\":\"A\",\"\\u0102\":\"A\",\"\\u1EB0\":\"A\",\"\\u1EAE\":\"A\",\"\\u1EB4\":\"A\",\"\\u1EB2\":\"A\",\"\\u0226\":\"A\",\"\\u01E0\":\"A\",\"\\u00C4\":\"A\",\"\\u01DE\":\"A\",\"\\u1EA2\":\"A\",\"\\u00C5\":\"A\",\"\\u01FA\":\"A\",\"\\u01CD\":\"A\",\"\\u0200\":\"A\",\"\\u0202\":\"A\",\"\\u1EA0\":\"A\",\"\\u1EAC\":\"A\",\"\\u1EB6\":\"A\",\"\\u1E00\":\"A\",\"\\u0104\":\"A\",\"\\u023A\":\"A\",\"\\u2C6F\":\"A\",\"\\uA732\":\"AA\",\"\\u00C6\":\"AE\",\"\\u01FC\":\"AE\",\"\\u01E2\":\"AE\",\"\\uA734\":\"AO\",\"\\uA736\":\"AU\",\"\\uA738\":\"AV\",\"\\uA73A\":\"AV\",\"\\uA73C\":\"AY\",\"\\u24B7\":\"B\",\"\\uFF22\":\"B\",\"\\u1E02\":\"B\",\"\\u1E04\":\"B\",\"\\u1E06\":\"B\",\"\\u0243\":\"B\",\"\\u0182\":\"B\",\"\\u0181\":\"B\",\"\\u24B8\":\"C\",\"\\uFF23\":\"C\",\"\\u0106\":\"C\",\"\\u0108\":\"C\",\"\\u010A\":\"C\",\"\\u010C\":\"C\",\"\\u00C7\":\"C\",\"\\u1E08\":\"C\",\"\\u0187\":\"C\",\"\\u023B\":\"C\",\"\\uA73E\":\"C\",\"\\u24B9\":\"D\",\"\\uFF24\":\"D\",\"\\u1E0A\":\"D\",\"\\u010E\":\"D\",\"\\u1E0C\":\"D\",\"\\u1E10\":\"D\",\"\\u1E12\":\"D\",\"\\u1E0E\":\"D\",\"\\u0110\":\"D\",\"\\u018B\":\"D\",\"\\u018A\":\"D\",\"\\u0189\":\"D\",\"\\uA779\":\"D\",\"\\u01F1\":\"DZ\",\"\\u01C4\":\"DZ\",\"\\u01F2\":\"Dz\",\"\\u01C5\":\"Dz\",\"\\u24BA\":\"E\",\"\\uFF25\":\"E\",\"\\u00C8\":\"E\",\"\\u00C9\":\"E\",\"\\u00CA\":\"E\",\"\\u1EC0\":\"E\",\"\\u1EBE\":\"E\",\"\\u1EC4\":\"E\",\"\\u1EC2\":\"E\",\"\\u1EBC\":\"E\",\"\\u0112\":\"E\",\"\\u1E14\":\"E\",\"\\u1E16\":\"E\",\"\\u0114\":\"E\",\"\\u0116\":\"E\",\"\\u00CB\":\"E\",\"\\u1EBA\":\"E\",\"\\u011A\":\"E\",\"\\u0204\":\"E\",\"\\u0206\":\"E\",\"\\u1EB8\":\"E\",\"\\u1EC6\":\"E\",\"\\u0228\":\"E\",\"\\u1E1C\":\"E\",\"\\u0118\":\"E\",\"\\u1E18\":\"E\",\"\\u1E1A\":\"E\",\"\\u0190\":\"E\",\"\\u018E\":\"E\",\"\\u24BB\":\"F\",\"\\uFF26\":\"F\",\"\\u1E1E\":\"F\",\"\\u0191\":\"F\",\"\\uA77B\":\"F\",\"\\u24BC\":\"G\",\"\\uFF27\":\"G\",\"\\u01F4\":\"G\",\"\\u011C\":\"G\",\"\\u1E20\":\"G\",\"\\u011E\":\"G\",\"\\u0120\":\"G\",\"\\u01E6\":\"G\",\"\\u0122\":\"G\",\"\\u01E4\":\"G\",\"\\u0193\":\"G\",\"\\uA7A0\":\"G\",\"\\uA77D\":\"G\",\"\\uA77E\":\"G\",\"\\u24BD\":\"H\",\"\\uFF28\":\"H\",\"\\u0124\":\"H\",\"\\u1E22\":\"H\",\"\\u1E26\":\"H\",\"\\u021E\":\"H\",\"\\u1E24\":\"H\",\"\\u1E28\":\"H\",\"\\u1E2A\":\"H\",\"\\u0126\":\"H\",\"\\u2C67\":\"H\",\"\\u2C75\":\"H\",\"\\uA78D\":\"H\",\"\\u24BE\":\"I\",\"\\uFF29\":\"I\",\"\\u00CC\":\"I\",\"\\u00CD\":\"I\",\"\\u00CE\":\"I\",\"\\u0128\":\"I\",\"\\u012A\":\"I\",\"\\u012C\":\"I\",\"\\u0130\":\"I\",\"\\u00CF\":\"I\",\"\\u1E2E\":\"I\",\"\\u1EC8\":\"I\",\"\\u01CF\":\"I\",\"\\u0208\":\"I\",\"\\u020A\":\"I\",\"\\u1ECA\":\"I\",\"\\u012E\":\"I\",\"\\u1E2C\":\"I\",\"\\u0197\":\"I\",\"\\u24BF\":\"J\",\"\\uFF2A\":\"J\",\"\\u0134\":\"J\",\"\\u0248\":\"J\",\"\\u24C0\":\"K\",\"\\uFF2B\":\"K\",\"\\u1E30\":\"K\",\"\\u01E8\":\"K\",\"\\u1E32\":\"K\",\"\\u0136\":\"K\",\"\\u1E34\":\"K\",\"\\u0198\":\"K\",\"\\u2C69\":\"K\",\"\\uA740\":\"K\",\"\\uA742\":\"K\",\"\\uA744\":\"K\",\"\\uA7A2\":\"K\",\"\\u24C1\":\"L\",\"\\uFF2C\":\"L\",\"\\u013F\":\"L\",\"\\u0139\":\"L\",\"\\u013D\":\"L\",\"\\u1E36\":\"L\",\"\\u1E38\":\"L\",\"\\u013B\":\"L\",\"\\u1E3C\":\"L\",\"\\u1E3A\":\"L\",\"\\u0141\":\"L\",\"\\u023D\":\"L\",\"\\u2C62\":\"L\",\"\\u2C60\":\"L\",\"\\uA748\":\"L\",\"\\uA746\":\"L\",\"\\uA780\":\"L\",\"\\u01C7\":\"LJ\",\"\\u01C8\":\"Lj\",\"\\u24C2\":\"M\",\"\\uFF2D\":\"M\",\"\\u1E3E\":\"M\",\"\\u1E40\":\"M\",\"\\u1E42\":\"M\",\"\\u2C6E\":\"M\",\"\\u019C\":\"M\",\"\\u24C3\":\"N\",\"\\uFF2E\":\"N\",\"\\u01F8\":\"N\",\"\\u0143\":\"N\",\"\\u00D1\":\"N\",\"\\u1E44\":\"N\",\"\\u0147\":\"N\",\"\\u1E46\":\"N\",\"\\u0145\":\"N\",\"\\u1E4A\":\"N\",\"\\u1E48\":\"N\",\"\\u0220\":\"N\",\"\\u019D\":\"N\",\"\\uA790\":\"N\",\"\\uA7A4\":\"N\",\"\\u01CA\":\"NJ\",\"\\u01CB\":\"Nj\",\"\\u24C4\":\"O\",\"\\uFF2F\":\"O\",\"\\u00D2\":\"O\",\"\\u00D3\":\"O\",\"\\u00D4\":\"O\",\"\\u1ED2\":\"O\",\"\\u1ED0\":\"O\",\"\\u1ED6\":\"O\",\"\\u1ED4\":\"O\",\"\\u00D5\":\"O\",\"\\u1E4C\":\"O\",\"\\u022C\":\"O\",\"\\u1E4E\":\"O\",\"\\u014C\":\"O\",\"\\u1E50\":\"O\",\"\\u1E52\":\"O\",\"\\u014E\":\"O\",\"\\u022E\":\"O\",\"\\u0230\":\"O\",\"\\u00D6\":\"O\",\"\\u022A\":\"O\",\"\\u1ECE\":\"O\",\"\\u0150\":\"O\",\"\\u01D1\":\"O\",\"\\u020C\":\"O\",\"\\u020E\":\"O\",\"\\u01A0\":\"O\",\"\\u1EDC\":\"O\",\"\\u1EDA\":\"O\",\"\\u1EE0\":\"O\",\"\\u1EDE\":\"O\",\"\\u1EE2\":\"O\",\"\\u1ECC\":\"O\",\"\\u1ED8\":\"O\",\"\\u01EA\":\"O\",\"\\u01EC\":\"O\",\"\\u00D8\":\"O\",\"\\u01FE\":\"O\",\"\\u0186\":\"O\",\"\\u019F\":\"O\",\"\\uA74A\":\"O\",\"\\uA74C\":\"O\",\"\\u01A2\":\"OI\",\"\\uA74E\":\"OO\",\"\\u0222\":\"OU\",\"\\u24C5\":\"P\",\"\\uFF30\":\"P\",\"\\u1E54\":\"P\",\"\\u1E56\":\"P\",\"\\u01A4\":\"P\",\"\\u2C63\":\"P\",\"\\uA750\":\"P\",\"\\uA752\":\"P\",\"\\uA754\":\"P\",\"\\u24C6\":\"Q\",\"\\uFF31\":\"Q\",\"\\uA756\":\"Q\",\"\\uA758\":\"Q\",\"\\u024A\":\"Q\",\"\\u24C7\":\"R\",\"\\uFF32\":\"R\",\"\\u0154\":\"R\",\"\\u1E58\":\"R\",\"\\u0158\":\"R\",\"\\u0210\":\"R\",\"\\u0212\":\"R\",\"\\u1E5A\":\"R\",\"\\u1E5C\":\"R\",\"\\u0156\":\"R\",\"\\u1E5E\":\"R\",\"\\u024C\":\"R\",\"\\u2C64\":\"R\",\"\\uA75A\":\"R\",\"\\uA7A6\":\"R\",\"\\uA782\":\"R\",\"\\u24C8\":\"S\",\"\\uFF33\":\"S\",\"\\u1E9E\":\"S\",\"\\u015A\":\"S\",\"\\u1E64\":\"S\",\"\\u015C\":\"S\",\"\\u1E60\":\"S\",\"\\u0160\":\"S\",\"\\u1E66\":\"S\",\"\\u1E62\":\"S\",\"\\u1E68\":\"S\",\"\\u0218\":\"S\",\"\\u015E\":\"S\",\"\\u2C7E\":\"S\",\"\\uA7A8\":\"S\",\"\\uA784\":\"S\",\"\\u24C9\":\"T\",\"\\uFF34\":\"T\",\"\\u1E6A\":\"T\",\"\\u0164\":\"T\",\"\\u1E6C\":\"T\",\"\\u021A\":\"T\",\"\\u0162\":\"T\",\"\\u1E70\":\"T\",\"\\u1E6E\":\"T\",\"\\u0166\":\"T\",\"\\u01AC\":\"T\",\"\\u01AE\":\"T\",\"\\u023E\":\"T\",\"\\uA786\":\"T\",\"\\uA728\":\"TZ\",\"\\u24CA\":\"U\",\"\\uFF35\":\"U\",\"\\u00D9\":\"U\",\"\\u00DA\":\"U\",\"\\u00DB\":\"U\",\"\\u0168\":\"U\",\"\\u1E78\":\"U\",\"\\u016A\":\"U\",\"\\u1E7A\":\"U\",\"\\u016C\":\"U\",\"\\u00DC\":\"U\",\"\\u01DB\":\"U\",\"\\u01D7\":\"U\",\"\\u01D5\":\"U\",\"\\u01D9\":\"U\",\"\\u1EE6\":\"U\",\"\\u016E\":\"U\",\"\\u0170\":\"U\",\"\\u01D3\":\"U\",\"\\u0214\":\"U\",\"\\u0216\":\"U\",\"\\u01AF\":\"U\",\"\\u1EEA\":\"U\",\"\\u1EE8\":\"U\",\"\\u1EEE\":\"U\",\"\\u1EEC\":\"U\",\"\\u1EF0\":\"U\",\"\\u1EE4\":\"U\",\"\\u1E72\":\"U\",\"\\u0172\":\"U\",\"\\u1E76\":\"U\",\"\\u1E74\":\"U\",\"\\u0244\":\"U\",\"\\u24CB\":\"V\",\"\\uFF36\":\"V\",\"\\u1E7C\":\"V\",\"\\u1E7E\":\"V\",\"\\u01B2\":\"V\",\"\\uA75E\":\"V\",\"\\u0245\":\"V\",\"\\uA760\":\"VY\",\"\\u24CC\":\"W\",\"\\uFF37\":\"W\",\"\\u1E80\":\"W\",\"\\u1E82\":\"W\",\"\\u0174\":\"W\",\"\\u1E86\":\"W\",\"\\u1E84\":\"W\",\"\\u1E88\":\"W\",\"\\u2C72\":\"W\",\"\\u24CD\":\"X\",\"\\uFF38\":\"X\",\"\\u1E8A\":\"X\",\"\\u1E8C\":\"X\",\"\\u24CE\":\"Y\",\"\\uFF39\":\"Y\",\"\\u1EF2\":\"Y\",\"\\u00DD\":\"Y\",\"\\u0176\":\"Y\",\"\\u1EF8\":\"Y\",\"\\u0232\":\"Y\",\"\\u1E8E\":\"Y\",\"\\u0178\":\"Y\",\"\\u1EF6\":\"Y\",\"\\u1EF4\":\"Y\",\"\\u01B3\":\"Y\",\"\\u024E\":\"Y\",\"\\u1EFE\":\"Y\",\"\\u24CF\":\"Z\",\"\\uFF3A\":\"Z\",\"\\u0179\":\"Z\",\"\\u1E90\":\"Z\",\"\\u017B\":\"Z\",\"\\u017D\":\"Z\",\"\\u1E92\":\"Z\",\"\\u1E94\":\"Z\",\"\\u01B5\":\"Z\",\"\\u0224\":\"Z\",\"\\u2C7F\":\"Z\",\"\\u2C6B\":\"Z\",\"\\uA762\":\"Z\",\"\\u24D0\":\"a\",\"\\uFF41\":\"a\",\"\\u1E9A\":\"a\",\"\\u00E0\":\"a\",\"\\u00E1\":\"a\",\"\\u00E2\":\"a\",\"\\u1EA7\":\"a\",\"\\u1EA5\":\"a\",\"\\u1EAB\":\"a\",\"\\u1EA9\":\"a\",\"\\u00E3\":\"a\",\"\\u0101\":\"a\",\"\\u0103\":\"a\",\"\\u1EB1\":\"a\",\"\\u1EAF\":\"a\",\"\\u1EB5\":\"a\",\"\\u1EB3\":\"a\",\"\\u0227\":\"a\",\"\\u01E1\":\"a\",\"\\u00E4\":\"a\",\"\\u01DF\":\"a\",\"\\u1EA3\":\"a\",\"\\u00E5\":\"a\",\"\\u01FB\":\"a\",\"\\u01CE\":\"a\",\"\\u0201\":\"a\",\"\\u0203\":\"a\",\"\\u1EA1\":\"a\",\"\\u1EAD\":\"a\",\"\\u1EB7\":\"a\",\"\\u1E01\":\"a\",\"\\u0105\":\"a\",\"\\u2C65\":\"a\",\"\\u0250\":\"a\",\"\\uA733\":\"aa\",\"\\u00E6\":\"ae\",\"\\u01FD\":\"ae\",\"\\u01E3\":\"ae\",\"\\uA735\":\"ao\",\"\\uA737\":\"au\",\"\\uA739\":\"av\",\"\\uA73B\":\"av\",\"\\uA73D\":\"ay\",\"\\u24D1\":\"b\",\"\\uFF42\":\"b\",\"\\u1E03\":\"b\",\"\\u1E05\":\"b\",\"\\u1E07\":\"b\",\"\\u0180\":\"b\",\"\\u0183\":\"b\",\"\\u0253\":\"b\",\"\\u24D2\":\"c\",\"\\uFF43\":\"c\",\"\\u0107\":\"c\",\"\\u0109\":\"c\",\"\\u010B\":\"c\",\"\\u010D\":\"c\",\"\\u00E7\":\"c\",\"\\u1E09\":\"c\",\"\\u0188\":\"c\",\"\\u023C\":\"c\",\"\\uA73F\":\"c\",\"\\u2184\":\"c\",\"\\u24D3\":\"d\",\"\\uFF44\":\"d\",\"\\u1E0B\":\"d\",\"\\u010F\":\"d\",\"\\u1E0D\":\"d\",\"\\u1E11\":\"d\",\"\\u1E13\":\"d\",\"\\u1E0F\":\"d\",\"\\u0111\":\"d\",\"\\u018C\":\"d\",\"\\u0256\":\"d\",\"\\u0257\":\"d\",\"\\uA77A\":\"d\",\"\\u01F3\":\"dz\",\"\\u01C6\":\"dz\",\"\\u24D4\":\"e\",\"\\uFF45\":\"e\",\"\\u00E8\":\"e\",\"\\u00E9\":\"e\",\"\\u00EA\":\"e\",\"\\u1EC1\":\"e\",\"\\u1EBF\":\"e\",\"\\u1EC5\":\"e\",\"\\u1EC3\":\"e\",\"\\u1EBD\":\"e\",\"\\u0113\":\"e\",\"\\u1E15\":\"e\",\"\\u1E17\":\"e\",\"\\u0115\":\"e\",\"\\u0117\":\"e\",\"\\u00EB\":\"e\",\"\\u1EBB\":\"e\",\"\\u011B\":\"e\",\"\\u0205\":\"e\",\"\\u0207\":\"e\",\"\\u1EB9\":\"e\",\"\\u1EC7\":\"e\",\"\\u0229\":\"e\",\"\\u1E1D\":\"e\",\"\\u0119\":\"e\",\"\\u1E19\":\"e\",\"\\u1E1B\":\"e\",\"\\u0247\":\"e\",\"\\u025B\":\"e\",\"\\u01DD\":\"e\",\"\\u24D5\":\"f\",\"\\uFF46\":\"f\",\"\\u1E1F\":\"f\",\"\\u0192\":\"f\",\"\\uA77C\":\"f\",\"\\u24D6\":\"g\",\"\\uFF47\":\"g\",\"\\u01F5\":\"g\",\"\\u011D\":\"g\",\"\\u1E21\":\"g\",\"\\u011F\":\"g\",\"\\u0121\":\"g\",\"\\u01E7\":\"g\",\"\\u0123\":\"g\",\"\\u01E5\":\"g\",\"\\u0260\":\"g\",\"\\uA7A1\":\"g\",\"\\u1D79\":\"g\",\"\\uA77F\":\"g\",\"\\u24D7\":\"h\",\"\\uFF48\":\"h\",\"\\u0125\":\"h\",\"\\u1E23\":\"h\",\"\\u1E27\":\"h\",\"\\u021F\":\"h\",\"\\u1E25\":\"h\",\"\\u1E29\":\"h\",\"\\u1E2B\":\"h\",\"\\u1E96\":\"h\",\"\\u0127\":\"h\",\"\\u2C68\":\"h\",\"\\u2C76\":\"h\",\"\\u0265\":\"h\",\"\\u0195\":\"hv\",\"\\u24D8\":\"i\",\"\\uFF49\":\"i\",\"\\u00EC\":\"i\",\"\\u00ED\":\"i\",\"\\u00EE\":\"i\",\"\\u0129\":\"i\",\"\\u012B\":\"i\",\"\\u012D\":\"i\",\"\\u00EF\":\"i\",\"\\u1E2F\":\"i\",\"\\u1EC9\":\"i\",\"\\u01D0\":\"i\",\"\\u0209\":\"i\",\"\\u020B\":\"i\",\"\\u1ECB\":\"i\",\"\\u012F\":\"i\",\"\\u1E2D\":\"i\",\"\\u0268\":\"i\",\"\\u0131\":\"i\",\"\\u24D9\":\"j\",\"\\uFF4A\":\"j\",\"\\u0135\":\"j\",\"\\u01F0\":\"j\",\"\\u0249\":\"j\",\"\\u24DA\":\"k\",\"\\uFF4B\":\"k\",\"\\u1E31\":\"k\",\"\\u01E9\":\"k\",\"\\u1E33\":\"k\",\"\\u0137\":\"k\",\"\\u1E35\":\"k\",\"\\u0199\":\"k\",\"\\u2C6A\":\"k\",\"\\uA741\":\"k\",\"\\uA743\":\"k\",\"\\uA745\":\"k\",\"\\uA7A3\":\"k\",\"\\u24DB\":\"l\",\"\\uFF4C\":\"l\",\"\\u0140\":\"l\",\"\\u013A\":\"l\",\"\\u013E\":\"l\",\"\\u1E37\":\"l\",\"\\u1E39\":\"l\",\"\\u013C\":\"l\",\"\\u1E3D\":\"l\",\"\\u1E3B\":\"l\",\"\\u017F\":\"l\",\"\\u0142\":\"l\",\"\\u019A\":\"l\",\"\\u026B\":\"l\",\"\\u2C61\":\"l\",\"\\uA749\":\"l\",\"\\uA781\":\"l\",\"\\uA747\":\"l\",\"\\u01C9\":\"lj\",\"\\u24DC\":\"m\",\"\\uFF4D\":\"m\",\"\\u1E3F\":\"m\",\"\\u1E41\":\"m\",\"\\u1E43\":\"m\",\"\\u0271\":\"m\",\"\\u026F\":\"m\",\"\\u24DD\":\"n\",\"\\uFF4E\":\"n\",\"\\u01F9\":\"n\",\"\\u0144\":\"n\",\"\\u00F1\":\"n\",\"\\u1E45\":\"n\",\"\\u0148\":\"n\",\"\\u1E47\":\"n\",\"\\u0146\":\"n\",\"\\u1E4B\":\"n\",\"\\u1E49\":\"n\",\"\\u019E\":\"n\",\"\\u0272\":\"n\",\"\\u0149\":\"n\",\"\\uA791\":\"n\",\"\\uA7A5\":\"n\",\"\\u01CC\":\"nj\",\"\\u24DE\":\"o\",\"\\uFF4F\":\"o\",\"\\u00F2\":\"o\",\"\\u00F3\":\"o\",\"\\u00F4\":\"o\",\"\\u1ED3\":\"o\",\"\\u1ED1\":\"o\",\"\\u1ED7\":\"o\",\"\\u1ED5\":\"o\",\"\\u00F5\":\"o\",\"\\u1E4D\":\"o\",\"\\u022D\":\"o\",\"\\u1E4F\":\"o\",\"\\u014D\":\"o\",\"\\u1E51\":\"o\",\"\\u1E53\":\"o\",\"\\u014F\":\"o\",\"\\u022F\":\"o\",\"\\u0231\":\"o\",\"\\u00F6\":\"o\",\"\\u022B\":\"o\",\"\\u1ECF\":\"o\",\"\\u0151\":\"o\",\"\\u01D2\":\"o\",\"\\u020D\":\"o\",\"\\u020F\":\"o\",\"\\u01A1\":\"o\",\"\\u1EDD\":\"o\",\"\\u1EDB\":\"o\",\"\\u1EE1\":\"o\",\"\\u1EDF\":\"o\",\"\\u1EE3\":\"o\",\"\\u1ECD\":\"o\",\"\\u1ED9\":\"o\",\"\\u01EB\":\"o\",\"\\u01ED\":\"o\",\"\\u00F8\":\"o\",\"\\u01FF\":\"o\",\"\\u0254\":\"o\",\"\\uA74B\":\"o\",\"\\uA74D\":\"o\",\"\\u0275\":\"o\",\"\\u01A3\":\"oi\",\"\\u0223\":\"ou\",\"\\uA74F\":\"oo\",\"\\u24DF\":\"p\",\"\\uFF50\":\"p\",\"\\u1E55\":\"p\",\"\\u1E57\":\"p\",\"\\u01A5\":\"p\",\"\\u1D7D\":\"p\",\"\\uA751\":\"p\",\"\\uA753\":\"p\",\"\\uA755\":\"p\",\"\\u24E0\":\"q\",\"\\uFF51\":\"q\",\"\\u024B\":\"q\",\"\\uA757\":\"q\",\"\\uA759\":\"q\",\"\\u24E1\":\"r\",\"\\uFF52\":\"r\",\"\\u0155\":\"r\",\"\\u1E59\":\"r\",\"\\u0159\":\"r\",\"\\u0211\":\"r\",\"\\u0213\":\"r\",\"\\u1E5B\":\"r\",\"\\u1E5D\":\"r\",\"\\u0157\":\"r\",\"\\u1E5F\":\"r\",\"\\u024D\":\"r\",\"\\u027D\":\"r\",\"\\uA75B\":\"r\",\"\\uA7A7\":\"r\",\"\\uA783\":\"r\",\"\\u24E2\":\"s\",\"\\uFF53\":\"s\",\"\\u00DF\":\"s\",\"\\u015B\":\"s\",\"\\u1E65\":\"s\",\"\\u015D\":\"s\",\"\\u1E61\":\"s\",\"\\u0161\":\"s\",\"\\u1E67\":\"s\",\"\\u1E63\":\"s\",\"\\u1E69\":\"s\",\"\\u0219\":\"s\",\"\\u015F\":\"s\",\"\\u023F\":\"s\",\"\\uA7A9\":\"s\",\"\\uA785\":\"s\",\"\\u1E9B\":\"s\",\"\\u24E3\":\"t\",\"\\uFF54\":\"t\",\"\\u1E6B\":\"t\",\"\\u1E97\":\"t\",\"\\u0165\":\"t\",\"\\u1E6D\":\"t\",\"\\u021B\":\"t\",\"\\u0163\":\"t\",\"\\u1E71\":\"t\",\"\\u1E6F\":\"t\",\"\\u0167\":\"t\",\"\\u01AD\":\"t\",\"\\u0288\":\"t\",\"\\u2C66\":\"t\",\"\\uA787\":\"t\",\"\\uA729\":\"tz\",\"\\u24E4\":\"u\",\"\\uFF55\":\"u\",\"\\u00F9\":\"u\",\"\\u00FA\":\"u\",\"\\u00FB\":\"u\",\"\\u0169\":\"u\",\"\\u1E79\":\"u\",\"\\u016B\":\"u\",\"\\u1E7B\":\"u\",\"\\u016D\":\"u\",\"\\u00FC\":\"u\",\"\\u01DC\":\"u\",\"\\u01D8\":\"u\",\"\\u01D6\":\"u\",\"\\u01DA\":\"u\",\"\\u1EE7\":\"u\",\"\\u016F\":\"u\",\"\\u0171\":\"u\",\"\\u01D4\":\"u\",\"\\u0215\":\"u\",\"\\u0217\":\"u\",\"\\u01B0\":\"u\",\"\\u1EEB\":\"u\",\"\\u1EE9\":\"u\",\"\\u1EEF\":\"u\",\"\\u1EED\":\"u\",\"\\u1EF1\":\"u\",\"\\u1EE5\":\"u\",\"\\u1E73\":\"u\",\"\\u0173\":\"u\",\"\\u1E77\":\"u\",\"\\u1E75\":\"u\",\"\\u0289\":\"u\",\"\\u24E5\":\"v\",\"\\uFF56\":\"v\",\"\\u1E7D\":\"v\",\"\\u1E7F\":\"v\",\"\\u028B\":\"v\",\"\\uA75F\":\"v\",\"\\u028C\":\"v\",\"\\uA761\":\"vy\",\"\\u24E6\":\"w\",\"\\uFF57\":\"w\",\"\\u1E81\":\"w\",\"\\u1E83\":\"w\",\"\\u0175\":\"w\",\"\\u1E87\":\"w\",\"\\u1E85\":\"w\",\"\\u1E98\":\"w\",\"\\u1E89\":\"w\",\"\\u2C73\":\"w\",\"\\u24E7\":\"x\",\"\\uFF58\":\"x\",\"\\u1E8B\":\"x\",\"\\u1E8D\":\"x\",\"\\u24E8\":\"y\",\"\\uFF59\":\"y\",\"\\u1EF3\":\"y\",\"\\u00FD\":\"y\",\"\\u0177\":\"y\",\"\\u1EF9\":\"y\",\"\\u0233\":\"y\",\"\\u1E8F\":\"y\",\"\\u00FF\":\"y\",\"\\u1EF7\":\"y\",\"\\u1E99\":\"y\",\"\\u1EF5\":\"y\",\"\\u01B4\":\"y\",\"\\u024F\":\"y\",\"\\u1EFF\":\"y\",\"\\u24E9\":\"z\",\"\\uFF5A\":\"z\",\"\\u017A\":\"z\",\"\\u1E91\":\"z\",\"\\u017C\":\"z\",\"\\u017E\":\"z\",\"\\u1E93\":\"z\",\"\\u1E95\":\"z\",\"\\u01B6\":\"z\",\"\\u0225\":\"z\",\"\\u0240\":\"z\",\"\\u2C6C\":\"z\",\"\\uA763\":\"z\"};\n\n $document = $(document);\n\n nextUid=(function() { var counter=1; return function() { return counter++; }; }());\n\n\n function stripDiacritics(str) {\n var ret, i, l, c;\n\n if (!str || str.length < 1) return str;\n\n ret = \"\";\n for (i = 0, l = str.length; i < l; i++) {\n c = str.charAt(i);\n ret += DIACRITICS[c] || c;\n }\n return ret;\n }\n\n function indexOf(value, array) {\n var i = 0, l = array.length;\n for (; i < l; i = i + 1) {\n if (equal(value, array[i])) return i;\n }\n return -1;\n }\n\n function measureScrollbar () {\n var $template = $( MEASURE_SCROLLBAR_TEMPLATE );\n $template.appendTo('body');\n\n var dim = {\n width: $template.width() - $template[0].clientWidth,\n height: $template.height() - $template[0].clientHeight\n };\n $template.remove();\n\n return dim;\n }\n\n /**\n * Compares equality of a and b\n * @param a\n * @param b\n */\n function equal(a, b) {\n if (a === b) return true;\n if (a === undefined || b === undefined) return false;\n if (a === null || b === null) return false;\n // Check whether 'a' or 'b' is a string (primitive or object).\n // The concatenation of an empty string (+'') converts its argument to a string's primitive.\n if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object\n if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object\n return false;\n }\n\n /**\n * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty\n * strings\n * @param string\n * @param separator\n */\n function splitVal(string, separator) {\n var val, i, l;\n if (string === null || string.length < 1) return [];\n val = string.split(separator);\n for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);\n return val;\n }\n\n function getSideBorderPadding(element) {\n return element.outerWidth(false) - element.width();\n }\n\n function installKeyUpChangeEvent(element) {\n var key=\"keyup-change-value\";\n element.on(\"keydown\", function () {\n if ($.data(element, key) === undefined) {\n $.data(element, key, element.val());\n }\n });\n element.on(\"keyup\", function () {\n var val= $.data(element, key);\n if (val !== undefined && element.val() !== val) {\n $.removeData(element, key);\n element.trigger(\"keyup-change\");\n }\n });\n }\n\n $document.on(\"mousemove\", function (e) {\n lastMousePosition.x = e.pageX;\n lastMousePosition.y = e.pageY;\n });\n\n /**\n * filters mouse events so an event is fired only if the mouse moved.\n *\n * filters out mouse events that occur when mouse is stationary but\n * the elements under the pointer are scrolled.\n */\n function installFilteredMouseMove(element) {\n element.on(\"mousemove\", function (e) {\n var lastpos = lastMousePosition;\n if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {\n $(e.target).trigger(\"mousemove-filtered\", e);\n }\n });\n }\n\n /**\n * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made\n * within the last quietMillis milliseconds.\n *\n * @param quietMillis number of milliseconds to wait before invoking fn\n * @param fn function to be debounced\n * @param ctx object to be used as this reference within fn\n * @return debounced version of fn\n */\n function debounce(quietMillis, fn, ctx) {\n ctx = ctx || undefined;\n var timeout;\n return function () {\n var args = arguments;\n window.clearTimeout(timeout);\n timeout = window.setTimeout(function() {\n fn.apply(ctx, args);\n }, quietMillis);\n };\n }\n\n /**\n * A simple implementation of a thunk\n * @param formula function used to lazily initialize the thunk\n * @return {Function}\n */\n function thunk(formula) {\n var evaluated = false,\n value;\n return function() {\n if (evaluated === false) { value = formula(); evaluated = true; }\n return value;\n };\n };\n\n function installDebouncedScroll(threshold, element) {\n var notify = debounce(threshold, function (e) { element.trigger(\"scroll-debounced\", e);});\n element.on(\"scroll\", function (e) {\n if (indexOf(e.target, element.get()) >= 0) notify(e);\n });\n }\n\n function focus($el) {\n if ($el[0] === document.activeElement) return;\n\n /* set the focus in a 0 timeout - that way the focus is set after the processing\n of the current event has finished - which seems like the only reliable way\n to set focus */\n window.setTimeout(function() {\n var el=$el[0], pos=$el.val().length, range;\n\n $el.focus();\n\n /* make sure el received focus so we do not error out when trying to manipulate the caret.\n sometimes modals or others listeners may steal it after its set */\n if ($el.is(\":visible\") && el === document.activeElement) {\n\n /* after the focus is set move the caret to the end, necessary when we val()\n just before setting focus */\n if(el.setSelectionRange)\n {\n el.setSelectionRange(pos, pos);\n }\n else if (el.createTextRange) {\n range = el.createTextRange();\n range.collapse(false);\n range.select();\n }\n }\n }, 0);\n }\n\n function getCursorInfo(el) {\n el = $(el)[0];\n var offset = 0;\n var length = 0;\n if ('selectionStart' in el) {\n offset = el.selectionStart;\n length = el.selectionEnd - offset;\n } else if ('selection' in document) {\n el.focus();\n var sel = document.selection.createRange();\n length = document.selection.createRange().text.length;\n sel.moveStart('character', -el.value.length);\n offset = sel.text.length - length;\n }\n return { offset: offset, length: length };\n }\n\n function killEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n }\n function killEventImmediately(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n function measureTextWidth(e) {\n if (!sizer){\n var style = e[0].currentStyle || window.getComputedStyle(e[0], null);\n sizer = $(document.createElement(\"div\")).css({\n position: \"absolute\",\n left: \"-10000px\",\n top: \"-10000px\",\n display: \"none\",\n fontSize: style.fontSize,\n fontFamily: style.fontFamily,\n fontStyle: style.fontStyle,\n fontWeight: style.fontWeight,\n letterSpacing: style.letterSpacing,\n textTransform: style.textTransform,\n whiteSpace: \"nowrap\"\n });\n sizer.attr(\"class\",\"select2-sizer\");\n $(\"body\").append(sizer);\n }\n sizer.text(e.val());\n return sizer.width();\n }\n\n function syncCssClasses(dest, src, adapter) {\n var classes, replacements = [], adapted;\n\n classes = dest.attr(\"class\");\n if (classes) {\n classes = '' + classes; // for IE which returns object\n $(classes.split(\" \")).each2(function() {\n if (this.indexOf(\"select2-\") === 0) {\n replacements.push(this);\n }\n });\n }\n classes = src.attr(\"class\");\n if (classes) {\n classes = '' + classes; // for IE which returns object\n $(classes.split(\" \")).each2(function() {\n if (this.indexOf(\"select2-\") !== 0) {\n adapted = adapter(this);\n if (adapted) {\n replacements.push(adapted);\n }\n }\n });\n }\n dest.attr(\"class\", replacements.join(\" \"));\n }\n\n\n function markMatch(text, term, markup, escapeMarkup) {\n var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())),\n tl=term.length;\n\n if (match<0) {\n markup.push(escapeMarkup(text));\n return;\n }\n\n markup.push(escapeMarkup(text.substring(0, match)));\n markup.push(\"<span class='select2-match'>\");\n markup.push(escapeMarkup(text.substring(match, match + tl)));\n markup.push(\"</span>\");\n markup.push(escapeMarkup(text.substring(match + tl, text.length)));\n }\n\n function defaultEscapeMarkup(markup) {\n var replace_map = {\n '\\\\': '&#92;',\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n \"/\": '&#47;'\n };\n\n return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n return replace_map[match];\n });\n }\n\n /**\n * Produces an ajax-based query function\n *\n * @param options object containing configuration paramters\n * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax\n * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax\n * @param options.url url for the data\n * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.\n * @param options.dataType request data type: ajax, jsonp, other datatatypes supported by jQuery's $.ajax function or the transport function if specified\n * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often\n * @param options.results a function(remoteData, pageNumber) that converts data returned form the remote request to the format expected by Select2.\n * The expected format is an object containing the following keys:\n * results array of objects that will be used as choices\n * more (optional) boolean indicating whether there are more results available\n * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}\n */\n function ajax(options) {\n var timeout, // current scheduled but not yet executed request\n handler = null,\n quietMillis = options.quietMillis || 100,\n ajaxUrl = options.url,\n self = this;\n\n return function (query) {\n window.clearTimeout(timeout);\n timeout = window.setTimeout(function () {\n var data = options.data, // ajax data function\n url = ajaxUrl, // ajax url string or function\n transport = options.transport || $.fn.select2.ajaxDefaults.transport,\n // deprecated - to be removed in 4.0 - use params instead\n deprecated = {\n type: options.type || 'GET', // set type of request (GET or POST)\n cache: options.cache || false,\n jsonpCallback: options.jsonpCallback||undefined,\n dataType: options.dataType||\"json\"\n },\n params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);\n\n data = data ? data.call(self, query.term, query.page, query.context) : null;\n url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;\n\n if (handler) { handler.abort(); }\n\n if (options.params) {\n if ($.isFunction(options.params)) {\n $.extend(params, options.params.call(self));\n } else {\n $.extend(params, options.params);\n }\n }\n\n $.extend(params, {\n url: url,\n dataType: options.dataType,\n data: data,\n success: function (data) {\n // TODO - replace query.page with query so users have access to term, page, etc.\n var results = options.results(data, query.page);\n query.callback(results);\n }\n });\n handler = transport.call(self, params);\n }, quietMillis);\n };\n }\n\n /**\n * Produces a query function that works with a local array\n *\n * @param options object containing configuration parameters. The options parameter can either be an array or an\n * object.\n *\n * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.\n *\n * If the object form is used ti is assumed that it contains 'data' and 'text' keys. The 'data' key should contain\n * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'\n * key can either be a String in which case it is expected that each element in the 'data' array has a key with the\n * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract\n * the text.\n */\n function local(options) {\n var data = options, // data elements\n dataText,\n tmp,\n text = function (item) { return \"\"+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search\n\n if ($.isArray(data)) {\n tmp = data;\n data = { results: tmp };\n }\n\n if ($.isFunction(data) === false) {\n tmp = data;\n data = function() { return tmp; };\n }\n\n var dataItem = data();\n if (dataItem.text) {\n text = dataItem.text;\n // if text is not a function we assume it to be a key name\n if (!$.isFunction(text)) {\n dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available\n text = function (item) { return item[dataText]; };\n }\n }\n\n return function (query) {\n var t = query.term, filtered = { results: [] }, process;\n if (t === \"\") {\n query.callback(data());\n return;\n }\n\n process = function(datum, collection) {\n var group, attr;\n datum = datum[0];\n if (datum.children) {\n group = {};\n for (attr in datum) {\n if (datum.hasOwnProperty(attr)) group[attr]=datum[attr];\n }\n group.children=[];\n $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); });\n if (group.children.length || query.matcher(t, text(group), datum)) {\n collection.push(group);\n }\n } else {\n if (query.matcher(t, text(datum), datum)) {\n collection.push(datum);\n }\n }\n };\n\n $(data().results).each2(function(i, datum) { process(datum, filtered.results); });\n query.callback(filtered);\n };\n }\n\n // TODO javadoc\n function tags(data) {\n var isFunc = $.isFunction(data);\n return function (query) {\n var t = query.term, filtered = {results: []};\n $(isFunc ? data() : data).each(function () {\n var isObject = this.text !== undefined,\n text = isObject ? this.text : this;\n if (t === \"\" || query.matcher(t, text)) {\n filtered.results.push(isObject ? this : {id: this, text: this});\n }\n });\n query.callback(filtered);\n };\n }\n\n /**\n * Checks if the formatter function should be used.\n *\n * Throws an error if it is not a function. Returns true if it should be used,\n * false if no formatting should be performed.\n *\n * @param formatter\n */\n function checkFormatter(formatter, formatterName) {\n if ($.isFunction(formatter)) return true;\n if (!formatter) return false;\n throw new Error(formatterName +\" must be a function or a falsy value\");\n }\n\n function evaluate(val) {\n return $.isFunction(val) ? val() : val;\n }\n\n function countResults(results) {\n var count = 0;\n $.each(results, function(i, item) {\n if (item.children) {\n count += countResults(item.children);\n } else {\n count++;\n }\n });\n return count;\n }\n\n /**\n * Default tokenizer. This function uses breaks the input on substring match of any string from the\n * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those\n * two options have to be defined in order for the tokenizer to work.\n *\n * @param input text user has typed so far or pasted into the search field\n * @param selection currently selected choices\n * @param selectCallback function(choice) callback tho add the choice to selection\n * @param opts select2's opts\n * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value\n */\n function defaultTokenizer(input, selection, selectCallback, opts) {\n var original = input, // store the original so we can compare and know if we need to tell the search to update its text\n dupe = false, // check for whether a token we extracted represents a duplicate selected choice\n token, // token\n index, // position at which the separator was found\n i, l, // looping variables\n separator; // the matched separator\n\n if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;\n\n while (true) {\n index = -1;\n\n for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {\n separator = opts.tokenSeparators[i];\n index = input.indexOf(separator);\n if (index >= 0) break;\n }\n\n if (index < 0) break; // did not find any token separator in the input string, bail\n\n token = input.substring(0, index);\n input = input.substring(index + separator.length);\n\n if (token.length > 0) {\n token = opts.createSearchChoice.call(this, token, selection);\n if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {\n dupe = false;\n for (i = 0, l = selection.length; i < l; i++) {\n if (equal(opts.id(token), opts.id(selection[i]))) {\n dupe = true; break;\n }\n }\n\n if (!dupe) selectCallback(token);\n }\n }\n }\n\n if (original!==input) return input;\n }\n\n /**\n * Creates a new class\n *\n * @param superClass\n * @param methods\n */\n function clazz(SuperClass, methods) {\n var constructor = function () {};\n constructor.prototype = new SuperClass;\n constructor.prototype.constructor = constructor;\n constructor.prototype.parent = SuperClass.prototype;\n constructor.prototype = $.extend(constructor.prototype, methods);\n return constructor;\n }\n\n AbstractSelect2 = clazz(Object, {\n\n // abstract\n bind: function (func) {\n var self = this;\n return function () {\n func.apply(self, arguments);\n };\n },\n\n // abstract\n init: function (opts) {\n var results, search, resultsSelector = \".select2-results\";\n\n // prepare options\n this.opts = opts = this.prepareOpts(opts);\n\n this.id=opts.id;\n\n // destroy if called on an existing component\n if (opts.element.data(\"select2\") !== undefined &&\n opts.element.data(\"select2\") !== null) {\n opts.element.data(\"select2\").destroy();\n }\n\n this.container = this.createContainer();\n\n this.containerId=\"s2id_\"+(opts.element.attr(\"id\") || \"autogen\"+nextUid());\n this.containerSelector=\"#\"+this.containerId.replace(/([;&,\\.\\+\\*\\~':\"\\!\\^#$%@\\[\\]\\(\\)=>\\|])/g, '\\\\$1');\n this.container.attr(\"id\", this.containerId);\n\n // cache the body so future lookups are cheap\n this.body = thunk(function() { return opts.element.closest(\"body\"); });\n\n syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n\n this.container.attr(\"style\", opts.element.attr(\"style\"));\n this.container.css(evaluate(opts.containerCss));\n this.container.addClass(evaluate(opts.containerCssClass));\n\n this.elementTabIndex = this.opts.element.attr(\"tabindex\");\n\n // swap container for the element\n this.opts.element\n .data(\"select2\", this)\n .attr(\"tabindex\", \"-1\")\n .before(this.container)\n .on(\"click.select2\", killEvent); // do not leak click events\n\n this.container.data(\"select2\", this);\n\n this.dropdown = this.container.find(\".select2-drop\");\n\n syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n\n this.dropdown.addClass(evaluate(opts.dropdownCssClass));\n this.dropdown.data(\"select2\", this);\n this.dropdown.on(\"click\", killEvent);\n\n this.results = results = this.container.find(resultsSelector);\n this.search = search = this.container.find(\"input.select2-input\");\n\n this.queryCount = 0;\n this.resultsPage = 0;\n this.context = null;\n\n // initialize the container\n this.initContainer();\n\n this.container.on(\"click\", killEvent);\n\n installFilteredMouseMove(this.results);\n this.dropdown.on(\"mousemove-filtered touchstart touchmove touchend\", resultsSelector, this.bind(this.highlightUnderEvent));\n\n installDebouncedScroll(80, this.results);\n this.dropdown.on(\"scroll-debounced\", resultsSelector, this.bind(this.loadMoreIfNeeded));\n\n // do not propagate change event from the search field out of the component\n $(this.container).on(\"change\", \".select2-input\", function(e) {e.stopPropagation();});\n $(this.dropdown).on(\"change\", \".select2-input\", function(e) {e.stopPropagation();});\n\n // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel\n if ($.fn.mousewheel) {\n results.mousewheel(function (e, delta, deltaX, deltaY) {\n var top = results.scrollTop();\n if (deltaY > 0 && top - deltaY <= 0) {\n results.scrollTop(0);\n killEvent(e);\n } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {\n results.scrollTop(results.get(0).scrollHeight - results.height());\n killEvent(e);\n }\n });\n }\n\n installKeyUpChangeEvent(search);\n search.on(\"keyup-change input paste\", this.bind(this.updateResults));\n search.on(\"focus\", function () { search.addClass(\"select2-focused\"); });\n search.on(\"blur\", function () { search.removeClass(\"select2-focused\");});\n\n this.dropdown.on(\"mouseup\", resultsSelector, this.bind(function (e) {\n if ($(e.target).closest(\".select2-result-selectable\").length > 0) {\n this.highlightUnderEvent(e);\n this.selectHighlighted(e);\n }\n }));\n\n // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening\n // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's\n // dom it will trigger the popup close, which is not what we want\n this.dropdown.on(\"click mouseup mousedown\", function (e) { e.stopPropagation(); });\n\n if ($.isFunction(this.opts.initSelection)) {\n // initialize selection based on the current value of the source element\n this.initSelection();\n\n // if the user has provided a function that can set selection based on the value of the source element\n // we monitor the change event on the element and trigger it, allowing for two way synchronization\n this.monitorSource();\n }\n\n if (opts.maximumInputLength !== null) {\n this.search.attr(\"maxlength\", opts.maximumInputLength);\n }\n\n var disabled = opts.element.prop(\"disabled\");\n if (disabled === undefined) disabled = false;\n this.enable(!disabled);\n\n var readonly = opts.element.prop(\"readonly\");\n if (readonly === undefined) readonly = false;\n this.readonly(readonly);\n\n // Calculate size of scrollbar\n scrollBarDimensions = scrollBarDimensions || measureScrollbar();\n\n this.autofocus = opts.element.prop(\"autofocus\");\n opts.element.prop(\"autofocus\", false);\n if (this.autofocus) this.focus();\n\n this.nextSearchTerm = undefined;\n },\n\n // abstract\n destroy: function () {\n var element=this.opts.element, select2 = element.data(\"select2\");\n\n this.close();\n\n if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }\n\n if (select2 !== undefined) {\n select2.container.remove();\n select2.dropdown.remove();\n element\n .removeClass(\"select2-offscreen\")\n .removeData(\"select2\")\n .off(\".select2\")\n .prop(\"autofocus\", this.autofocus || false);\n if (this.elementTabIndex) {\n element.attr({tabindex: this.elementTabIndex});\n } else {\n element.removeAttr(\"tabindex\");\n }\n element.show();\n }\n },\n\n // abstract\n optionToData: function(element) {\n if (element.is(\"option\")) {\n return {\n id:element.prop(\"value\"),\n text:element.text(),\n element: element.get(),\n css: element.attr(\"class\"),\n disabled: element.prop(\"disabled\"),\n locked: equal(element.attr(\"locked\"), \"locked\") || equal(element.data(\"locked\"), true)\n };\n } else if (element.is(\"optgroup\")) {\n return {\n text:element.attr(\"label\"),\n children:[],\n element: element.get(),\n css: element.attr(\"class\")\n };\n }\n },\n\n // abstract\n prepareOpts: function (opts) {\n var element, select, idKey, ajaxUrl, self = this;\n\n element = opts.element;\n\n if (element.get(0).tagName.toLowerCase() === \"select\") {\n this.select = select = opts.element;\n }\n\n if (select) {\n // these options are not allowed when attached to a select because they are picked up off the element itself\n $.each([\"id\", \"multiple\", \"ajax\", \"query\", \"createSearchChoice\", \"initSelection\", \"data\", \"tags\"], function () {\n if (this in opts) {\n throw new Error(\"Option '\" + this + \"' is not allowed for Select2 when attached to a <select> element.\");\n }\n });\n }\n\n opts = $.extend({}, {\n populateResults: function(container, results, query) {\n var populate, id=this.opts.id;\n\n populate=function(results, container, depth) {\n\n var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;\n\n results = opts.sortResults(results, container, query);\n\n for (i = 0, l = results.length; i < l; i = i + 1) {\n\n result=results[i];\n\n disabled = (result.disabled === true);\n selectable = (!disabled) && (id(result) !== undefined);\n\n compound=result.children && result.children.length > 0;\n\n node=$(\"<li></li>\");\n node.addClass(\"select2-results-dept-\"+depth);\n node.addClass(\"select2-result\");\n node.addClass(selectable ? \"select2-result-selectable\" : \"select2-result-unselectable\");\n if (disabled) { node.addClass(\"select2-disabled\"); }\n if (compound) { node.addClass(\"select2-result-with-children\"); }\n node.addClass(self.opts.formatResultCssClass(result));\n\n label=$(document.createElement(\"div\"));\n label.addClass(\"select2-result-label\");\n\n formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);\n if (formatted!==undefined) {\n label.html(formatted);\n }\n\n node.append(label);\n\n if (compound) {\n\n innerContainer=$(\"<ul></ul>\");\n innerContainer.addClass(\"select2-result-sub\");\n populate(result.children, innerContainer, depth+1);\n node.append(innerContainer);\n }\n\n node.data(\"select2-data\", result);\n container.append(node);\n }\n };\n\n populate(results, container, 0);\n }\n }, $.fn.select2.defaults, opts);\n\n if (typeof(opts.id) !== \"function\") {\n idKey = opts.id;\n opts.id = function (e) { return e[idKey]; };\n }\n\n if ($.isArray(opts.element.data(\"select2Tags\"))) {\n if (\"tags\" in opts) {\n throw \"tags specified as both an attribute 'data-select2-tags' and in options of Select2 \" + opts.element.attr(\"id\");\n }\n opts.tags=opts.element.data(\"select2Tags\");\n }\n\n if (select) {\n opts.query = this.bind(function (query) {\n var data = { results: [], more: false },\n term = query.term,\n children, placeholderOption, process;\n\n process=function(element, collection) {\n var group;\n if (element.is(\"option\")) {\n if (query.matcher(term, element.text(), element)) {\n collection.push(self.optionToData(element));\n }\n } else if (element.is(\"optgroup\")) {\n group=self.optionToData(element);\n element.children().each2(function(i, elm) { process(elm, group.children); });\n if (group.children.length>0) {\n collection.push(group);\n }\n }\n };\n\n children=element.children();\n\n // ignore the placeholder option if there is one\n if (this.getPlaceholder() !== undefined && children.length > 0) {\n placeholderOption = this.getPlaceholderOption();\n if (placeholderOption) {\n children=children.not(placeholderOption);\n }\n }\n\n children.each2(function(i, elm) { process(elm, data.results); });\n\n query.callback(data);\n });\n // this is needed because inside val() we construct choices from options and there id is hardcoded\n opts.id=function(e) { return e.id; };\n opts.formatResultCssClass = function(data) { return data.css; };\n } else {\n if (!(\"query\" in opts)) {\n\n if (\"ajax\" in opts) {\n ajaxUrl = opts.element.data(\"ajax-url\");\n if (ajaxUrl && ajaxUrl.length > 0) {\n opts.ajax.url = ajaxUrl;\n }\n opts.query = ajax.call(opts.element, opts.ajax);\n } else if (\"data\" in opts) {\n opts.query = local(opts.data);\n } else if (\"tags\" in opts) {\n opts.query = tags(opts.tags);\n if (opts.createSearchChoice === undefined) {\n opts.createSearchChoice = function (term) { return {id: $.trim(term), text: $.trim(term)}; };\n }\n if (opts.initSelection === undefined) {\n opts.initSelection = function (element, callback) {\n var data = [];\n $(splitVal(element.val(), opts.separator)).each(function () {\n var obj = { id: this, text: this },\n tags = opts.tags;\n if ($.isFunction(tags)) tags=tags();\n $(tags).each(function() { if (equal(this.id, obj.id)) { obj = this; return false; } });\n data.push(obj);\n });\n\n callback(data);\n };\n }\n }\n }\n }\n if (typeof(opts.query) !== \"function\") {\n throw \"query function not defined for Select2 \" + opts.element.attr(\"id\");\n }\n\n return opts;\n },\n\n /**\n * Monitor the original element for changes and update select2 accordingly\n */\n // abstract\n monitorSource: function () {\n var el = this.opts.element, sync, observer;\n\n el.on(\"change.select2\", this.bind(function (e) {\n if (this.opts.element.data(\"select2-change-triggered\") !== true) {\n this.initSelection();\n }\n }));\n\n sync = this.bind(function () {\n\n // sync enabled state\n var disabled = el.prop(\"disabled\");\n if (disabled === undefined) disabled = false;\n this.enable(!disabled);\n\n var readonly = el.prop(\"readonly\");\n if (readonly === undefined) readonly = false;\n this.readonly(readonly);\n\n syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);\n this.container.addClass(evaluate(this.opts.containerCssClass));\n\n syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);\n this.dropdown.addClass(evaluate(this.opts.dropdownCssClass));\n\n });\n\n // IE8-10\n el.on(\"propertychange.select2\", sync);\n\n // hold onto a reference of the callback to work around a chromium bug\n if (this.mutationCallback === undefined) {\n this.mutationCallback = function (mutations) {\n mutations.forEach(sync);\n }\n }\n\n // safari, chrome, firefox, IE11\n observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;\n if (observer !== undefined) {\n if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }\n this.propertyObserver = new observer(this.mutationCallback);\n this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });\n }\n },\n\n // abstract\n triggerSelect: function(data) {\n var evt = $.Event(\"select2-selecting\", { val: this.id(data), object: data });\n this.opts.element.trigger(evt);\n return !evt.isDefaultPrevented();\n },\n\n /**\n * Triggers the change event on the source element\n */\n // abstract\n triggerChange: function (details) {\n\n details = details || {};\n details= $.extend({}, details, { type: \"change\", val: this.val() });\n // prevents recursive triggering\n this.opts.element.data(\"select2-change-triggered\", true);\n this.opts.element.trigger(details);\n this.opts.element.data(\"select2-change-triggered\", false);\n\n // some validation frameworks ignore the change event and listen instead to keyup, click for selects\n // so here we trigger the click event manually\n this.opts.element.click();\n\n // ValidationEngine ignorea the change event and listens instead to blur\n // so here we trigger the blur event manually if so desired\n if (this.opts.blurOnChange)\n this.opts.element.blur();\n },\n\n //abstract\n isInterfaceEnabled: function()\n {\n return this.enabledInterface === true;\n },\n\n // abstract\n enableInterface: function() {\n var enabled = this._enabled && !this._readonly,\n disabled = !enabled;\n\n if (enabled === this.enabledInterface) return false;\n\n this.container.toggleClass(\"select2-container-disabled\", disabled);\n this.close();\n this.enabledInterface = enabled;\n\n return true;\n },\n\n // abstract\n enable: function(enabled) {\n if (enabled === undefined) enabled = true;\n if (this._enabled === enabled) return;\n this._enabled = enabled;\n\n this.opts.element.prop(\"disabled\", !enabled);\n this.enableInterface();\n },\n\n // abstract\n disable: function() {\n this.enable(false);\n },\n\n // abstract\n readonly: function(enabled) {\n if (enabled === undefined) enabled = false;\n if (this._readonly === enabled) return false;\n this._readonly = enabled;\n\n this.opts.element.prop(\"readonly\", enabled);\n this.enableInterface();\n return true;\n },\n\n // abstract\n opened: function () {\n return this.container.hasClass(\"select2-dropdown-open\");\n },\n\n // abstract\n positionDropdown: function() {\n var $dropdown = this.dropdown,\n offset = this.container.offset(),\n height = this.container.outerHeight(false),\n width = this.container.outerWidth(false),\n dropHeight = $dropdown.outerHeight(false),\n $window = $(window),\n windowWidth = $window.width(),\n windowHeight = $window.height(),\n viewPortRight = $window.scrollLeft() + windowWidth,\n viewportBottom = $window.scrollTop() + windowHeight,\n dropTop = offset.top + height,\n dropLeft = offset.left,\n enoughRoomBelow = dropTop + dropHeight <= viewportBottom,\n enoughRoomAbove = (offset.top - dropHeight) >= this.body().scrollTop(),\n dropWidth = $dropdown.outerWidth(false),\n enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,\n aboveNow = $dropdown.hasClass(\"select2-drop-above\"),\n bodyOffset,\n above,\n changeDirection,\n css,\n resultsListNode;\n\n // always prefer the current above/below alignment, unless there is not enough room\n if (aboveNow) {\n above = true;\n if (!enoughRoomAbove && enoughRoomBelow) {\n changeDirection = true;\n above = false;\n }\n } else {\n above = false;\n if (!enoughRoomBelow && enoughRoomAbove) {\n changeDirection = true;\n above = true;\n }\n }\n\n //if we are changing direction we need to get positions when dropdown is hidden;\n if (changeDirection) {\n $dropdown.hide();\n offset = this.container.offset();\n height = this.container.outerHeight(false);\n width = this.container.outerWidth(false);\n dropHeight = $dropdown.outerHeight(false);\n viewPortRight = $window.scrollLeft() + windowWidth;\n viewportBottom = $window.scrollTop() + windowHeight;\n dropTop = offset.top + height;\n dropLeft = offset.left;\n dropWidth = $dropdown.outerWidth(false);\n enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;\n $dropdown.show();\n }\n\n if (this.opts.dropdownAutoWidth) {\n resultsListNode = $('.select2-results', $dropdown)[0];\n $dropdown.addClass('select2-drop-auto-width');\n $dropdown.css('width', '');\n // Add scrollbar width to dropdown if vertical scrollbar is present\n dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);\n dropWidth > width ? width = dropWidth : dropWidth = width;\n enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;\n }\n else {\n this.container.removeClass('select2-drop-auto-width');\n }\n\n //console.log(\"below/ droptop:\", dropTop, \"dropHeight\", dropHeight, \"sum\", (dropTop+dropHeight)+\" viewport bottom\", viewportBottom, \"enough?\", enoughRoomBelow);\n //console.log(\"above/ offset.top\", offset.top, \"dropHeight\", dropHeight, \"top\", (offset.top-dropHeight), \"scrollTop\", this.body().scrollTop(), \"enough?\", enoughRoomAbove);\n\n // fix positioning when body has an offset and is not position: static\n if (this.body().css('position') !== 'static') {\n bodyOffset = this.body().offset();\n dropTop -= bodyOffset.top;\n dropLeft -= bodyOffset.left;\n }\n\n if (!enoughRoomOnRight) {\n dropLeft = offset.left + width - dropWidth;\n }\n\n css = {\n left: dropLeft,\n width: width\n };\n\n if (above) {\n css.bottom = windowHeight - offset.top;\n css.top = 'auto';\n this.container.addClass(\"select2-drop-above\");\n $dropdown.addClass(\"select2-drop-above\");\n }\n else {\n css.top = dropTop;\n css.bottom = 'auto';\n this.container.removeClass(\"select2-drop-above\");\n $dropdown.removeClass(\"select2-drop-above\");\n }\n css = $.extend(css, evaluate(this.opts.dropdownCss));\n\n $dropdown.css(css);\n },\n\n // abstract\n shouldOpen: function() {\n var event;\n\n if (this.opened()) return false;\n\n if (this._enabled === false || this._readonly === true) return false;\n\n event = $.Event(\"select2-opening\");\n this.opts.element.trigger(event);\n return !event.isDefaultPrevented();\n },\n\n // abstract\n clearDropdownAlignmentPreference: function() {\n // clear the classes used to figure out the preference of where the dropdown should be opened\n this.container.removeClass(\"select2-drop-above\");\n this.dropdown.removeClass(\"select2-drop-above\");\n },\n\n /**\n * Opens the dropdown\n *\n * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,\n * the dropdown is already open, or if the 'open' event listener on the element called preventDefault().\n */\n // abstract\n open: function () {\n\n if (!this.shouldOpen()) return false;\n\n this.opening();\n\n return true;\n },\n\n /**\n * Performs the opening of the dropdown\n */\n // abstract\n opening: function() {\n var cid = this.containerId,\n scroll = \"scroll.\" + cid,\n resize = \"resize.\"+cid,\n orient = \"orientationchange.\"+cid,\n mask;\n\n this.container.addClass(\"select2-dropdown-open\").addClass(\"select2-container-active\");\n\n this.clearDropdownAlignmentPreference();\n\n if(this.dropdown[0] !== this.body().children().last()[0]) {\n this.dropdown.detach().appendTo(this.body());\n }\n\n // create the dropdown mask if doesnt already exist\n mask = $(\"#select2-drop-mask\");\n if (mask.length == 0) {\n mask = $(document.createElement(\"div\"));\n mask.attr(\"id\",\"select2-drop-mask\").attr(\"class\",\"select2-drop-mask\");\n mask.hide();\n mask.appendTo(this.body());\n mask.on(\"mousedown touchstart click\", function (e) {\n var dropdown = $(\"#select2-drop\"), self;\n if (dropdown.length > 0) {\n self=dropdown.data(\"select2\");\n if (self.opts.selectOnBlur) {\n self.selectHighlighted({noFocus: true});\n }\n self.close({focus:true});\n e.preventDefault();\n e.stopPropagation();\n }\n });\n }\n\n // ensure the mask is always right before the dropdown\n if (this.dropdown.prev()[0] !== mask[0]) {\n this.dropdown.before(mask);\n }\n\n // move the global id to the correct dropdown\n $(\"#select2-drop\").removeAttr(\"id\");\n this.dropdown.attr(\"id\", \"select2-drop\");\n\n // show the elements\n mask.show();\n\n this.positionDropdown();\n this.dropdown.show();\n this.positionDropdown();\n\n this.dropdown.addClass(\"select2-drop-active\");\n\n // attach listeners to events that can change the position of the container and thus require\n // the position of the dropdown to be updated as well so it does not come unglued from the container\n var that = this;\n this.container.parents().add(window).each(function () {\n $(this).on(resize+\" \"+scroll+\" \"+orient, function (e) {\n that.positionDropdown();\n });\n });\n\n\n },\n\n // abstract\n close: function () {\n if (!this.opened()) return;\n\n var cid = this.containerId,\n scroll = \"scroll.\" + cid,\n resize = \"resize.\"+cid,\n orient = \"orientationchange.\"+cid;\n\n // unbind event listeners\n this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); });\n\n this.clearDropdownAlignmentPreference();\n\n $(\"#select2-drop-mask\").hide();\n this.dropdown.removeAttr(\"id\"); // only the active dropdown has the select2-drop id\n this.dropdown.hide();\n this.container.removeClass(\"select2-dropdown-open\").removeClass(\"select2-container-active\");\n this.results.empty();\n\n\n this.clearSearch();\n this.search.removeClass(\"select2-active\");\n this.opts.element.trigger($.Event(\"select2-close\"));\n },\n\n /**\n * Opens control, sets input value, and updates results.\n */\n // abstract\n externalSearch: function (term) {\n this.open();\n this.search.val(term);\n this.updateResults(false);\n },\n\n // abstract\n clearSearch: function () {\n\n },\n\n //abstract\n getMaximumSelectionSize: function() {\n return evaluate(this.opts.maximumSelectionSize);\n },\n\n // abstract\n ensureHighlightVisible: function () {\n var results = this.results, children, index, child, hb, rb, y, more;\n\n index = this.highlight();\n\n if (index < 0) return;\n\n if (index == 0) {\n\n // if the first element is highlighted scroll all the way to the top,\n // that way any unselectable headers above it will also be scrolled\n // into view\n\n results.scrollTop(0);\n return;\n }\n\n children = this.findHighlightableChoices().find('.select2-result-label');\n\n child = $(children[index]);\n\n hb = child.offset().top + child.outerHeight(true);\n\n // if this is the last child lets also make sure select2-more-results is visible\n if (index === children.length - 1) {\n more = results.find(\"li.select2-more-results\");\n if (more.length > 0) {\n hb = more.offset().top + more.outerHeight(true);\n }\n }\n\n rb = results.offset().top + results.outerHeight(true);\n if (hb > rb) {\n results.scrollTop(results.scrollTop() + (hb - rb));\n }\n y = child.offset().top - results.offset().top;\n\n // make sure the top of the element is visible\n if (y < 0 && child.css('display') != 'none' ) {\n results.scrollTop(results.scrollTop() + y); // y is negative\n }\n },\n\n // abstract\n findHighlightableChoices: function() {\n return this.results.find(\".select2-result-selectable:not(.select2-disabled, .select2-selected)\");\n },\n\n // abstract\n moveHighlight: function (delta) {\n var choices = this.findHighlightableChoices(),\n index = this.highlight();\n\n while (index > -1 && index < choices.length) {\n index += delta;\n var choice = $(choices[index]);\n if (choice.hasClass(\"select2-result-selectable\") && !choice.hasClass(\"select2-disabled\") && !choice.hasClass(\"select2-selected\")) {\n this.highlight(index);\n break;\n }\n }\n },\n\n // abstract\n highlight: function (index) {\n var choices = this.findHighlightableChoices(),\n choice,\n data;\n\n if (arguments.length === 0) {\n return indexOf(choices.filter(\".select2-highlighted\")[0], choices.get());\n }\n\n if (index >= choices.length) index = choices.length - 1;\n if (index < 0) index = 0;\n\n this.removeHighlight();\n\n choice = $(choices[index]);\n choice.addClass(\"select2-highlighted\");\n\n this.ensureHighlightVisible();\n\n data = choice.data(\"select2-data\");\n if (data) {\n this.opts.element.trigger({ type: \"select2-highlight\", val: this.id(data), choice: data });\n }\n },\n\n removeHighlight: function() {\n this.results.find(\".select2-highlighted\").removeClass(\"select2-highlighted\");\n },\n\n // abstract\n countSelectableResults: function() {\n return this.findHighlightableChoices().length;\n },\n\n // abstract\n highlightUnderEvent: function (event) {\n var el = $(event.target).closest(\".select2-result-selectable\");\n if (el.length > 0 && !el.is(\".select2-highlighted\")) {\n var choices = this.findHighlightableChoices();\n this.highlight(choices.index(el));\n } else if (el.length == 0) {\n // if we are over an unselectable item remove all highlights\n this.removeHighlight();\n }\n },\n\n // abstract\n loadMoreIfNeeded: function () {\n var results = this.results,\n more = results.find(\"li.select2-more-results\"),\n below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible\n page = this.resultsPage + 1,\n self=this,\n term=this.search.val(),\n context=this.context;\n\n if (more.length === 0) return;\n below = more.offset().top - results.offset().top - results.height();\n\n if (below <= this.opts.loadMorePadding) {\n more.addClass(\"select2-active\");\n this.opts.query({\n element: this.opts.element,\n term: term,\n page: page,\n context: context,\n matcher: this.opts.matcher,\n callback: this.bind(function (data) {\n\n // ignore a response if the select2 has been closed before it was received\n if (!self.opened()) return;\n\n\n self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context});\n self.postprocessResults(data, false, false);\n\n if (data.more===true) {\n more.detach().appendTo(results).text(self.opts.formatLoadMore(page+1));\n window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);\n } else {\n more.remove();\n }\n self.positionDropdown();\n self.resultsPage = page;\n self.context = data.context;\n this.opts.element.trigger({ type: \"select2-loaded\", items: data });\n })});\n }\n },\n\n /**\n * Default tokenizer function which does nothing\n */\n tokenize: function() {\n\n },\n\n /**\n * @param initial whether or not this is the call to this method right after the dropdown has been opened\n */\n // abstract\n updateResults: function (initial) {\n var search = this.search,\n results = this.results,\n opts = this.opts,\n data,\n self = this,\n input,\n term = search.val(),\n lastTerm = $.data(this.container, \"select2-last-term\"),\n // sequence number used to drop out-of-order responses\n queryNumber;\n\n // prevent duplicate queries against the same term\n if (initial !== true && lastTerm && equal(term, lastTerm)) return;\n\n $.data(this.container, \"select2-last-term\", term);\n\n // if the search is currently hidden we do not alter the results\n if (initial !== true && (this.showSearchInput === false || !this.opened())) {\n return;\n }\n\n function postRender() {\n search.removeClass(\"select2-active\");\n self.positionDropdown();\n }\n\n function render(html) {\n results.html(html);\n postRender();\n }\n\n queryNumber = ++this.queryCount;\n\n var maxSelSize = this.getMaximumSelectionSize();\n if (maxSelSize >=1) {\n data = this.data();\n if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, \"formatSelectionTooBig\")) {\n render(\"<li class='select2-selection-limit'>\" + opts.formatSelectionTooBig(maxSelSize) + \"</li>\");\n return;\n }\n }\n\n if (search.val().length < opts.minimumInputLength) {\n if (checkFormatter(opts.formatInputTooShort, \"formatInputTooShort\")) {\n render(\"<li class='select2-no-results'>\" + opts.formatInputTooShort(search.val(), opts.minimumInputLength) + \"</li>\");\n } else {\n render(\"\");\n }\n if (initial && this.showSearch) this.showSearch(true);\n return;\n }\n\n if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {\n if (checkFormatter(opts.formatInputTooLong, \"formatInputTooLong\")) {\n render(\"<li class='select2-no-results'>\" + opts.formatInputTooLong(search.val(), opts.maximumInputLength) + \"</li>\");\n } else {\n render(\"\");\n }\n return;\n }\n\n if (opts.formatSearching && this.findHighlightableChoices().length === 0) {\n render(\"<li class='select2-searching'>\" + opts.formatSearching() + \"</li>\");\n }\n\n search.addClass(\"select2-active\");\n\n this.removeHighlight();\n\n // give the tokenizer a chance to pre-process the input\n input = this.tokenize();\n if (input != undefined && input != null) {\n search.val(input);\n }\n\n this.resultsPage = 1;\n\n opts.query({\n element: opts.element,\n term: search.val(),\n page: this.resultsPage,\n context: null,\n matcher: opts.matcher,\n callback: this.bind(function (data) {\n var def; // default choice\n\n // ignore old responses\n if (queryNumber != this.queryCount) {\n return;\n }\n\n // ignore a response if the select2 has been closed before it was received\n if (!this.opened()) {\n this.search.removeClass(\"select2-active\");\n return;\n }\n\n // save context, if any\n this.context = (data.context===undefined) ? null : data.context;\n // create a default choice and prepend it to the list\n if (this.opts.createSearchChoice && search.val() !== \"\") {\n def = this.opts.createSearchChoice.call(self, search.val(), data.results);\n if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {\n if ($(data.results).filter(\n function () {\n return equal(self.id(this), self.id(def));\n }).length === 0) {\n data.results.unshift(def);\n }\n }\n }\n\n if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, \"formatNoMatches\")) {\n render(\"<li class='select2-no-results'>\" + opts.formatNoMatches(search.val()) + \"</li>\");\n return;\n }\n\n results.empty();\n self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});\n\n if (data.more === true && checkFormatter(opts.formatLoadMore, \"formatLoadMore\")) {\n results.append(\"<li class='select2-more-results'>\" + self.opts.escapeMarkup(opts.formatLoadMore(this.resultsPage)) + \"</li>\");\n window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);\n }\n\n this.postprocessResults(data, initial);\n\n postRender();\n\n this.opts.element.trigger({ type: \"select2-loaded\", items: data });\n })});\n },\n\n // abstract\n cancel: function () {\n this.close();\n },\n\n // abstract\n blur: function () {\n // if selectOnBlur == true, select the currently highlighted option\n if (this.opts.selectOnBlur)\n this.selectHighlighted({noFocus: true});\n\n this.close();\n this.container.removeClass(\"select2-container-active\");\n // synonymous to .is(':focus'), which is available in jquery >= 1.6\n if (this.search[0] === document.activeElement) { this.search.blur(); }\n this.clearSearch();\n this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n },\n\n // abstract\n focusSearch: function () {\n focus(this.search);\n },\n\n // abstract\n selectHighlighted: function (options) {\n var index=this.highlight(),\n highlighted=this.results.find(\".select2-highlighted\"),\n data = highlighted.closest('.select2-result').data(\"select2-data\");\n\n if (data) {\n this.highlight(index);\n this.onSelect(data, options);\n } else if (options && options.noFocus) {\n this.close();\n }\n },\n\n // abstract\n getPlaceholder: function () {\n var placeholderOption;\n return this.opts.element.attr(\"placeholder\") ||\n this.opts.element.attr(\"data-placeholder\") || // jquery 1.4 compat\n this.opts.element.data(\"placeholder\") ||\n this.opts.placeholder ||\n ((placeholderOption = this.getPlaceholderOption()) !== undefined ? placeholderOption.text() : undefined);\n },\n\n // abstract\n getPlaceholderOption: function() {\n if (this.select) {\n var firstOption = this.select.children('option').first();\n if (this.opts.placeholderOption !== undefined ) {\n //Determine the placeholder option based on the specified placeholderOption setting\n return (this.opts.placeholderOption === \"first\" && firstOption) ||\n (typeof this.opts.placeholderOption === \"function\" && this.opts.placeholderOption(this.select));\n } else if (firstOption.text() === \"\" && firstOption.val() === \"\") {\n //No explicit placeholder option specified, use the first if it's blank\n return firstOption;\n }\n }\n },\n\n /**\n * Get the desired width for the container element. This is\n * derived first from option `width` passed to select2, then\n * the inline 'style' on the original element, and finally\n * falls back to the jQuery calculated element width.\n */\n // abstract\n initContainerWidth: function () {\n function resolveContainerWidth() {\n var style, attrs, matches, i, l, attr;\n\n if (this.opts.width === \"off\") {\n return null;\n } else if (this.opts.width === \"element\"){\n return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';\n } else if (this.opts.width === \"copy\" || this.opts.width === \"resolve\") {\n // check if there is inline style on the element that contains width\n style = this.opts.element.attr('style');\n if (style !== undefined) {\n attrs = style.split(';');\n for (i = 0, l = attrs.length; i < l; i = i + 1) {\n attr = attrs[i].replace(/\\s/g, '');\n matches = attr.match(/^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);\n if (matches !== null && matches.length >= 1)\n return matches[1];\n }\n }\n\n if (this.opts.width === \"resolve\") {\n // next check if css('width') can resolve a width that is percent based, this is sometimes possible\n // when attached to input type=hidden or elements hidden via css\n style = this.opts.element.css('width');\n if (style.indexOf(\"%\") > 0) return style;\n\n // finally, fallback on the calculated width of the element\n return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');\n }\n\n return null;\n } else if ($.isFunction(this.opts.width)) {\n return this.opts.width();\n } else {\n return this.opts.width;\n }\n };\n\n var width = resolveContainerWidth.call(this);\n if (width !== null) {\n this.container.css(\"width\", width);\n }\n }\n });\n\n SingleSelect2 = clazz(AbstractSelect2, {\n\n // single\n\n createContainer: function () {\n var container = $(document.createElement(\"div\")).attr({\n \"class\": \"select2-container\"\n }).html([\n \"<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>\",\n \" <span class='select2-chosen'>&nbsp;</span><abbr class='select2-search-choice-close'></abbr>\",\n \" <span class='select2-arrow'><b></b></span>\",\n \"</a>\",\n \"<input class='select2-focusser select2-offscreen' type='text'/>\",\n \"<div class='select2-drop select2-display-none'>\",\n \" <div class='select2-search'>\",\n \" <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'/>\",\n \" </div>\",\n \" <ul class='select2-results'>\",\n \" </ul>\",\n \"</div>\"].join(\"\"));\n return container;\n },\n\n // single\n enableInterface: function() {\n if (this.parent.enableInterface.apply(this, arguments)) {\n this.focusser.prop(\"disabled\", !this.isInterfaceEnabled());\n }\n },\n\n // single\n opening: function () {\n var el, range, len;\n\n if (this.opts.minimumResultsForSearch >= 0) {\n this.showSearch(true);\n }\n\n this.parent.opening.apply(this, arguments);\n\n if (this.showSearchInput !== false) {\n // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range\n // all other browsers handle this just fine\n\n this.search.val(this.focusser.val());\n }\n this.search.focus();\n // move the cursor to the end after focussing, otherwise it will be at the beginning and\n // new text will appear *before* focusser.val()\n el = this.search.get(0);\n if (el.createTextRange) {\n range = el.createTextRange();\n range.collapse(false);\n range.select();\n } else if (el.setSelectionRange) {\n len = this.search.val().length;\n el.setSelectionRange(len, len);\n }\n\n // initializes search's value with nextSearchTerm (if defined by user)\n // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter\n if(this.search.val() === \"\") {\n if(this.nextSearchTerm != undefined){\n this.search.val(this.nextSearchTerm);\n this.search.select();\n }\n }\n\n this.focusser.prop(\"disabled\", true).val(\"\");\n this.updateResults(true);\n this.opts.element.trigger($.Event(\"select2-open\"));\n },\n\n // single\n close: function (params) {\n if (!this.opened()) return;\n this.parent.close.apply(this, arguments);\n\n params = params || {focus: true};\n this.focusser.removeAttr(\"disabled\");\n\n if (params.focus) {\n this.focusser.focus();\n }\n },\n\n // single\n focus: function () {\n if (this.opened()) {\n this.close();\n } else {\n this.focusser.removeAttr(\"disabled\");\n this.focusser.focus();\n }\n },\n\n // single\n isFocused: function () {\n return this.container.hasClass(\"select2-container-active\");\n },\n\n // single\n cancel: function () {\n this.parent.cancel.apply(this, arguments);\n this.focusser.removeAttr(\"disabled\");\n this.focusser.focus();\n },\n\n // single\n destroy: function() {\n $(\"label[for='\" + this.focusser.attr('id') + \"']\")\n .attr('for', this.opts.element.attr(\"id\"));\n this.parent.destroy.apply(this, arguments);\n },\n\n // single\n initContainer: function () {\n\n var selection,\n container = this.container,\n dropdown = this.dropdown;\n\n if (this.opts.minimumResultsForSearch < 0) {\n this.showSearch(false);\n } else {\n this.showSearch(true);\n }\n\n this.selection = selection = container.find(\".select2-choice\");\n\n this.focusser = container.find(\".select2-focusser\");\n\n // rewrite labels from original element to focusser\n this.focusser.attr(\"id\", \"s2id_autogen\"+nextUid());\n\n $(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\")\n .attr('for', this.focusser.attr('id'));\n\n this.focusser.attr(\"tabindex\", this.elementTabIndex);\n\n this.search.on(\"keydown\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n\n if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {\n // prevent the page from scrolling\n killEvent(e);\n return;\n }\n\n switch (e.which) {\n case KEY.UP:\n case KEY.DOWN:\n this.moveHighlight((e.which === KEY.UP) ? -1 : 1);\n killEvent(e);\n return;\n case KEY.ENTER:\n this.selectHighlighted();\n killEvent(e);\n return;\n case KEY.TAB:\n this.selectHighlighted({noFocus: true});\n return;\n case KEY.ESC:\n this.cancel(e);\n killEvent(e);\n return;\n }\n }));\n\n this.search.on(\"blur\", this.bind(function(e) {\n // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.\n // without this the search field loses focus which is annoying\n if (document.activeElement === this.body().get(0)) {\n window.setTimeout(this.bind(function() {\n this.search.focus();\n }), 0);\n }\n }));\n\n this.focusser.on(\"keydown\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n\n if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {\n return;\n }\n\n if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {\n killEvent(e);\n return;\n }\n\n if (e.which == KEY.DOWN || e.which == KEY.UP\n || (e.which == KEY.ENTER && this.opts.openOnEnter)) {\n\n if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return;\n\n this.open();\n killEvent(e);\n return;\n }\n\n if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {\n if (this.opts.allowClear) {\n this.clear();\n }\n killEvent(e);\n return;\n }\n }));\n\n\n installKeyUpChangeEvent(this.focusser);\n this.focusser.on(\"keyup-change input\", this.bind(function(e) {\n if (this.opts.minimumResultsForSearch >= 0) {\n e.stopPropagation();\n if (this.opened()) return;\n this.open();\n }\n }));\n\n selection.on(\"mousedown\", \"abbr\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n this.clear();\n killEventImmediately(e);\n this.close();\n this.selection.focus();\n }));\n\n selection.on(\"mousedown\", this.bind(function (e) {\n\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n\n if (this.opened()) {\n this.close();\n } else if (this.isInterfaceEnabled()) {\n this.open();\n }\n\n killEvent(e);\n }));\n\n dropdown.on(\"mousedown\", this.bind(function() { this.search.focus(); }));\n\n selection.on(\"focus\", this.bind(function(e) {\n killEvent(e);\n }));\n\n this.focusser.on(\"focus\", this.bind(function(){\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n this.container.addClass(\"select2-container-active\");\n })).on(\"blur\", this.bind(function() {\n if (!this.opened()) {\n this.container.removeClass(\"select2-container-active\");\n this.opts.element.trigger($.Event(\"select2-blur\"));\n }\n }));\n this.search.on(\"focus\", this.bind(function(){\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n this.container.addClass(\"select2-container-active\");\n }));\n\n this.initContainerWidth();\n this.opts.element.addClass(\"select2-offscreen\");\n this.setPlaceholder();\n\n },\n\n // single\n clear: function(triggerChange) {\n var data=this.selection.data(\"select2-data\");\n if (data) { // guard against queued quick consecutive clicks\n var evt = $.Event(\"select2-clearing\");\n this.opts.element.trigger(evt);\n if (evt.isDefaultPrevented()) {\n return;\n }\n var placeholderOption = this.getPlaceholderOption();\n this.opts.element.val(placeholderOption ? placeholderOption.val() : \"\");\n this.selection.find(\".select2-chosen\").empty();\n this.selection.removeData(\"select2-data\");\n this.setPlaceholder();\n\n if (triggerChange !== false){\n this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n this.triggerChange({removed:data});\n }\n }\n },\n\n /**\n * Sets selection based on source element's value\n */\n // single\n initSelection: function () {\n var selected;\n if (this.isPlaceholderOptionSelected()) {\n this.updateSelection(null);\n this.close();\n this.setPlaceholder();\n } else {\n var self = this;\n this.opts.initSelection.call(null, this.opts.element, function(selected){\n if (selected !== undefined && selected !== null) {\n self.updateSelection(selected);\n self.close();\n self.setPlaceholder();\n }\n });\n }\n },\n\n isPlaceholderOptionSelected: function() {\n var placeholderOption;\n if (!this.getPlaceholder()) return false; // no placeholder specified so no option should be considered\n return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop(\"selected\"))\n || (this.opts.element.val() === \"\")\n || (this.opts.element.val() === undefined)\n || (this.opts.element.val() === null);\n },\n\n // single\n prepareOpts: function () {\n var opts = this.parent.prepareOpts.apply(this, arguments),\n self=this;\n\n if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n // install the selection initializer\n opts.initSelection = function (element, callback) {\n var selected = element.find(\"option\").filter(function() { return this.selected });\n // a single select box always has a value, no need to null check 'selected'\n callback(self.optionToData(selected));\n };\n } else if (\"data\" in opts) {\n // install default initSelection when applied to hidden input and data is local\n opts.initSelection = opts.initSelection || function (element, callback) {\n var id = element.val();\n //search in data by id, storing the actual matching item\n var match = null;\n opts.query({\n matcher: function(term, text, el){\n var is_match = equal(id, opts.id(el));\n if (is_match) {\n match = el;\n }\n return is_match;\n },\n callback: !$.isFunction(callback) ? $.noop : function() {\n callback(match);\n }\n });\n };\n }\n\n return opts;\n },\n\n // single\n getPlaceholder: function() {\n // if a placeholder is specified on a single select without a valid placeholder option ignore it\n if (this.select) {\n if (this.getPlaceholderOption() === undefined) {\n return undefined;\n }\n }\n\n return this.parent.getPlaceholder.apply(this, arguments);\n },\n\n // single\n setPlaceholder: function () {\n var placeholder = this.getPlaceholder();\n\n if (this.isPlaceholderOptionSelected() && placeholder !== undefined) {\n\n // check for a placeholder option if attached to a select\n if (this.select && this.getPlaceholderOption() === undefined) return;\n\n this.selection.find(\".select2-chosen\").html(this.opts.escapeMarkup(placeholder));\n\n this.selection.addClass(\"select2-default\");\n\n this.container.removeClass(\"select2-allowclear\");\n }\n },\n\n // single\n postprocessResults: function (data, initial, noHighlightUpdate) {\n var selected = 0, self = this, showSearchInput = true;\n\n // find the selected element in the result list\n\n this.findHighlightableChoices().each2(function (i, elm) {\n if (equal(self.id(elm.data(\"select2-data\")), self.opts.element.val())) {\n selected = i;\n return false;\n }\n });\n\n // and highlight it\n if (noHighlightUpdate !== false) {\n if (initial === true && selected >= 0) {\n this.highlight(selected);\n } else {\n this.highlight(0);\n }\n }\n\n // hide the search box if this is the first we got the results and there are enough of them for search\n\n if (initial === true) {\n var min = this.opts.minimumResultsForSearch;\n if (min >= 0) {\n this.showSearch(countResults(data.results) >= min);\n }\n }\n },\n\n // single\n showSearch: function(showSearchInput) {\n if (this.showSearchInput === showSearchInput) return;\n\n this.showSearchInput = showSearchInput;\n\n this.dropdown.find(\".select2-search\").toggleClass(\"select2-search-hidden\", !showSearchInput);\n this.dropdown.find(\".select2-search\").toggleClass(\"select2-offscreen\", !showSearchInput);\n //add \"select2-with-searchbox\" to the container if search box is shown\n $(this.dropdown, this.container).toggleClass(\"select2-with-searchbox\", showSearchInput);\n },\n\n // single\n onSelect: function (data, options) {\n\n if (!this.triggerSelect(data)) { return; }\n\n var old = this.opts.element.val(),\n oldData = this.data();\n\n this.opts.element.val(this.id(data));\n this.updateSelection(data);\n\n this.opts.element.trigger({ type: \"select2-selected\", val: this.id(data), choice: data });\n\n this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());\n this.close();\n\n if (!options || !options.noFocus)\n this.focusser.focus();\n\n if (!equal(old, this.id(data))) { this.triggerChange({added:data,removed:oldData}); }\n },\n\n // single\n updateSelection: function (data) {\n\n var container=this.selection.find(\".select2-chosen\"), formatted, cssClass;\n\n this.selection.data(\"select2-data\", data);\n\n container.empty();\n if (data !== null) {\n formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup);\n }\n if (formatted !== undefined) {\n container.append(formatted);\n }\n cssClass=this.opts.formatSelectionCssClass(data, container);\n if (cssClass !== undefined) {\n container.addClass(cssClass);\n }\n\n this.selection.removeClass(\"select2-default\");\n\n if (this.opts.allowClear && this.getPlaceholder() !== undefined) {\n this.container.addClass(\"select2-allowclear\");\n }\n },\n\n // single\n val: function () {\n var val,\n triggerChange = false,\n data = null,\n self = this,\n oldData = this.data();\n\n if (arguments.length === 0) {\n return this.opts.element.val();\n }\n\n val = arguments[0];\n\n if (arguments.length > 1) {\n triggerChange = arguments[1];\n }\n\n if (this.select) {\n this.select\n .val(val)\n .find(\"option\").filter(function() { return this.selected }).each2(function (i, elm) {\n data = self.optionToData(elm);\n return false;\n });\n this.updateSelection(data);\n this.setPlaceholder();\n if (triggerChange) {\n this.triggerChange({added: data, removed:oldData});\n }\n } else {\n // val is an id. !val is true for [undefined,null,'',0] - 0 is legal\n if (!val && val !== 0) {\n this.clear(triggerChange);\n return;\n }\n if (this.opts.initSelection === undefined) {\n throw new Error(\"cannot call val() if initSelection() is not defined\");\n }\n this.opts.element.val(val);\n this.opts.initSelection(this.opts.element, function(data){\n self.opts.element.val(!data ? \"\" : self.id(data));\n self.updateSelection(data);\n self.setPlaceholder();\n if (triggerChange) {\n self.triggerChange({added: data, removed:oldData});\n }\n });\n }\n },\n\n // single\n clearSearch: function () {\n this.search.val(\"\");\n this.focusser.val(\"\");\n },\n\n // single\n data: function(value) {\n var data,\n triggerChange = false;\n\n if (arguments.length === 0) {\n data = this.selection.data(\"select2-data\");\n if (data == undefined) data = null;\n return data;\n } else {\n if (arguments.length > 1) {\n triggerChange = arguments[1];\n }\n if (!value) {\n this.clear(triggerChange);\n } else {\n data = this.data();\n this.opts.element.val(!value ? \"\" : this.id(value));\n this.updateSelection(value);\n if (triggerChange) {\n this.triggerChange({added: value, removed:data});\n }\n }\n }\n }\n });\n\n MultiSelect2 = clazz(AbstractSelect2, {\n\n // multi\n createContainer: function () {\n var container = $(document.createElement(\"div\")).attr({\n \"class\": \"select2-container select2-container-multi\"\n }).html([\n \"<ul class='select2-choices'>\",\n \" <li class='select2-search-field'>\",\n \" <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>\",\n \" </li>\",\n \"</ul>\",\n \"<div class='select2-drop select2-drop-multi select2-display-none'>\",\n \" <ul class='select2-results'>\",\n \" </ul>\",\n \"</div>\"].join(\"\"));\n return container;\n },\n\n // multi\n prepareOpts: function () {\n var opts = this.parent.prepareOpts.apply(this, arguments),\n self=this;\n\n // TODO validate placeholder is a string if specified\n\n if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n // install sthe selection initializer\n opts.initSelection = function (element, callback) {\n\n var data = [];\n\n element.find(\"option\").filter(function() { return this.selected }).each2(function (i, elm) {\n data.push(self.optionToData(elm));\n });\n callback(data);\n };\n } else if (\"data\" in opts) {\n // install default initSelection when applied to hidden input and data is local\n opts.initSelection = opts.initSelection || function (element, callback) {\n var ids = splitVal(element.val(), opts.separator);\n //search in data by array of ids, storing matching items in a list\n var matches = [];\n opts.query({\n matcher: function(term, text, el){\n var is_match = $.grep(ids, function(id) {\n return equal(id, opts.id(el));\n }).length;\n if (is_match) {\n matches.push(el);\n }\n return is_match;\n },\n callback: !$.isFunction(callback) ? $.noop : function() {\n // reorder matches based on the order they appear in the ids array because right now\n // they are in the order in which they appear in data array\n var ordered = [];\n for (var i = 0; i < ids.length; i++) {\n var id = ids[i];\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n if (equal(id, opts.id(match))) {\n ordered.push(match);\n matches.splice(j, 1);\n break;\n }\n }\n }\n callback(ordered);\n }\n });\n };\n }\n\n return opts;\n },\n\n // multi\n selectChoice: function (choice) {\n\n var selected = this.container.find(\".select2-search-choice-focus\");\n if (selected.length && choice && choice[0] == selected[0]) {\n\n } else {\n if (selected.length) {\n this.opts.element.trigger(\"choice-deselected\", selected);\n }\n selected.removeClass(\"select2-search-choice-focus\");\n if (choice && choice.length) {\n this.close();\n choice.addClass(\"select2-search-choice-focus\");\n this.opts.element.trigger(\"choice-selected\", choice);\n }\n }\n },\n\n // multi\n destroy: function() {\n $(\"label[for='\" + this.search.attr('id') + \"']\")\n .attr('for', this.opts.element.attr(\"id\"));\n this.parent.destroy.apply(this, arguments);\n },\n\n // multi\n initContainer: function () {\n\n var selector = \".select2-choices\", selection;\n\n this.searchContainer = this.container.find(\".select2-search-field\");\n this.selection = selection = this.container.find(selector);\n\n var _this = this;\n this.selection.on(\"click\", \".select2-search-choice:not(.select2-locked)\", function (e) {\n //killEvent(e);\n _this.search[0].focus();\n _this.selectChoice($(this));\n });\n\n // rewrite labels from original element to focusser\n this.search.attr(\"id\", \"s2id_autogen\"+nextUid());\n $(\"label[for='\" + this.opts.element.attr(\"id\") + \"']\")\n .attr('for', this.search.attr('id'));\n\n this.search.on(\"input paste\", this.bind(function() {\n if (!this.isInterfaceEnabled()) return;\n if (!this.opened()) {\n this.open();\n }\n }));\n\n this.search.attr(\"tabindex\", this.elementTabIndex);\n\n this.keydowns = 0;\n this.search.on(\"keydown\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n\n ++this.keydowns;\n var selected = selection.find(\".select2-search-choice-focus\");\n var prev = selected.prev(\".select2-search-choice:not(.select2-locked)\");\n var next = selected.next(\".select2-search-choice:not(.select2-locked)\");\n var pos = getCursorInfo(this.search);\n\n if (selected.length &&\n (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {\n var selectedChoice = selected;\n if (e.which == KEY.LEFT && prev.length) {\n selectedChoice = prev;\n }\n else if (e.which == KEY.RIGHT) {\n selectedChoice = next.length ? next : null;\n }\n else if (e.which === KEY.BACKSPACE) {\n this.unselect(selected.first());\n this.search.width(10);\n selectedChoice = prev.length ? prev : next;\n } else if (e.which == KEY.DELETE) {\n this.unselect(selected.first());\n this.search.width(10);\n selectedChoice = next.length ? next : null;\n } else if (e.which == KEY.ENTER) {\n selectedChoice = null;\n }\n\n this.selectChoice(selectedChoice);\n killEvent(e);\n if (!selectedChoice || !selectedChoice.length) {\n this.open();\n }\n return;\n } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)\n || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {\n\n this.selectChoice(selection.find(\".select2-search-choice:not(.select2-locked)\").last());\n killEvent(e);\n return;\n } else {\n this.selectChoice(null);\n }\n\n if (this.opened()) {\n switch (e.which) {\n case KEY.UP:\n case KEY.DOWN:\n this.moveHighlight((e.which === KEY.UP) ? -1 : 1);\n killEvent(e);\n return;\n case KEY.ENTER:\n this.selectHighlighted();\n killEvent(e);\n return;\n case KEY.TAB:\n this.selectHighlighted({noFocus:true});\n this.close();\n return;\n case KEY.ESC:\n this.cancel(e);\n killEvent(e);\n return;\n }\n }\n\n if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)\n || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {\n return;\n }\n\n if (e.which === KEY.ENTER) {\n if (this.opts.openOnEnter === false) {\n return;\n } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {\n return;\n }\n }\n\n this.open();\n\n if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {\n // prevent the page from scrolling\n killEvent(e);\n }\n\n if (e.which === KEY.ENTER) {\n // prevent form from being submitted\n killEvent(e);\n }\n\n }));\n\n this.search.on(\"keyup\", this.bind(function (e) {\n this.keydowns = 0;\n this.resizeSearch();\n })\n );\n\n this.search.on(\"blur\", this.bind(function(e) {\n this.container.removeClass(\"select2-container-active\");\n this.search.removeClass(\"select2-focused\");\n this.selectChoice(null);\n if (!this.opened()) this.clearSearch();\n e.stopImmediatePropagation();\n this.opts.element.trigger($.Event(\"select2-blur\"));\n }));\n\n this.container.on(\"click\", selector, this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n if ($(e.target).closest(\".select2-search-choice\").length > 0) {\n // clicked inside a select2 search choice, do not open\n return;\n }\n this.selectChoice(null);\n this.clearPlaceholder();\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n this.open();\n this.focusSearch();\n e.preventDefault();\n }));\n\n this.container.on(\"focus\", selector, this.bind(function () {\n if (!this.isInterfaceEnabled()) return;\n if (!this.container.hasClass(\"select2-container-active\")) {\n this.opts.element.trigger($.Event(\"select2-focus\"));\n }\n this.container.addClass(\"select2-container-active\");\n this.dropdown.addClass(\"select2-drop-active\");\n this.clearPlaceholder();\n }));\n\n this.initContainerWidth();\n this.opts.element.addClass(\"select2-offscreen\");\n\n // set the placeholder if necessary\n this.clearSearch();\n },\n\n // multi\n enableInterface: function() {\n if (this.parent.enableInterface.apply(this, arguments)) {\n this.search.prop(\"disabled\", !this.isInterfaceEnabled());\n }\n },\n\n // multi\n initSelection: function () {\n var data;\n if (this.opts.element.val() === \"\" && this.opts.element.text() === \"\") {\n this.updateSelection([]);\n this.close();\n // set the placeholder if necessary\n this.clearSearch();\n }\n if (this.select || this.opts.element.val() !== \"\") {\n var self = this;\n this.opts.initSelection.call(null, this.opts.element, function(data){\n if (data !== undefined && data !== null) {\n self.updateSelection(data);\n self.close();\n // set the placeholder if necessary\n self.clearSearch();\n }\n });\n }\n },\n\n // multi\n clearSearch: function () {\n var placeholder = this.getPlaceholder(),\n maxWidth = this.getMaxSearchWidth();\n\n if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass(\"select2-focused\") === false) {\n this.search.val(placeholder).addClass(\"select2-default\");\n // stretch the search box to full width of the container so as much of the placeholder is visible as possible\n // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944\n this.search.width(maxWidth > 0 ? maxWidth : this.container.css(\"width\"));\n } else {\n this.search.val(\"\").width(10);\n }\n },\n\n // multi\n clearPlaceholder: function () {\n if (this.search.hasClass(\"select2-default\")) {\n this.search.val(\"\").removeClass(\"select2-default\");\n }\n },\n\n // multi\n opening: function () {\n this.clearPlaceholder(); // should be done before super so placeholder is not used to search\n this.resizeSearch();\n\n this.parent.opening.apply(this, arguments);\n\n this.focusSearch();\n\n this.updateResults(true);\n this.search.focus();\n this.opts.element.trigger($.Event(\"select2-open\"));\n },\n\n // multi\n close: function () {\n if (!this.opened()) return;\n this.parent.close.apply(this, arguments);\n },\n\n // multi\n focus: function () {\n this.close();\n this.search.focus();\n },\n\n // multi\n isFocused: function () {\n return this.search.hasClass(\"select2-focused\");\n },\n\n // multi\n updateSelection: function (data) {\n var ids = [], filtered = [], self = this;\n\n // filter out duplicates\n $(data).each(function () {\n if (indexOf(self.id(this), ids) < 0) {\n ids.push(self.id(this));\n filtered.push(this);\n }\n });\n data = filtered;\n\n this.selection.find(\".select2-search-choice\").remove();\n $(data).each(function () {\n self.addSelectedChoice(this);\n });\n self.postprocessResults();\n },\n\n // multi\n tokenize: function() {\n var input = this.search.val();\n input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts);\n if (input != null && input != undefined) {\n this.search.val(input);\n if (input.length > 0) {\n this.open();\n }\n }\n\n },\n\n // multi\n onSelect: function (data, options) {\n\n if (!this.triggerSelect(data)) { return; }\n\n this.addSelectedChoice(data);\n\n this.opts.element.trigger({ type: \"selected\", val: this.id(data), choice: data });\n\n if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true);\n\n if (this.opts.closeOnSelect) {\n this.close();\n this.search.width(10);\n } else {\n if (this.countSelectableResults()>0) {\n this.search.width(10);\n this.resizeSearch();\n if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {\n // if we reached max selection size repaint the results so choices\n // are replaced with the max selection reached message\n this.updateResults(true);\n }\n this.positionDropdown();\n } else {\n // if nothing left to select close\n this.close();\n this.search.width(10);\n }\n }\n\n // since its not possible to select an element that has already been\n // added we do not need to check if this is a new element before firing change\n this.triggerChange({ added: data });\n\n if (!options || !options.noFocus)\n this.focusSearch();\n },\n\n // multi\n cancel: function () {\n this.close();\n this.focusSearch();\n },\n\n addSelectedChoice: function (data) {\n var enableChoice = !data.locked,\n enabledItem = $(\n \"<li class='select2-search-choice'>\" +\n \" <div></div>\" +\n \" <a href='#' class='select2-search-choice-close' tabindex='-1'></a>\" +\n \"</li>\"),\n disabledItem = $(\n \"<li class='select2-search-choice select2-locked'>\" +\n \"<div></div>\" +\n \"</li>\");\n var choice = enableChoice ? enabledItem : disabledItem,\n id = this.id(data),\n val = this.getVal(),\n formatted,\n cssClass;\n\n formatted=this.opts.formatSelection(data, choice.find(\"div\"), this.opts.escapeMarkup);\n if (formatted != undefined) {\n choice.find(\"div\").replaceWith(\"<div>\"+formatted+\"</div>\");\n }\n cssClass=this.opts.formatSelectionCssClass(data, choice.find(\"div\"));\n if (cssClass != undefined) {\n choice.addClass(cssClass);\n }\n\n if(enableChoice){\n choice.find(\".select2-search-choice-close\")\n .on(\"mousedown\", killEvent)\n .on(\"click dblclick\", this.bind(function (e) {\n if (!this.isInterfaceEnabled()) return;\n\n $(e.target).closest(\".select2-search-choice\").fadeOut('fast', this.bind(function(){\n this.unselect($(e.target));\n this.selection.find(\".select2-search-choice-focus\").removeClass(\"select2-search-choice-focus\");\n this.close();\n this.focusSearch();\n })).dequeue();\n killEvent(e);\n })).on(\"focus\", this.bind(function () {\n if (!this.isInterfaceEnabled()) return;\n this.container.addClass(\"select2-container-active\");\n this.dropdown.addClass(\"select2-drop-active\");\n }));\n }\n\n choice.data(\"select2-data\", data);\n choice.insertBefore(this.searchContainer);\n\n val.push(id);\n this.setVal(val);\n },\n\n // multi\n unselect: function (selected) {\n var val = this.getVal(),\n data,\n index;\n selected = selected.closest(\".select2-search-choice\");\n\n if (selected.length === 0) {\n throw \"Invalid argument: \" + selected + \". Must be .select2-search-choice\";\n }\n\n data = selected.data(\"select2-data\");\n\n if (!data) {\n // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued\n // and invoked on an element already removed\n return;\n }\n\n while((index = indexOf(this.id(data), val)) >= 0) {\n val.splice(index, 1);\n this.setVal(val);\n if (this.select) this.postprocessResults();\n }\n\n var evt = $.Event(\"select2-removing\");\n evt.val = this.id(data);\n evt.choice = data;\n this.opts.element.trigger(evt);\n\n if (evt.isDefaultPrevented()) {\n return;\n }\n\n selected.remove();\n\n this.opts.element.trigger({ type: \"select2-removed\", val: this.id(data), choice: data });\n this.triggerChange({ removed: data });\n },\n\n // multi\n postprocessResults: function (data, initial, noHighlightUpdate) {\n var val = this.getVal(),\n choices = this.results.find(\".select2-result\"),\n compound = this.results.find(\".select2-result-with-children\"),\n self = this;\n\n choices.each2(function (i, choice) {\n var id = self.id(choice.data(\"select2-data\"));\n if (indexOf(id, val) >= 0) {\n choice.addClass(\"select2-selected\");\n // mark all children of the selected parent as selected\n choice.find(\".select2-result-selectable\").addClass(\"select2-selected\");\n }\n });\n\n compound.each2(function(i, choice) {\n // hide an optgroup if it doesnt have any selectable children\n if (!choice.is('.select2-result-selectable')\n && choice.find(\".select2-result-selectable:not(.select2-selected)\").length === 0) {\n choice.addClass(\"select2-selected\");\n }\n });\n\n if (this.highlight() == -1 && noHighlightUpdate !== false){\n self.highlight(0);\n }\n\n //If all results are chosen render formatNoMAtches\n if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){\n if(!data || data && !data.more && this.results.find(\".select2-no-results\").length === 0) {\n if (checkFormatter(self.opts.formatNoMatches, \"formatNoMatches\")) {\n this.results.append(\"<li class='select2-no-results'>\" + self.opts.formatNoMatches(self.search.val()) + \"</li>\");\n }\n }\n }\n\n },\n\n // multi\n getMaxSearchWidth: function() {\n return this.selection.width() - getSideBorderPadding(this.search);\n },\n\n // multi\n resizeSearch: function () {\n var minimumWidth, left, maxWidth, containerLeft, searchWidth,\n sideBorderPadding = getSideBorderPadding(this.search);\n\n minimumWidth = measureTextWidth(this.search) + 10;\n\n left = this.search.offset().left;\n\n maxWidth = this.selection.width();\n containerLeft = this.selection.offset().left;\n\n searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;\n\n if (searchWidth < minimumWidth) {\n searchWidth = maxWidth - sideBorderPadding;\n }\n\n if (searchWidth < 40) {\n searchWidth = maxWidth - sideBorderPadding;\n }\n\n if (searchWidth <= 0) {\n searchWidth = minimumWidth;\n }\n\n this.search.width(Math.floor(searchWidth));\n },\n\n // multi\n getVal: function () {\n var val;\n if (this.select) {\n val = this.select.val();\n return val === null ? [] : val;\n } else {\n val = this.opts.element.val();\n return splitVal(val, this.opts.separator);\n }\n },\n\n // multi\n setVal: function (val) {\n var unique;\n if (this.select) {\n this.select.val(val);\n } else {\n unique = [];\n // filter out duplicates\n $(val).each(function () {\n if (indexOf(this, unique) < 0) unique.push(this);\n });\n this.opts.element.val(unique.length === 0 ? \"\" : unique.join(this.opts.separator));\n }\n },\n\n // multi\n buildChangeDetails: function (old, current) {\n var current = current.slice(0),\n old = old.slice(0);\n\n // remove intersection from each array\n for (var i = 0; i < current.length; i++) {\n for (var j = 0; j < old.length; j++) {\n if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {\n current.splice(i, 1);\n if(i>0){\n i--;\n }\n old.splice(j, 1);\n j--;\n }\n }\n }\n\n return {added: current, removed: old};\n },\n\n\n // multi\n val: function (val, triggerChange) {\n var oldData, self=this;\n\n if (arguments.length === 0) {\n return this.getVal();\n }\n\n oldData=this.data();\n if (!oldData.length) oldData=[];\n\n // val is an id. !val is true for [undefined,null,'',0] - 0 is legal\n if (!val && val !== 0) {\n this.opts.element.val(\"\");\n this.updateSelection([]);\n this.clearSearch();\n if (triggerChange) {\n this.triggerChange({added: this.data(), removed: oldData});\n }\n return;\n }\n\n // val is a list of ids\n this.setVal(val);\n\n if (this.select) {\n this.opts.initSelection(this.select, this.bind(this.updateSelection));\n if (triggerChange) {\n this.triggerChange(this.buildChangeDetails(oldData, this.data()));\n }\n } else {\n if (this.opts.initSelection === undefined) {\n throw new Error(\"val() cannot be called if initSelection() is not defined\");\n }\n\n this.opts.initSelection(this.opts.element, function(data){\n var ids=$.map(data, self.id);\n self.setVal(ids);\n self.updateSelection(data);\n self.clearSearch();\n if (triggerChange) {\n self.triggerChange(self.buildChangeDetails(oldData, self.data()));\n }\n });\n }\n this.clearSearch();\n },\n\n // multi\n onSortStart: function() {\n if (this.select) {\n throw new Error(\"Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.\");\n }\n\n // collapse search field into 0 width so its container can be collapsed as well\n this.search.width(0);\n // hide the container\n this.searchContainer.hide();\n },\n\n // multi\n onSortEnd:function() {\n\n var val=[], self=this;\n\n // show search and move it to the end of the list\n this.searchContainer.show();\n // make sure the search container is the last item in the list\n this.searchContainer.appendTo(this.searchContainer.parent());\n // since we collapsed the width in dragStarted, we resize it here\n this.resizeSearch();\n\n // update selection\n this.selection.find(\".select2-search-choice\").each(function() {\n val.push(self.opts.id($(this).data(\"select2-data\")));\n });\n this.setVal(val);\n this.triggerChange();\n },\n\n // multi\n data: function(values, triggerChange) {\n var self=this, ids, old;\n if (arguments.length === 0) {\n return this.selection\n .find(\".select2-search-choice\")\n .map(function() { return $(this).data(\"select2-data\"); })\n .get();\n } else {\n old = this.data();\n if (!values) { values = []; }\n ids = $.map(values, function(e) { return self.opts.id(e); });\n this.setVal(ids);\n this.updateSelection(values);\n this.clearSearch();\n if (triggerChange) {\n this.triggerChange(this.buildChangeDetails(old, this.data()));\n }\n }\n }\n });\n\n $.fn.select2 = function () {\n\n var args = Array.prototype.slice.call(arguments, 0),\n opts,\n select2,\n method, value, multiple,\n allowedMethods = [\"val\", \"destroy\", \"opened\", \"open\", \"close\", \"focus\", \"isFocused\", \"container\", \"dropdown\", \"onSortStart\", \"onSortEnd\", \"enable\", \"disable\", \"readonly\", \"positionDropdown\", \"data\", \"search\"],\n valueMethods = [\"opened\", \"isFocused\", \"container\", \"dropdown\"],\n propertyMethods = [\"val\", \"data\"],\n methodsMap = { search: \"externalSearch\" };\n\n this.each(function () {\n if (args.length === 0 || typeof(args[0]) === \"object\") {\n opts = args.length === 0 ? {} : $.extend({}, args[0]);\n opts.element = $(this);\n\n if (opts.element.get(0).tagName.toLowerCase() === \"select\") {\n multiple = opts.element.prop(\"multiple\");\n } else {\n multiple = opts.multiple || false;\n if (\"tags\" in opts) {opts.multiple = multiple = true;}\n }\n\n select2 = multiple ? new MultiSelect2() : new SingleSelect2();\n select2.init(opts);\n } else if (typeof(args[0]) === \"string\") {\n\n if (indexOf(args[0], allowedMethods) < 0) {\n throw \"Unknown method: \" + args[0];\n }\n\n value = undefined;\n select2 = $(this).data(\"select2\");\n if (select2 === undefined) return;\n\n method=args[0];\n\n if (method === \"container\") {\n value = select2.container;\n } else if (method === \"dropdown\") {\n value = select2.dropdown;\n } else {\n if (methodsMap[method]) method = methodsMap[method];\n\n value = select2[method].apply(select2, args.slice(1));\n }\n if (indexOf(args[0], valueMethods) >= 0\n || (indexOf(args[0], propertyMethods) && args.length == 1)) {\n return false; // abort the iteration, ready to return first matched value\n }\n } else {\n throw \"Invalid arguments to select2 plugin: \" + args;\n }\n });\n return (value === undefined) ? this : value;\n };\n\n // plugin defaults, accessible to users\n $.fn.select2.defaults = {\n width: \"copy\",\n loadMorePadding: 0,\n closeOnSelect: true,\n openOnEnter: true,\n containerCss: {},\n dropdownCss: {},\n containerCssClass: \"\",\n dropdownCssClass: \"\",\n formatResult: function(result, container, query, escapeMarkup) {\n var markup=[];\n markMatch(result.text, query.term, markup, escapeMarkup);\n return markup.join(\"\");\n },\n formatSelection: function (data, container, escapeMarkup) {\n return data ? escapeMarkup(data.text) : undefined;\n },\n sortResults: function (results, container, query) {\n return results;\n },\n formatResultCssClass: function(data) {return undefined;},\n formatSelectionCssClass: function(data, container) {return undefined;},\n formatNoMatches: function () { return \"No matches found\"; },\n formatInputTooShort: function (input, min) { var n = min - input.length; return \"Please enter \" + n + \" more character\" + (n == 1? \"\" : \"s\"); },\n formatInputTooLong: function (input, max) { var n = input.length - max; return \"Please delete \" + n + \" character\" + (n == 1? \"\" : \"s\"); },\n formatSelectionTooBig: function (limit) { return \"You can only select \" + limit + \" item\" + (limit == 1 ? \"\" : \"s\"); },\n formatLoadMore: function (pageNumber) { return \"Loading more results...\"; },\n formatSearching: function () { return \"Searching...\"; },\n minimumResultsForSearch: 0,\n minimumInputLength: 0,\n maximumInputLength: null,\n maximumSelectionSize: 0,\n id: function (e) { return e.id; },\n matcher: function(term, text) {\n return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0;\n },\n separator: \",\",\n tokenSeparators: [],\n tokenizer: defaultTokenizer,\n escapeMarkup: defaultEscapeMarkup,\n blurOnChange: false,\n selectOnBlur: false,\n adaptContainerCssClass: function(c) { return c; },\n adaptDropdownCssClass: function(c) { return null; },\n nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; }\n };\n\n $.fn.select2.ajaxDefaults = {\n transport: $.ajax,\n params: {\n type: \"GET\",\n cache: false,\n dataType: \"json\"\n }\n };\n\n // exports\n window.Select2 = {\n query: {\n ajax: ajax,\n local: local,\n tags: tags\n }, util: {\n debounce: debounce,\n markMatch: markMatch,\n escapeMarkup: defaultEscapeMarkup,\n stripDiacritics: stripDiacritics\n }, \"class\": {\n \"abstract\": AbstractSelect2,\n \"single\": SingleSelect2,\n \"multi\": MultiSelect2\n }\n };\n\n}(jQuery));\n","import './styles/aui.pattern.forms';\nimport '@atlassian/aui/src/less/single-select.less';\nexport { default as SelectEl } from '@atlassian/aui/src/js/aui/select';\n","import $ from './jquery';\nimport './button';\nimport './spin';\nimport i18n from './i18n';\nimport Option from './internal/select/option';\nimport amdify from './internal/amdify';\nimport CustomEvent from './polyfills/custom-event';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport ProgressiveDataSet from './progressive-data-set';\nimport skate from './internal/skate';\nimport state from './internal/state';\nimport SuggestionModel from './internal/select/suggestion-model';\nimport SuggestionsModel from './internal/select/suggestions-model';\nimport SuggestionsView from './internal/select/suggestions-view';\nimport template from './internal/select/template';\nimport uniqueId from './unique-id';\nimport { INPUT_SUFFIX } from './internal/constants';\nimport {ifGone} from \"./internal/elements\";\n\nvar DESELECTED = -1;\nvar NO_HIGHLIGHT = -1;\nvar DEFAULT_SS_PDS_SIZE = 20;\n\nfunction decodeHtmlEntities(input) {\n var doc = new DOMParser().parseFromString(input, 'text/html');\n return doc.documentElement.textContent;\n}\n\nfunction clearElementImage(element) {\n element._input.removeAttribute('style');\n $(element._input).removeClass('aui-select-has-inline-image');\n}\n\nfunction deselect(element) {\n element._select.selectedIndex = DESELECTED;\n clearElementImage(element);\n}\n\nfunction hasResults(element) {\n return element._suggestionModel.getNumberOfResults();\n}\n\nfunction waitForAssistive (callback) {\n setTimeout(callback, 50);\n}\n\nfunction setBusyState (element) {\n if (!element._button.isBusy()) {\n element._button.busy();\n element._input.setAttribute('aria-busy', 'true');\n element._dropdown.setAttribute('aria-busy', 'true');\n }\n}\n\nfunction setIdleState (element) {\n element._button.idle();\n element._input.setAttribute('aria-busy', 'false');\n element._dropdown.setAttribute('aria-busy', 'false');\n}\n\nfunction matchPrefix (model, query) {\n var value = model.get('label').toLowerCase();\n return value.indexOf(query.toLowerCase()) === 0;\n}\n\nfunction hideDropdown (element) {\n element._suggestionsView.hide();\n element._input.setAttribute('aria-expanded', 'false');\n}\n\nfunction setInitialVisualState (element) {\n var initialHighlightedItem = hasResults(element) ? 0 : NO_HIGHLIGHT;\n\n element._suggestionModel.highlight(initialHighlightedItem);\n\n hideDropdown(element);\n}\n\nfunction setElementImage (element, imageSource) {\n $(element._input).addClass('aui-select-has-inline-image');\n element._input.setAttribute('style', 'background-image: url(' + imageSource + ')');\n}\n\nfunction suggest (element, autoHighlight, query) {\n element._autoHighlight = autoHighlight;\n\n if (query === undefined) {\n query = element._input.value;\n }\n\n element._progressiveDataSet.query(query);\n}\n\nfunction setInputImageToHighlightedSuggestion (element) {\n var imageSource = (element._suggestionModel.highlighted() && element._suggestionModel.highlighted().get('img-src'));\n if (imageSource) {\n setElementImage(element, imageSource);\n }\n}\n\nfunction setValueAndDisplayFromModel (element, model) {\n if (!model) {\n return;\n }\n\n var option = document.createElement('option');\n var select = element._select;\n var value = model.get('value') || model.get('label');\n var label = decodeHtmlEntities(model.getLabel());\n\n option.setAttribute('selected', '');\n option.setAttribute('value', value);\n option.textContent = label;\n\n // Sync element value.\n element._input.value = label;\n\n select.innerHTML = '';\n select.options.add(option);\n select.dispatchEvent(new CustomEvent('change', {bubbles: true}));\n}\n\nfunction clearValue (element) {\n element._input.value = '';\n element._select.innerHTML = '';\n}\n\nfunction selectHighlightedSuggestion (element) {\n setValueAndDisplayFromModel(element, element._suggestionModel.highlighted());\n setInputImageToHighlightedSuggestion(element);\n setInitialVisualState(element);\n}\n\nfunction convertOptionToModel (option) {\n return new SuggestionModel(option.serialize());\n}\n\nfunction convertOptionsToModels (element) {\n var models = [];\n\n for (var i = 0; i < element._datalist.children.length; i++) {\n var option = element._datalist.children[i];\n models.push(convertOptionToModel(option));\n }\n\n return models;\n}\n\nfunction clearAndSet (element, data) {\n element._suggestionModel.set();\n element._suggestionModel.set(data.results);\n}\n\nfunction getActiveId (select) {\n var active = select._dropdown.querySelector('.aui-select-active');\n return active && active.id;\n}\n\nfunction getIndexInResults (id, results) {\n var resultsIds = $.map(results, function (result) {\n return result.id;\n });\n\n return resultsIds.indexOf(id);\n}\n\nfunction createNewValueModel (element) {\n var option = new Option();\n option.setAttribute('value', element._input.value);\n var newValueSuggestionModel = convertOptionToModel(option);\n newValueSuggestionModel.set('new-value', true);\n return newValueSuggestionModel;\n}\n\nfunction initialiseProgressiveDataSet (element) {\n element._progressiveDataSet = new ProgressiveDataSet(convertOptionsToModels(element), {\n model: SuggestionModel,\n matcher: matchPrefix,\n queryEndpoint: element._queryEndpoint,\n maxResults: DEFAULT_SS_PDS_SIZE\n });\n\n element._isSync = !element._queryEndpoint;\n\n // Progressive data set should indicate whether or not it is busy when processing any async requests.\n // Check if there's any active queries left, if so: set spinner and state to busy, else set to idle and remove\n // the spinner.\n element._progressiveDataSet.on('activity', function () {\n if (element._progressiveDataSet.activeQueryCount && !element._isSync) {\n setBusyState(element);\n state(element).set('should-flag-new-suggestions', false);\n } else {\n setIdleState(element);\n state(element).set('should-flag-new-suggestions', true);\n }\n });\n\n // Progressive data set doesn't do anything if the query is empty so we\n // must manually convert all data list options into models.\n //\n // Otherwise progressive data set can do everything else for us:\n // 1. Sync matching\n // 2. Async fetching and matching\n /* eslint-disable complexity */\n element._progressiveDataSet.on('respond', function (data) {\n var optionToHighlight;\n\n // This means that a query was made before the input was cleared and\n // we should cancel the response.\n if (data.query && !element._input.value) {\n return;\n }\n\n if (state(element).get('should-cancel-response')) {\n if (!element._progressiveDataSet.activeQueryCount) {\n state(element).set('should-cancel-response', false);\n }\n\n return;\n }\n\n if (!data.query) {\n data.results = convertOptionsToModels(element);\n }\n\n var isInputExactMatch = getIndexInResults(element._input.value, data.results) !== -1;\n var isInputEmpty = !element._input.value;\n\n if (element.hasAttribute('can-create-values') && !isInputExactMatch && !isInputEmpty) {\n data.results.push(createNewValueModel(element));\n }\n\n if (!state(element).get('should-include-selected')) {\n var indexOfValueInResults = getIndexInResults(element.value, data.results);\n\n if (indexOfValueInResults >= 0) {\n data.results.splice(indexOfValueInResults, 1);\n }\n }\n\n clearAndSet(element, data);\n optionToHighlight = element._suggestionModel.highlighted() || data.results[0];\n\n if (element._autoHighlight) {\n element._suggestionModel.setHighlighted(optionToHighlight);\n waitForAssistive(function () {\n element._input.setAttribute('aria-activedescendant', getActiveId(element));\n });\n }\n\n element._input.setAttribute('aria-expanded', 'true');\n\n // If the response is async (append operation), has elements to append and has a highlighted element, we need to update the status.\n if (!element._isSync && element._suggestionsView.getActive() && state(element).get('should-flag-new-suggestions')) {\n element.querySelector('.aui-select-status').innerHTML = i18n.getText('aui.select.new.suggestions');\n }\n\n element._suggestionsView.show();\n\n if (element._autoHighlight) {\n waitForAssistive(function () {\n element._input.setAttribute('aria-activedescendant', getActiveId(element));\n });\n }\n });\n}\n\nfunction associateDropdownAndTrigger (element) {\n element._dropdown.id = element._listId;\n element.querySelector('button').setAttribute('aria-controls', element._listId);\n}\n\nfunction bindHighlightMouseover (element) {\n $(element._dropdown).on('mouseover', 'li', function (e) {\n if (hasResults(element)) {\n element._suggestionModel.highlight($(e.target).index());\n }\n });\n}\n\nexport function bindSelectMousedown (element) {\n let preventClosingContainerLayer = false;\n\n $(document).on('aui-close-layers-on-outer-click.single-select', e => {\n if (preventClosingContainerLayer) {\n e.preventDefault();\n preventClosingContainerLayer = false;\n }\n });\n\n $(element._dropdown).on('mousedown', 'li', function (e) {\n if (hasResults(element)) {\n element._suggestionModel.highlight($(e.target).index());\n selectHighlightedSuggestion(element);\n\n element._suggestionsView.hide();\n\n if ($(element).closest('.aui-layer').length > 0) {\n preventClosingContainerLayer = true;\n }\n\n element._input.removeAttribute('aria-activedescendant');\n } else {\n return false;\n }\n });\n}\n\nfunction initialiseValue (element) {\n var option = element._datalist.querySelector('aui-option[selected]');\n\n if (option) {\n setValueAndDisplayFromModel(element, convertOptionToModel(option));\n }\n}\n\nfunction isQueryInProgress (element) {\n return element._progressiveDataSet.activeQueryCount > 0;\n}\n\nfunction focusInHandler (element) {\n //if there is a selected value the single select should do an empty\n //search and return everything\n var searchValue = element.value ? '' : element._input.value;\n var isInputEmpty = element._input.value === '';\n state(element).set('should-include-selected', isInputEmpty);\n suggest(element, true, searchValue);\n}\n\nfunction cancelInProgressQueries (element) {\n if (isQueryInProgress(element)) {\n state(element).set('should-cancel-response', true);\n }\n}\n\nfunction getSelectedLabel(element) {\n if (element._select.selectedIndex >= 0) {\n return element._select.options[element._select.selectedIndex].textContent;\n }\n}\n\nfunction handleInvalidInputOnFocusOut (element) {\n var selectCanBeEmpty = !element.hasAttribute('no-empty-values');\n var selectionIsEmpty = !element._input.value;\n var selectionNotExact = element._input.value !== getSelectedLabel(element);\n var selectionNotValid = selectionIsEmpty || selectionNotExact;\n\n if (selectionNotValid) {\n if (selectCanBeEmpty) {\n deselect(element);\n } else {\n var selection = getSelectedLabel(element);\n if (typeof selection === 'undefined') {\n deselect(element);\n } else {\n element._input.value = selection;\n }\n }\n }\n}\n\nfunction handleHighlightOnFocusOut(element) {\n // Forget the highlighted suggestion.\n element._suggestionModel.highlight(NO_HIGHLIGHT);\n}\n\nfunction focusOutHandler (element) {\n cancelInProgressQueries(element);\n handleInvalidInputOnFocusOut(element);\n handleHighlightOnFocusOut(element);\n hideDropdown(element);\n}\n\nfunction handleTabOut (element) {\n var isSuggestionViewVisible = element._suggestionsView.isVisible();\n if (isSuggestionViewVisible) {\n selectHighlightedSuggestion(element);\n }\n}\n\nconst SelectEl = skate('aui-select', {\n template: template,\n created: function (element) {\n element._listId = uniqueId();\n element._input = element.querySelector('input');\n element._select = element.querySelector('select');\n element._dropdown = element.querySelector('.aui-popover');\n element._datalist = element.querySelector('datalist');\n element._button = element.querySelector('button');\n element._suggestionsView = new SuggestionsView(element._dropdown, element._input);\n element._suggestionModel = new SuggestionsModel();\n\n element._suggestionModel.onChange = function (oldSuggestions) {\n var suggestionsToAdd = [];\n\n element._suggestionModel._suggestions.forEach(function (newSuggestion) {\n var inArray = oldSuggestions.some(function (oldSuggestion) {\n return newSuggestion.id === oldSuggestion.id;\n });\n\n if (!inArray) {\n suggestionsToAdd.push(newSuggestion);\n }\n });\n\n element._suggestionsView.render(suggestionsToAdd, oldSuggestions.length, element._listId);\n };\n\n element._suggestionModel.onHighlightChange = function () {\n var active = element._suggestionModel.highlightedIndex();\n element._suggestionsView.setActive(active);\n element._input.setAttribute('aria-activedescendant', getActiveId(element));\n };\n },\n\n attached: function (element) {\n skate.init(element);\n initialiseProgressiveDataSet(element);\n associateDropdownAndTrigger(element);\n element._input.setAttribute('aria-controls', element._listId);\n element.setAttribute('tabindex', '-1');\n bindHighlightMouseover(element);\n bindSelectMousedown(element);\n initialiseValue(element);\n setInitialVisualState(element);\n setInputImageToHighlightedSuggestion(element);\n },\n\n detached: function (element) {\n $(document).off('aui-close-layers-on-outer-click');\n ifGone(element).then(() => {\n hideDropdown(element);\n element._suggestionsView.destroy();\n });\n },\n\n attributes: {\n id(element, data) {\n if (element.id) {\n element.querySelector('input').id = data.newValue + INPUT_SUFFIX;\n }\n },\n\n name(element, data) {\n element.querySelector('select').setAttribute('name', data.newValue);\n },\n\n placeholder(element, data) {\n element.querySelector('input').setAttribute('placeholder', data.newValue);\n },\n\n src(element, data) {\n element._queryEndpoint = data.newValue;\n }\n },\n\n events: {\n 'blur input': function (element) {\n focusOutHandler(element);\n },\n\n 'mousedown button': function (element) {\n if (document.activeElement === element._input && element._dropdown.getAttribute('aria-hidden') === 'false') {\n state(element).set('prevent-open-on-button-click', true);\n }\n },\n\n 'click input': function (element) {\n focusInHandler(element);\n },\n\n 'click button': function (element) {\n var data = state(element);\n\n if (data.get('prevent-open-on-button-click')) {\n data.set('prevent-open-on-button-click', false);\n } else {\n state(element).set('button-clicked-prevent-dropdown-hide', true);\n element.focus();\n }\n },\n\n input: function (element) {\n if (!element._input.value) {\n if (state(element).get('button-clicked-prevent-dropdown-hide')) {\n state(element).set('button-clicked-prevent-dropdown-hide', false);\n } else {\n hideDropdown(element);\n }\n } else {\n state(element).set('should-include-selected', true);\n suggest(element, true);\n }\n },\n\n 'keydown input': function (element, e) {\n var currentValue = element._input.value;\n var handled = false;\n\n if (e.keyCode === keyCode.ESCAPE) {\n cancelInProgressQueries(element);\n hideDropdown(element);\n return;\n }\n\n var isSuggestionViewVisible = element._suggestionsView.isVisible();\n\n if (isSuggestionViewVisible && hasResults(element)) {\n if (e.keyCode === keyCode.ENTER) {\n cancelInProgressQueries(element);\n selectHighlightedSuggestion(element);\n e.preventDefault();\n } else if (e.keyCode === keyCode.TAB) {\n handleTabOut(element);\n handled = true;\n } else if (e.keyCode === keyCode.UP) {\n element._suggestionModel.highlightPrevious();\n e.preventDefault();\n } else if (e.keyCode === keyCode.DOWN) {\n element._suggestionModel.highlightNext();\n e.preventDefault();\n }\n } else if (e.keyCode === keyCode.UP || e.keyCode === keyCode.DOWN) {\n focusInHandler(element);\n e.preventDefault();\n }\n\n handled = handled || e.defaultPrevented;\n setTimeout(function emulateCrossBrowserInputEvent () {\n if (element._input.value !== currentValue && !handled) {\n element.dispatchEvent(new CustomEvent('input', {bubbles: true}));\n }\n }, 0);\n }\n },\n\n prototype: {\n get value () {\n var selected = this._select.options[this._select.selectedIndex];\n return selected ? selected.value : '';\n },\n\n set value (value) {\n if (value === '') {\n clearValue(this);\n } else if (value) {\n var data = this._progressiveDataSet;\n var model = data.findWhere({ value }) || data.findWhere({ label: value });\n\n // Create a new value if allowed and the value doesn't exist.\n if (!model && this.hasAttribute('can-create-values')) {\n model = new SuggestionModel({value: value, label: value});\n }\n\n setValueAndDisplayFromModel(this, model);\n }\n return this;\n },\n\n get displayValue () {\n return this._input.value;\n },\n\n blur: function () {\n this._input.blur();\n focusOutHandler(this);\n return this;\n },\n\n focus: function () {\n this._input.focus();\n focusInHandler(this);\n return this;\n }\n }\n});\n\namdify('aui/select', SelectEl);\nglobalize('select', SelectEl);\nexport default SelectEl;\n","import skate from '../skate';\nimport escapeHtml from '../../escape-html';\n\nexport default skate('aui-option', {\n created: function (element) {\n Object.defineProperty(element, 'value', {\n get: function () {\n return element.getAttribute('value') || escapeHtml(this.textContent);\n },\n set: function (value) {\n element.setAttribute('value', value);\n }\n });\n },\n prototype: {\n serialize: function () {\n var json = {};\n if (this.hasAttribute('img-src')) {\n json['img-src'] = escapeHtml(this.getAttribute('img-src'));\n }\n json.value = this.value;\n json.label = escapeHtml(this.textContent);\n\n return json;\n }\n }\n});\n","import { bindAll, extend, first, isFunction, pluck } from 'underscore';\nimport Backbone from 'backbone';\nimport globalize from './internal/globalize';\n\n/**\n * @fileOverview describes a ProgressiveDataSet object.\n *\n * This object serves as part of a series of components to handle the various aspects of autocomplete controls.\n */\nvar ProgressiveDataSet = Backbone.Collection.extend({\n /**\n * A queryable set of data that optimises the speed at which responses can be provided.\n *\n * ProgressiveDataSet should be given a matcher function so that it may filter results for queries locally.\n *\n * ProgressiveDataSet can be given a remote query endpoint to fetch data from. Should a remote endpoint\n * be provided, ProgressiveDataSet will leverage both client-side matching and query caching to reduce\n * the number of times the remote source need be queried.\n *\n * @example\n * var source = new ProgressiveDataSet([], {\n * model: Backbone.Model.extend({ idAttribute: \"username\" }),\n * queryEndpoint: \"/jira/rest/latest/users\",\n * queryParamKey: \"username\",\n * matcher: function(model, query) {\n * return _.startsWith(model.get('username'), query);\n * }\n * });\n * source.on('respond', doStuffWithMatchingResults);\n * source.query('john');\n *\n * @property {String} value the latest query for which the ProgressiveDataSet is responding to.\n * @property {Number} activeQueryCount the number of queries being run remotely.\n */\n initialize: function (models, options) {\n options || (options = {});\n if (options.matcher) {\n this.matcher = options.matcher;\n }\n if (options.model) {\n this.model = options.model; // Fixed in backbone 0.9.2\n }\n this._idAttribute = (new this.model()).idAttribute;\n this._maxResults = options.maxResults || 5;\n this._queryData = options.queryData || {};\n this._queryParamKey = options.queryParamKey || 'q';\n this._queryEndpoint = options.queryEndpoint || '';\n this.value = null;\n this.queryCache = {};\n this.activeQueryCount = 0;\n bindAll(this, 'query', 'respond');\n },\n\n url: function () {\n return this._queryEndpoint;\n },\n\n /**\n * Sets and runs a query against the ProgressiveDataSet.\n *\n * Bind to ProgressiveDataSet's 'respond' event to receive the results that match the latest query.\n *\n * @param {String} query the query to run.\n */\n query: function (query) {\n var remote;\n var results;\n\n this.value = query;\n results = this.getFilteredResults(query);\n this.respond(query, results);\n\n if (!query || !this._queryEndpoint || this.hasQueryCache(query) || !this.shouldGetMoreResults(results)) {\n return;\n }\n\n remote = this.fetch(query);\n\n this.activeQueryCount++;\n this.trigger('activity', {activity: true});\n\n remote.always(() => {\n this.activeQueryCount--;\n this.trigger('activity', {activity: !!this.activeQueryCount});\n });\n\n remote.done((resp, succ, xhr) => {\n this.addQueryCache(query, resp, xhr);\n });\n remote.done(() => {\n query = this.value;\n results = this.getFilteredResults(query);\n this.respond(query, results);\n });\n },\n\n /**\n * Gets all the data that should be sent in a remote request for data.\n * @param {String} query the value of the query to be run.\n * @return {Object} the data to to be sent to the remote when querying it.\n * @private\n */\n getQueryData: function (query) {\n var params = isFunction(this._queryData) ? this._queryData(query) : this._queryData;\n var data = extend({}, params);\n data[this._queryParamKey] = query;\n return data;\n },\n\n /**\n * Get data from a remote source that matches the query, and add it to this ProgressiveDataSet's set.\n *\n * @param {String} query the value of the query to be run.\n * @return {jQuery.Deferred} a deferred object representing the remote request.\n */\n fetch: function (query) {\n var data = this.getQueryData(query);\n // {add: true} for Backbone <= 0.9.2\n // {update: true, remove: false} for Backbone >= 0.9.9\n var params = {add: true, update: true, remove: false, data: data};\n var remote = Backbone.Collection.prototype.fetch.call(this, params);\n return remote;\n },\n\n /**\n * Triggers the 'respond' event on this ProgressiveDataSet for the given query and associated results.\n *\n * @param {String} query the query that was run\n * @param {Array} results a set of results that matched the query.\n * @return {Array} the results.\n * @private\n */\n respond: function (query, results) {\n this.trigger('respond', {\n query: query,\n results: results\n });\n return results;\n },\n\n /**\n * A hook-point to define a function that tests whether a model matches a query or not.\n *\n * This will be called by getFilteredResults in order to generate the list of results for a query.\n *\n * (For you java folks, it's essentially a predicate.)\n *\n * @param {Backbone.Model} item a model of the data to check for a match in.\n * @param {String} query the value to test against the item.\n * @returns {Boolean} true if the model matches the query, otherwise false.\n * @function\n */\n matcher: function (item, query) { }, // eslint-disable-line no-unused-vars\n\n /**\n * Filters the set of data contained by the ProgressiveDataSet down to a smaller set of results.\n *\n * The set will only consist of Models that \"match\" the query -- i.e., only Models where\n * a call to ProgressiveDataSet#matcher returns true.\n *\n * @param query {String} the value that results should match (according to the matcher function)\n * @return {Array} A set of Backbone Models that match the query.\n */\n getFilteredResults: function (query) {\n var results = [];\n if (!query) {\n return results;\n }\n results = this.filter(function (item) {\n return !!this.matcher(item, query);\n }, this);\n if (this._maxResults) {\n results = first(results, this._maxResults);\n }\n return results;\n },\n\n /**\n * Store a response in the query cache for a given query.\n *\n * @param {String} query the value to cache a response for.\n * @param {Object} response the data of the response from the server.\n * @param {XMLHttpRequest} xhr\n * @private\n */\n addQueryCache: function (query, response, xhr) {\n var cache = this.queryCache;\n var results = this.parse(response, xhr);\n cache[query] = pluck(results, this._idAttribute);\n },\n\n /**\n * Check if there is a query cache entry for a given query.\n *\n * @param query the value to check in the cache\n * @return {Boolean} true if the cache contains a response for the query, false otherwise.\n */\n hasQueryCache: function (query) {\n return this.queryCache.hasOwnProperty(query);\n },\n\n /**\n * Get the query cache entry for a given query.\n *\n * @param query the value to check in the cache\n * @return {Object[]} an array of values representing the IDs of the models the response for this query contained.\n */\n findQueryCache: function (query) {\n return this.queryCache[query];\n },\n\n /**\n *\n * @param {Array} results the set of results we know about right now.\n * @return {Boolean} true if the ProgressiveDataSet should look for more results.\n * @private\n */\n shouldGetMoreResults: function (results) {\n return results.length < this._maxResults;\n },\n\n /**\n *\n * @note Changing this value will trigger ProgressiveDataSet#event:respond if there is a query.\n * @param {Number} number how many results should the ProgressiveDataSet aim to retrieve for a query.\n */\n setMaxResults: function (number) {\n this._maxResults = number;\n this.value && this.respond(this.value, this.getFilteredResults(this.value));\n }\n});\n\nglobalize('ProgressiveDataSet', ProgressiveDataSet);\n\nexport default ProgressiveDataSet;\n","import Backbone from 'backbone';\n\nexport default Backbone.Model.extend({\n idAttribute: 'label',\n getLabel: function () {\n return this.get('label') || this.get('value');\n }\n});\n","\nfunction SuggestionsModel () {\n this._suggestions = [];\n this._activeIndex = -1;\n}\n\nSuggestionsModel.prototype = {\n onChange: function () {},\n\n onHighlightChange: function () {},\n\n get: function (index) {\n return this._suggestions[index];\n },\n\n set: function (suggestions) {\n var oldSuggestions = this._suggestions;\n this._suggestions = suggestions || [];\n this.onChange(oldSuggestions);\n return this;\n },\n\n getNumberOfResults: function () {\n return this._suggestions.length;\n },\n\n setHighlighted: function (toHighlight) {\n if (toHighlight) {\n for (var i = 0; i < this._suggestions.length; i++) {\n if (this._suggestions[i].id === toHighlight.id) {\n this.highlight(i);\n }\n }\n }\n\n return this;\n },\n\n highlight: function (index) {\n this._activeIndex = index;\n this.onHighlightChange();\n return this;\n },\n\n highlightPrevious: function () {\n var current = this._activeIndex;\n var previousActiveIndex = (current === 0) ? current : (current - 1);\n this.highlight(previousActiveIndex);\n return this;\n },\n\n highlightNext: function () {\n var current = this._activeIndex;\n var nextActiveIndex = (current === this._suggestions.length - 1) ? current : (current + 1);\n this.highlight(nextActiveIndex);\n return this;\n },\n\n highlighted: function () {\n return this.get(this._activeIndex);\n },\n\n highlightedIndex: function () {\n return this._activeIndex;\n }\n};\n\nexport default SuggestionsModel;\n","import $ from '../../jquery';\nimport i18n from '../../i18n';\nimport Alignment from '../alignment';\nimport layer from '../../layer';\n\nfunction generateListItemID (listId, index) {\n return listId + '-' + index;\n}\n\n/**\n *\n * @param view SuggestionsView\n */\nfunction enableAlignment (view) {\n if (view.anchor && !view._auiAlignment) {\n view._auiAlignment = new Alignment(view.el, view.anchor, {\n flipContainer: 'scrollParent',\n positionFixed: false,\n preventOverflow: false\n });\n }\n\n if (view._auiAlignment) {\n view._auiAlignment.enable();\n view._auiAlignment.scheduleUpdate();\n }\n}\n\nfunction disableAlignment (view) {\n if (view._auiAlignment) {\n view._auiAlignment.disable();\n }\n}\n\nfunction destroyAlignment (view) {\n if (view._auiAlignment) {\n view._auiAlignment.destroy();\n delete view._auiAlignment;\n }\n}\n\nfunction matchWidth (view) {\n $(view.el).css('min-width', $(view.anchor).outerWidth());\n}\n\nfunction SuggestionsView (element, anchor) {\n this.el = element;\n this.anchor = anchor;\n}\n\nfunction clearActive (element) {\n $(element).find('.aui-select-active').removeClass('aui-select-active');\n}\n\nSuggestionsView.prototype = {\n render: function (suggestions, currentLength, listId) {\n this.currListId = listId;\n var html = '';\n\n // Do nothing if we have no new suggestions, otherwise append anything else we find.\n if (suggestions.length) {\n var i = currentLength;\n suggestions.forEach(function (sugg) {\n var label = sugg.getLabel();\n var imageSrc = sugg.get('img-src');\n var image = imageSrc ? `<img src=\"${imageSrc}\"/>` : '';\n var newValueText = sugg.get('new-value') ? ` (<em>${i18n.getText('aui.select.new.value')}</em>)` : '';\n html += `<li role=\"option\" class=\"aui-select-suggestion\" id=\"${generateListItemID(listId, i)}\">${image}${label}${newValueText}</li>`;\n i++;\n });\n\n // If the old suggestions were empty, a <li> of 'No suggestions' will be appended, we need to remove it\n if (currentLength) {\n this.el.querySelector('ul').innerHTML += html;\n } else {\n this.el.querySelector('ul').innerHTML = html;\n }\n } else if (!currentLength) {\n this.el.querySelector('ul').innerHTML = `<li role=\"option\" class=\"aui-select-no-suggestions\">${i18n.getText('aui.select.no.suggestions')}</li>`;\n }\n\n return this;\n },\n setActive: function (active) {\n clearActive(this.el);\n $(this.el).find('#' + generateListItemID(this.currListId, active)).addClass('aui-select-active');\n },\n getActive: function () {\n return this.el.querySelector('.aui-select-active');\n },\n show: function () {\n matchWidth(this);\n layer(this.el).show();\n enableAlignment(this);\n },\n hide: function () {\n clearActive(this.el);\n layer(this.el).hide();\n disableAlignment(this);\n },\n destroy: function () {\n this.hide();\n destroyAlignment(this);\n delete this.currListId;\n },\n isVisible: function () {\n return $(this.el).is(':visible');\n }\n};\n\nexport default SuggestionsView;\n","import template from 'skatejs-template-html';\n\nexport default template(`\n <input type=\"text\" class=\"text\" autocomplete=\"off\" role=\"combobox\" aria-autocomplete=\"list\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <select></select>\n <datalist>\n <content select=\"aui-option\"></content>\n </datalist>\n <button class=\"aui-button\" role=\"button\" tabindex=\"-1\" type=\"button\"></button>\n <div class=\"aui-popover\" role=\"listbox\" data-aui-alignment=\"bottom left\">\n <ul class=\"aui-optionlist\" role=\"presentation\"></ul>\n </div>\n <div class=\"aui-select-status assistive\" aria-live=\"polite\" role=\"status\"></div>\n`);\n","import './styles/aui.pattern.forms';\nimport './aui.component.spinner'; // for the async variant\nimport '@atlassian/aui/src/less/aui-toggle.less';\nexport { default as ToggleEl } from '@atlassian/aui/src/js/aui/toggle';\n","import './spin';\nimport './tooltip';\nimport $ from './jquery';\nimport { setBooleanAttribute } from './internal/attributes';\nimport { supportsFocusWithin } from './internal/browser';\nimport enforce from './internal/enforcer';\nimport keyCode from './key-code';\nimport skateTemplateHtml from 'skatejs-template-html';\nimport skate from './internal/skate';\nimport { INPUT_SUFFIX } from './internal/constants';\nimport CustomEvent from './polyfills/custom-event';\nimport SpinnerEl, {SIZE} from './spinner';\nimport I18n from './i18n'\n\nfunction fireChangeEvent(element) {\n if (element._canFireEventsNow) {\n element.dispatchEvent(new CustomEvent('change', { bubbles: true }));\n }\n}\n\nfunction getInput (element) {\n return element._input || (element._input = element.querySelector('input'));\n}\n\nfunction getSpinner (element) {\n return element._spinner || (element._spinner = new SpinnerEl());\n}\n\nfunction removedAttributeHandler(attributeName, element) {\n getInput(element).removeAttribute(attributeName);\n}\n\nfunction fallbackAttributeHandler(attributeName, element, change) {\n getInput(element).setAttribute(attributeName, change.newValue);\n}\n\nfunction getAttributeHandler (attributeName) {\n return {\n removed: removedAttributeHandler.bind(this, attributeName),\n fallback: fallbackAttributeHandler.bind(this, attributeName)\n };\n}\n\nconst formAttributeHandler = {\n removed: function (element) {\n removedAttributeHandler.call(this, 'form', element);\n element._formId = null;\n },\n fallback: function (element, change) {\n fallbackAttributeHandler.call(this, 'form', element, change);\n element._formId = change.newValue;\n }\n};\n\nvar idAttributeHandler = {\n removed: removedAttributeHandler.bind(this, 'id'),\n fallback: function (element, change) {\n const val = `${change.newValue}${INPUT_SUFFIX}`;\n getInput(element).setAttribute('id', val);\n }\n};\n\nvar valueAttributeHandler = {\n removed: function(element) {\n removedAttributeHandler.call(this, 'value', element);\n // Internet Explorer 11 has a bug where it doesn't clear out the previous value\n // when the attribute is removed.\n getInput(element).value = 'on';\n },\n fallback: function (element, change) {\n fallbackAttributeHandler.call(this, 'value', element, change);\n }\n};\n\nvar checkedAttributeHandler = {\n removed: function (element) {\n getInput(element).checked = false;\n fireChangeEvent(element);\n },\n fallback: function (element) {\n getInput(element).checked = true;\n fireChangeEvent(element);\n }\n};\n\nvar labelHandler = {\n removed: function (element) {\n getInput(element).removeAttribute('aria-label');\n },\n fallback: function (element, change) {\n getInput(element).setAttribute('aria-label', change.newValue);\n }\n};\n\nfunction clickHandler(element, e) {\n var input = getInput(element);\n if (!element.disabled && !element.busy && e.target !== input) {\n input.checked = !input.checked;\n }\n\n setBooleanAttribute(element, 'checked', input.checked);\n}\n\nfunction setDisabledForLabels(element, disabled) {\n if (!element.id) {\n return;\n }\n Array.prototype.forEach.call(document.querySelectorAll(`aui-label[for=\"${element.id}\"]`), function (el) {\n el.disabled = disabled;\n });\n}\n\n/**\n * Workaround to prevent pressing SPACE on busy state.\n * Preventing click event still makes the toggle flip and revert back.\n * So on CSS side, the input has \"pointer-events: none\" on busy state.\n */\nfunction bindEventsToInput(element) {\n getInput(element).addEventListener('keydown', function (e) {\n if (element.busy && e.keyCode === keyCode.SPACE) {\n e.preventDefault();\n }\n });\n // prevent toggle can be trigger through SPACE key on Firefox\n if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {\n getInput(element).addEventListener('click', function (e) {\n if (element.busy) {\n e.preventDefault();\n }\n });\n }\n // support focus-within manually when necessary\n if (!supportsFocusWithin()) {\n element._input.addEventListener('focus', () => element.classList.add('active'));\n element._input.addEventListener('blur', () => element.classList.remove('active'));\n }\n}\n\nconst ToggleEl = skate('aui-toggle', {\n // \"assistive\" class avoids direct interaction with the <input> element\n // (which prevents our click handler from being called),\n // while allow the element to still participate in the form.\n template: skateTemplateHtml(\n '<input type=\"checkbox\" class=\"aui-toggle-input assistive\">',\n '<span class=\"aui-toggle-view\">',\n '<span class=\"aui-toggle-tick aui-icon aui-icon-small aui-iconfont-success\"></span>',\n '<span class=\"aui-toggle-cross aui-icon aui-icon-small aui-iconfont-close-dialog\"></span>',\n '</span>'\n ),\n created: function (element) {\n getInput(element); // avoid using _input in attribute handlers\n getSpinner(element).setAttribute('size', SIZE.SMALL.name);\n\n $(getInput(element)).tooltip({\n title: function () {\n return this.checked ? this.getAttribute('tooltip-on') : this.getAttribute('tooltip-off');\n },\n gravity: 's',\n hoverable: false\n });\n bindEventsToInput(element);\n if (element.hasAttribute('checked')) {\n getInput(element).setAttribute('checked', '');\n }\n element._canFireEventsNow = true;\n },\n attached: function (element) {\n enforce(element).attributeExists('label');\n },\n events: {\n click: clickHandler\n },\n attributes: {\n id: idAttributeHandler,\n checked: checkedAttributeHandler,\n disabled: getAttributeHandler('disabled'),\n form: formAttributeHandler,\n name: getAttributeHandler('name'),\n value: valueAttributeHandler,\n 'tooltip-on': {\n value: I18n.getText('aui.toggle.on'),\n fallback: function (element, change) {\n getInput(element).setAttribute('tooltip-on', change.newValue || I18n.getText('aui.toggle.on'));\n }\n },\n 'tooltip-off': {\n value: I18n.getText('aui.toggle.off'),\n fallback: function (element, change) {\n getInput(element).setAttribute('tooltip-off', change.newValue || I18n.getText('aui.toggle.off'));\n }\n },\n label: labelHandler\n },\n prototype: {\n focus: function () {\n getInput(this).focus();\n return this;\n },\n get checked () {\n return getInput(this).checked;\n },\n set checked (value) {\n // Need to explicitly set the property on the checkbox because the\n // checkbox's property doesn't change with it's attribute after it\n // is clicked.\n if (getInput(this).checked !== value) {\n getInput(this).checked = value;\n setBooleanAttribute(this, 'checked', value);\n }\n },\n get disabled () {\n // AUI-4958 - this may be accessed by a jQuery event handler in response to\n // a DOMNodeInserted event being fired. In this scenario, the `template`\n // function has been called by skate, but the `created` callback has not.\n return getInput(this).disabled;\n },\n set disabled (value) {\n return setBooleanAttribute(this, 'disabled', value);\n },\n get form () {\n return document.getElementById(this._formId);\n },\n set form (value) {\n formAttributeHandler.fallback.call(this, this, { newValue: value || null });\n return this.form;\n },\n get name () {\n return getInput(this).name;\n },\n set name (value) {\n this.setAttribute('name', value);\n return value;\n },\n get value () {\n return getInput(this).value;\n },\n set value (value) { // Setting the value of an input to null sets it to empty string.\n let newVal = value === null ? '' : value;\n this.setAttribute('value', newVal);\n return newVal;\n },\n get busy () {\n return getInput(this).getAttribute('aria-busy') === 'true';\n },\n set busy (value) {\n const input = getInput(this);\n const spinner = getSpinner(this);\n\n setBooleanAttribute(this, 'busy', value);\n\n if (value) {\n input.setAttribute('aria-busy', 'true');\n input.indeterminate = true;\n if (this.checked) {\n input.classList.add('indeterminate-checked');\n $(this.querySelector('.aui-toggle-tick')).append(spinner);\n } else {\n $(this.querySelector('.aui-toggle-cross')).append(spinner);\n }\n } else {\n input.classList.remove('indeterminate-checked');\n input.indeterminate = false;\n input.removeAttribute('aria-busy');\n if (spinner.parentNode) {\n spinner.parentNode.removeChild(this._spinner);\n }\n }\n setDisabledForLabels(this, !!value);\n return value;\n }\n }\n});\n\nexport default ToggleEl;\n","import './styles/aui.page.reset';\nimport './styles/aui.page.typography';\nimport '@atlassian/aui/src/less/aui-experimental-progress-indicator.less';\nexport { default as progressBars, ProgressBarEl } from '@atlassian/aui/src/js/aui/progress-indicator';\n","import $ from './jquery';\nimport { defaults, isNumber, isFinite, isNaN } from 'underscore';\nimport skate from './internal/skate';\nimport { recomputeStyle } from './internal/animation';\nimport * as deprecate from './internal/deprecation';\nimport globalize from './internal/globalize';\n\nconst afterTransitionEvent = 'aui-progress-indicator-after-update';\nconst beforeTransitionEvent = 'aui-progress-indicator-before-update';\nconst transitionEnd = 'transitionend webkitTransitionEnd';\n\n\nfunction updateProgress($progressBar, $progressBarContainer, progressValue) {\n recomputeStyle($progressBar);\n $progressBar.css('width', progressValue * 100 + '%');\n $progressBarContainer.attr('data-value', progressValue);\n}\n\n\nfunction updateProgressElement(element, value) {\n if (typeof element === 'string') {\n let el = document.getElementById(element);\n if (el) {\n element = el;\n }\n }\n var $progressBarContainer = $(element).first();\n var $progressBar = $progressBarContainer.children('.aui-progress-indicator-value');\n var valueAttribute = $progressBarContainer.attr('data-value');\n var isIndeterminate = !valueAttribute;\n var currentProgress = parseFloat(valueAttribute) || 0;\n var isProgressNotChanged = valueAttribute && currentProgress === value;\n\n // AUI-4771 - check for mis-configured legacy progress bar HTML.\n if (isProgressNotChanged) {\n const currentDemonstratedValue = parseFloat($progressBar.get(0).style.width) || 0;\n isProgressNotChanged = currentProgress === (currentDemonstratedValue * 100);\n }\n\n if (isProgressNotChanged) {\n return;\n }\n\n //if the progress bar is indeterminate switch it.\n if (isIndeterminate) {\n $progressBar.css('width', 0);\n }\n\n transitionProgress($progressBar, $progressBarContainer, { currentProgress, value });\n\n return $progressBarContainer;\n}\n\nfunction transitionProgress(progressBar, progressBarContainer, { currentProgress, value }) {\n const $progressBar = $(progressBar);\n const $progressBarContainer = $(progressBarContainer);\n\n if (typeof value === 'number' && value <= 1 && value >= 0) {\n $progressBarContainer.trigger(beforeTransitionEvent, [currentProgress, value]);\n\n //trigger the event after transition end if supported, otherwise just trigger it\n $progressBar.one(transitionEnd, function () {\n $progressBarContainer.trigger(afterTransitionEvent, [currentProgress, value]);\n });\n updateProgress($progressBar, $progressBarContainer, value);\n }\n}\n\nfunction setIndeterminateOnProgressElement(element) {\n var $progressBarContainer = $(element).first();\n var $progressBar = $progressBarContainer.children('.aui-progress-indicator-value');\n\n $progressBarContainer.removeAttr('data-value');\n recomputeStyle($progressBarContainer);\n $progressBar.css('width', '');\n}\n\nconst DEFAULTS = {\n indeterminate: false,\n max: 1,\n val: 0,\n};\n\nfunction validNumeric(val) {\n return isNumber(val) && isFinite(val) && !isNaN(val);\n}\n\nfunction parseNumeric(val, defaultVal = 1) {\n const num = parseFloat(val);\n return validNumeric(num) ? num : Number(defaultVal);\n}\n\nfunction parseDecimal(num, precision = 1) {\n return Number(parseFloat(num).toFixed(precision));\n}\n\nfunction safeValue(val, max) {\n return Math.max(0, Math.min(val, max));\n}\n\nfunction safeMax(max) {\n return max > 0 ? max : DEFAULTS.max;\n}\n\n/**\n * @param data the state\n * @returns {{max: number, val: number, valAsFraction: number, valAsPercent: number}}\n */\nfunction calc(data) {\n const { val, max } = data;\n const parsedMax = safeMax(max);\n const parsedVal = safeValue(val, parsedMax);\n const valAsFraction = parseDecimal(parsedVal / parsedMax, 6);\n const valAsPercent = parseDecimal(valAsFraction * 100, 2);\n return {max: parsedMax, val: parsedVal, valAsFraction, valAsPercent};\n}\n\nfunction refresh(el) {\n const {val, valAsFraction, max} = calc(el._data);\n const bar = el.querySelector('.aui-progress-indicator');\n const oldVal = bar.getAttribute('data-value');\n\n if (el.indeterminate) {\n bar.removeAttribute('aria-valuenow');\n setIndeterminateOnProgressElement(bar);\n } else {\n bar.setAttribute('aria-valuenow', val);\n bar.setAttribute('aria-valuemax', max);\n transitionProgress(bar.querySelector('.aui-progress-indicator-value'), bar, {\n currentProgress: oldVal,\n value: valAsFraction\n });\n }\n}\n\nfunction setValue(el, data) {\n el._data.val = parseNumeric(data.newValue, data.oldValue || DEFAULTS.val);\n refresh(el);\n}\n\nfunction setMax(el, data) {\n el._data.max = parseNumeric(data.newValue, data.oldValue || DEFAULTS.max);\n refresh(el);\n}\n\nconst ProgressBarEl = skate('aui-progressbar', {\n template(el) {\n // Ensure max is set before value upon element creation and before rendering.\n // Why is this happening in 'template' and not 'created'? Because it gets called before 'created'!\n el._data.max = parseNumeric(el.getAttribute('max'), DEFAULTS.max);\n el._data.val = parseNumeric(el.getAttribute('value'), DEFAULTS.val);\n el._data.indeterminate = el.hasAttribute('indeterminate');\n const {val, max, valAsFraction, valAsPercent} = calc(el._data);\n\n const legacyValue = el._data.indeterminate ? '' : `data-value=\"${valAsFraction}\"`;\n\n el.innerHTML = `<div class=\"aui-progress-indicator\"\n ${legacyValue}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuenow=\"${val}\"\n aria-valuemax=\"${max}\"\n tabindex=\"0\"\n >\n <span class=\"aui-progress-indicator-value\" style=\"width: ${valAsPercent}%\"></span>\n </div>`;\n },\n\n attached(el) {\n refresh(el);\n },\n\n attributes: {\n indeterminate: {\n created: function(el) {\n el.indeterminate = true;\n },\n removed: function(el) {\n el.indeterminate = false;\n }\n },\n value: {\n value: DEFAULTS.val,\n fallback: function (el, data) {\n if (el._updating) {return false;}\n setValue(el, data);\n }\n },\n max: {\n value: DEFAULTS.max,\n fallback: function (el, data) {\n if (el._updating) {return false;}\n setMax(el, data);\n }\n },\n },\n\n prototype: {\n get _data() {\n return this.__data || (this._data = defaults({}, DEFAULTS));\n },\n set _data(d) {\n return this.__data = d;\n },\n get indeterminate() {\n return this._data.indeterminate;\n },\n set indeterminate(val) {\n this._data.indeterminate = !!val;\n refresh(this);\n },\n get value() {\n const { val } = calc(this._data);\n return val;\n },\n set value(num) {\n if (!validNumeric(num)) {return false;}\n const data = { newValue: parseDecimal(num, 6) };\n this._updating = true;\n // Reflect whatever value is set in the attributes.\n this.setAttribute('value', data.newValue);\n this._updating = false;\n setValue(this, data);\n },\n get max() {\n const { max } = calc(this._data);\n return max;\n },\n set max(num) {\n if (!validNumeric(num)) {return false;}\n const data = { newValue: parseDecimal(num, 6) };\n this._updating = true;\n // Reflect whatever value is set in the attributes.\n this.setAttribute('max', data.newValue);\n this._updating = false;\n setMax(this, data);\n },\n }\n});\n\nconst progressBars = {\n update: deprecate.fn(updateProgressElement, 'AJS.progressBars.update', {\n sinceVersion: '7.7.0',\n removeInVersion: '9.0.0',\n extraInfo: 'Use the <aui-progressbar> web component instead'\n }),\n setIndeterminate: deprecate.fn(setIndeterminateOnProgressElement, 'AJS.progressBars.setIndeterminate', {\n sinceVersion: '7.7.0',\n removeInVersion: '9.0.0',\n extraInfo: 'Use the <aui-progressbar> web component instead'\n })\n};\n\nglobalize('progressBars', progressBars);\n\nexport default progressBars;\nexport {\n ProgressBarEl\n};\n","import './styles/aui.pattern.table';\nimport '@atlassian/aui/src/less/aui-experimental-tables-sortable.less';\nimport '@atlassian/aui/src/js/aui/tables-sortable.js';\nexport {};\n","import $ from './jquery';\nimport '../../js-vendor/jquery/jquery.tablesorter';\nimport globalize from './internal/globalize';\n\nvar DEFAULT_SORT_OPTIONS = {\n sortMultiSortKey: '',\n headers: {},\n debug: false,\n tabIndex: false\n};\n\nfunction sortTable($table) {\n var options = DEFAULT_SORT_OPTIONS;\n $table.find('th').each(function (index, header) {\n\n var $header = $(header);\n options.headers[index] = {};\n if ($header.hasClass('aui-table-column-unsortable')) {\n options.headers[index].sorter = false;\n } else {\n $header.attr('tabindex', '0');\n $header.wrapInner(\"<span class='aui-table-header-content'/>\");\n if ($header.hasClass('aui-table-column-issue-key')) {\n options.headers[index].sorter = 'issue-key';\n }\n }\n });\n $table.tablesorter(options);\n}\n\nvar tablessortable = {\n setup: function () {\n\n /*\n This parser is used for issue keys in the format <PROJECT_KEY>-<ISSUE_NUMBER>, where <PROJECT_KEY> is a maximum\n 10 character string with characters(A-Z). Assumes that issue number is no larger than 999,999. e.g. not more\n than a million issues.\n This pads the issue key to allow for proper string sorting so that the project key is always 10 characters and the\n issue number is always 6 digits. e.g. it appends the project key '.' until it is 10 characters long and prepends 0\n so that the issue number is 6 digits long. e.g. CONF-102 == CONF......000102. This is to allow proper string sorting.\n */\n $.tablesorter.addParser({\n id: 'issue-key',\n is: function () {\n return false;\n },\n\n format: function (s) {\n var keyComponents = s.split('-');\n var projectKey = keyComponents[0];\n var issueNumber = keyComponents[1];\n\n var PROJECT_KEY_TEMPLATE = '..........';\n var ISSUE_NUMBER_TEMPLATE = '000000';\n var stringRepresentation = (projectKey + PROJECT_KEY_TEMPLATE).slice(0, PROJECT_KEY_TEMPLATE.length);\n stringRepresentation += (ISSUE_NUMBER_TEMPLATE + issueNumber).slice(-ISSUE_NUMBER_TEMPLATE.length);\n\n return stringRepresentation;\n },\n\n type: 'text'\n });\n\n /*\n Text parser that uses the data-sort-value attribute for sorting if it is set and data-sort-type is not set\n or set to 'text'.\n */\n $.tablesorter.addParser({\n id: 'textSortAttributeParser',\n is: function (nodeValue, table, node) {\n return node.hasAttribute('data-sort-value') && (!node.hasAttribute('data-sort-type') || node.getAttribute('data-sort-type') === 'text');\n },\n format: function (nodeValue, table, node) {\n return node.getAttribute('data-sort-value');\n },\n type: 'text'\n });\n\n /*\n Numeric parser that uses the data-sort-value attribute for sorting if it is set and data-sort-type is set\n to 'numeric'.\n */\n $.tablesorter.addParser({\n id: 'numericSortAttributeParser',\n is: function (nodeValue, table, node) {\n return node.getAttribute('data-sort-type') === 'numeric' && node.hasAttribute('data-sort-value');\n },\n format: function (nodeValue, table, node) {\n return node.getAttribute('data-sort-value');\n },\n type: 'numeric'\n });\n\n $('.aui-table-sortable').each(function () {\n sortTable($(this));\n });\n },\n\n setTableSortable: function ($table) {\n sortTable($table);\n }\n};\n\n$(tablessortable.setup);\n\nglobalize('tablessortable', tablessortable);\n\nexport default tablessortable;\n","/**!\n * TableSorter 2.17.7 - Client-side table sorting with ease!\n * @requires jQuery v1.2.6+\n *\n * Copyright (c) 2007 Christian Bach\n * Examples and docs at: http://tablesorter.com\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n * @type jQuery\n * @name tablesorter\n * @cat Plugins/Tablesorter\n * @author Christian Bach/christian.bach@polyester.se\n * @contributor Rob Garrison/https://github.com/Mottie/tablesorter\n */\n/*jshint browser:true, jquery:true, unused:false, expr: true */\n/*global console:false, alert:false */\n!(function($) {\n \"use strict\";\n $.extend({\n /*jshint supernew:true */\n tablesorter: new function() {\n\n var ts = this;\n\n ts.version = \"2.17.7\";\n\n ts.parsers = [];\n ts.widgets = [];\n ts.defaults = {\n\n // *** appearance\n theme : 'default', // adds tablesorter-{theme} to the table for styling\n widthFixed : false, // adds colgroup to fix widths of columns\n showProcessing : false, // show an indeterminate timer icon in the header when the table is sorted or filtered.\n\n headerTemplate : '{content}',// header layout template (HTML ok); {content} = innerHTML, {icon} = <i/> (class from cssIcon)\n onRenderTemplate : null, // function(index, template){ return template; }, (template is a string)\n onRenderHeader : null, // function(index){}, (nothing to return)\n\n // *** functionality\n cancelSelection : true, // prevent text selection in the header\n tabIndex : true, // add tabindex to header for keyboard accessibility\n dateFormat : 'mmddyyyy', // other options: \"ddmmyyy\" or \"yyyymmdd\"\n sortMultiSortKey : 'shiftKey', // key used to select additional columns\n sortResetKey : 'ctrlKey', // key used to remove sorting on a column\n usNumberFormat : true, // false for German \"1.234.567,89\" or French \"1 234 567,89\"\n delayInit : false, // if false, the parsed table contents will not update until the first sort\n serverSideSorting: false, // if true, server-side sorting should be performed because client-side sorting will be disabled, but the ui and events will still be used.\n\n // *** sort options\n headers : {}, // set sorter, string, empty, locked order, sortInitialOrder, filter, etc.\n ignoreCase : true, // ignore case while sorting\n sortForce : null, // column(s) first sorted; always applied\n sortList : [], // Initial sort order; applied initially; updated when manually sorted\n sortAppend : null, // column(s) sorted last; always applied\n sortStable : false, // when sorting two rows with exactly the same content, the original sort order is maintained\n\n sortInitialOrder : 'asc', // sort direction on first click\n sortLocaleCompare: false, // replace equivalent character (accented characters)\n sortReset : false, // third click on the header will reset column to default - unsorted\n sortRestart : false, // restart sort to \"sortInitialOrder\" when clicking on previously unsorted columns\n\n emptyTo : 'bottom', // sort empty cell to bottom, top, none, zero\n stringTo : 'max', // sort strings in numerical column as max, min, top, bottom, zero\n textExtraction : 'basic', // text extraction method/function - function(node, table, cellIndex){}\n textAttribute : 'data-text',// data-attribute that contains alternate cell text (used in textExtraction function)\n textSorter : null, // choose overall or specific column sorter function(a, b, direction, table, columnIndex) [alt: ts.sortText]\n numberSorter : null, // choose overall numeric sorter function(a, b, direction, maxColumnValue)\n\n // *** widget options\n widgets: [], // method to add widgets, e.g. widgets: ['zebra']\n widgetOptions : {\n zebra : [ 'even', 'odd' ] // zebra widget alternating row class names\n },\n initWidgets : true, // apply widgets on tablesorter initialization\n\n // *** callbacks\n initialized : null, // function(table){},\n\n // *** extra css class names\n tableClass : '',\n cssAsc : '',\n cssDesc : '',\n cssNone : '',\n cssHeader : '',\n cssHeaderRow : '',\n cssProcessing : '', // processing icon applied to header during sort/filter\n\n cssChildRow : 'tablesorter-childRow', // class name indiciating that a row is to be attached to the its parent\n cssIcon : 'tablesorter-icon', // if this class exists, a <i> will be added to the header automatically\n cssInfoBlock : 'tablesorter-infoOnly', // don't sort tbody with this class name (only one class name allowed here!)\n\n // *** selectors\n selectorHeaders : '> thead th, > thead td',\n selectorSort : 'th, td', // jQuery selector of content within selectorHeaders that is clickable to trigger a sort\n selectorRemove : '.remove-me',\n\n // *** advanced\n debug : false,\n\n // *** Internal variables\n headerList: [],\n empties: {},\n strings: {},\n parsers: []\n\n // deprecated; but retained for backwards compatibility\n // widgetZebra: { css: [\"even\", \"odd\"] }\n\n };\n\n // internal css classes - these will ALWAYS be added to\n // the table and MUST only contain one class name - fixes #381\n ts.css = {\n table : 'tablesorter',\n cssHasChild: 'tablesorter-hasChildRow',\n childRow : 'tablesorter-childRow',\n header : 'tablesorter-header',\n headerRow : 'tablesorter-headerRow',\n headerIn : 'tablesorter-header-inner',\n icon : 'tablesorter-icon',\n info : 'tablesorter-infoOnly',\n processing : 'tablesorter-processing',\n sortAsc : 'tablesorter-headerAsc',\n sortDesc : 'tablesorter-headerDesc',\n sortNone : 'tablesorter-headerUnSorted'\n };\n\n // labels applied to sortable headers for accessibility (aria) support\n ts.language = {\n sortAsc : 'Ascending sort applied, ',\n sortDesc : 'Descending sort applied, ',\n sortNone : 'No sort applied, ',\n nextAsc : 'activate to apply an ascending sort',\n nextDesc : 'activate to apply a descending sort',\n nextNone : 'activate to remove the sort'\n };\n\n /* debuging utils */\n function log() {\n var a = arguments[0],\n s = arguments.length > 1 ? Array.prototype.slice.call(arguments) : a;\n if (typeof console !== \"undefined\" && typeof console.log !== \"undefined\") {\n console[ /error/i.test(a) ? 'error' : /warn/i.test(a) ? 'warn' : 'log' ](s);\n } else {\n alert(s);\n }\n }\n\n function benchmark(s, d) {\n log(s + \" (\" + (new Date().getTime() - d.getTime()) + \"ms)\");\n }\n\n ts.log = log;\n ts.benchmark = benchmark;\n\n // $.isEmptyObject from jQuery v1.4\n function isEmptyObject(obj) {\n /*jshint forin: false */\n for (var name in obj) {\n return false;\n }\n return true;\n }\n\n function getElementText(table, node, cellIndex) {\n if (!node) { return \"\"; }\n var te, c = table.config,\n t = c.textExtraction || '',\n text = \"\";\n if (t === \"basic\") {\n // check data-attribute first\n text = $(node).attr(c.textAttribute) || node.textContent || node.innerText || $(node).text() || \"\";\n } else {\n if (typeof(t) === \"function\") {\n text = t(node, table, cellIndex);\n } else if (typeof (te = ts.getColumnData( table, t, cellIndex )) === 'function') {\n text = te(node, table, cellIndex);\n } else {\n // previous \"simple\" method\n text = node.textContent || node.innerText || $(node).text() || \"\";\n }\n }\n return $.trim(text);\n }\n\n function detectParserForColumn(table, rows, rowIndex, cellIndex) {\n var cur,\n i = ts.parsers.length,\n node = false,\n nodeValue = '',\n keepLooking = true;\n while (nodeValue === '' && keepLooking) {\n rowIndex++;\n if (rows[rowIndex]) {\n node = rows[rowIndex].cells[cellIndex];\n nodeValue = getElementText(table, node, cellIndex);\n if (table.config.debug) {\n log('Checking if value was empty on row ' + rowIndex + ', column: ' + cellIndex + ': \"' + nodeValue + '\"');\n }\n } else {\n keepLooking = false;\n }\n }\n while (--i >= 0) {\n cur = ts.parsers[i];\n // ignore the default text parser because it will always be true\n if (cur && cur.id !== 'text' && cur.is && cur.is(nodeValue, table, node)) {\n return cur;\n }\n }\n // nothing found, return the generic parser (text)\n return ts.getParserById('text');\n }\n\n function buildParserCache(table) {\n var c = table.config,\n // update table bodies in case we start with an empty table\n tb = c.$tbodies = c.$table.children('tbody:not(.' + c.cssInfoBlock + ')'),\n rows, list, l, i, h, ch, np, p, e, time,\n j = 0,\n parsersDebug = \"\",\n len = tb.length;\n if ( len === 0) {\n return c.debug ? log('Warning: *Empty table!* Not building a parser cache') : '';\n } else if (c.debug) {\n time = new Date();\n log('Detecting parsers for each column');\n }\n list = {\n extractors: [],\n parsers: []\n };\n while (j < len) {\n rows = tb[j].rows;\n if (rows[j]) {\n l = c.columns; // rows[j].cells.length;\n for (i = 0; i < l; i++) {\n h = c.$headers.filter('[data-column=\"' + i + '\"]:last');\n // get column indexed table cell\n ch = ts.getColumnData( table, c.headers, i );\n // get column parser/extractor\n e = ts.getParserById( ts.getData(h, ch, 'extractor') );\n p = ts.getParserById( ts.getData(h, ch, 'sorter') );\n np = ts.getData(h, ch, 'parser') === 'false';\n // empty cells behaviour - keeping emptyToBottom for backwards compatibility\n c.empties[i] = ts.getData(h, ch, 'empty') || c.emptyTo || (c.emptyToBottom ? 'bottom' : 'top' );\n // text strings behaviour in numerical sorts\n c.strings[i] = ts.getData(h, ch, 'string') || c.stringTo || 'max';\n if (np) {\n p = ts.getParserById('no-parser');\n }\n if (!e) {\n // For now, maybe detect someday\n e = false;\n }\n if (!p) {\n p = detectParserForColumn(table, rows, -1, i);\n }\n if (c.debug) {\n parsersDebug += \"column:\" + i + \"; extractor:\" + e.id + \"; parser:\" + p.id + \"; string:\" + c.strings[i] + '; empty: ' + c.empties[i] + \"\\n\";\n }\n list.parsers[i] = p;\n list.extractors[i] = e;\n }\n }\n j += (list.parsers.length) ? len : 1;\n }\n if (c.debug) {\n log(parsersDebug ? parsersDebug : \"No parsers detected\");\n benchmark(\"Completed detecting parsers\", time);\n }\n c.parsers = list.parsers;\n c.extractors = list.extractors;\n }\n\n /* utils */\n function buildCache(table) {\n var cc, t, tx, v, i, j, k, $row, rows, cols, cacheTime,\n totalRows, rowData, colMax,\n c = table.config,\n $tb = c.$table.children('tbody'),\n extractors = c.extractors,\n parsers = c.parsers;\n c.cache = {};\n c.totalRows = 0;\n // if no parsers found, return - it's an empty table.\n if (!parsers) {\n return c.debug ? log('Warning: *Empty table!* Not building a cache') : '';\n }\n if (c.debug) {\n cacheTime = new Date();\n }\n // processing icon\n if (c.showProcessing) {\n ts.isProcessing(table, true);\n }\n for (k = 0; k < $tb.length; k++) {\n colMax = []; // column max value per tbody\n cc = c.cache[k] = {\n normalized: [] // array of normalized row data; last entry contains \"rowData\" above\n // colMax: # // added at the end\n };\n\n // ignore tbodies with class name from c.cssInfoBlock\n if (!$tb.eq(k).hasClass(c.cssInfoBlock)) {\n totalRows = ($tb[k] && $tb[k].rows.length) || 0;\n for (i = 0; i < totalRows; ++i) {\n rowData = {\n // order: original row order #\n // $row : jQuery Object[]\n child: [] // child row text (filter widget)\n };\n /** Add the table data to main data array */\n $row = $($tb[k].rows[i]);\n rows = [ new Array(c.columns) ];\n cols = [];\n // if this is a child row, add it to the last row's children and continue to the next row\n // ignore child row class, if it is the first row\n if ($row.hasClass(c.cssChildRow) && i !== 0) {\n t = cc.normalized.length - 1;\n cc.normalized[t][c.columns].$row = cc.normalized[t][c.columns].$row.add($row);\n // add \"hasChild\" class name to parent row\n if (!$row.prev().hasClass(c.cssChildRow)) {\n $row.prev().addClass(ts.css.cssHasChild);\n }\n // save child row content (un-parsed!)\n rowData.child[t] = $.trim( $row[0].textContent || $row[0].innerText || $row.text() || \"\" );\n // go to the next for loop\n continue;\n }\n rowData.$row = $row;\n rowData.order = i; // add original row position to rowCache\n for (j = 0; j < c.columns; ++j) {\n if (typeof parsers[j] === 'undefined') {\n if (c.debug) {\n log('No parser found for cell:', $row[0].cells[j], 'does it have a header?');\n }\n continue;\n }\n t = getElementText(table, $row[0].cells[j], j);\n // do extract before parsing if there is one\n if (typeof extractors[j].id === 'undefined') {\n tx = t;\n } else {\n tx = extractors[j].format(t, table, $row[0].cells[j], j);\n }\n // allow parsing if the string is empty, previously parsing would change it to zero,\n // in case the parser needs to extract data from the table cell attributes\n v = parsers[j].id === 'no-parser' ? '' : parsers[j].format(tx, table, $row[0].cells[j], j);\n cols.push( c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v );\n if ((parsers[j].type || '').toLowerCase() === \"numeric\") {\n // determine column max value (ignore sign)\n colMax[j] = Math.max(Math.abs(v) || 0, colMax[j] || 0);\n }\n }\n // ensure rowData is always in the same location (after the last column)\n cols[c.columns] = rowData;\n cc.normalized.push(cols);\n }\n cc.colMax = colMax;\n // total up rows, not including child rows\n c.totalRows += cc.normalized.length;\n }\n }\n if (c.showProcessing) {\n ts.isProcessing(table); // remove processing icon\n }\n if (c.debug) {\n benchmark(\"Building cache for \" + totalRows + \" rows\", cacheTime);\n }\n }\n\n // init flag (true) used by pager plugin to prevent widget application\n function appendToTable(table, init) {\n var c = table.config,\n wo = c.widgetOptions,\n b = table.tBodies,\n rows = [],\n cc = c.cache,\n n, totalRows, $bk, $tb,\n i, k, appendTime;\n // empty table - fixes #206/#346\n if (isEmptyObject(cc)) {\n // run pager appender in case the table was just emptied\n return c.appender ? c.appender(table, rows) :\n table.isUpdating ? c.$table.trigger(\"updateComplete\", table) : ''; // Fixes #532\n }\n if (c.debug) {\n appendTime = new Date();\n }\n for (k = 0; k < b.length; k++) {\n $bk = $(b[k]);\n if ($bk.length && !$bk.hasClass(c.cssInfoBlock)) {\n // get tbody\n $tb = ts.processTbody(table, $bk, true);\n n = cc[k].normalized;\n totalRows = n.length;\n for (i = 0; i < totalRows; i++) {\n rows.push(n[i][c.columns].$row);\n // removeRows used by the pager plugin; don't render if using ajax - fixes #411\n if (!c.appender || (c.pager && (!c.pager.removeRows || !wo.pager_removeRows) && !c.pager.ajax)) {\n $tb.append(n[i][c.columns].$row);\n }\n }\n // restore tbody\n ts.processTbody(table, $tb, false);\n }\n }\n if (c.appender) {\n c.appender(table, rows);\n }\n if (c.debug) {\n benchmark(\"Rebuilt table\", appendTime);\n }\n // apply table widgets; but not before ajax completes\n if (!init && !c.appender) { ts.applyWidget(table); }\n if (table.isUpdating) {\n c.$table.trigger(\"updateComplete\", table);\n }\n }\n\n function formatSortingOrder(v) {\n // look for \"d\" in \"desc\" order; return true\n return (/^d/i.test(v) || v === 1);\n }\n\n function buildHeaders(table) {\n var ch, $t,\n h, i, t, lock, time,\n c = table.config;\n c.headerList = [];\n c.headerContent = [];\n if (c.debug) {\n time = new Date();\n }\n // children tr in tfoot - see issue #196 & #547\n c.columns = ts.computeColumnIndex( c.$table.children('thead, tfoot').children('tr') );\n // add icon if cssIcon option exists\n i = c.cssIcon ? '<i class=\"' + ( c.cssIcon === ts.css.icon ? ts.css.icon : c.cssIcon + ' ' + ts.css.icon ) + '\"></i>' : '';\n // redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683\n c.$headers = $(table).find(c.selectorHeaders).each(function(index) {\n $t = $(this);\n // make sure to get header cell & not column indexed cell\n ch = ts.getColumnData( table, c.headers, index, true );\n // save original header content\n c.headerContent[index] = $(this).html();\n // set up header template\n t = c.headerTemplate.replace(/\\{content\\}/g, $(this).html()).replace(/\\{icon\\}/g, i);\n if (c.onRenderTemplate) {\n h = c.onRenderTemplate.apply($t, [index, t]);\n if (h && typeof h === 'string') { t = h; } // only change t if something is returned\n }\n $(this).html('<div class=\"' + ts.css.headerIn + '\">' + t + '</div>'); // faster than wrapInner\n\n if (c.onRenderHeader) { c.onRenderHeader.apply($t, [index]); }\n this.column = parseInt( $(this).attr('data-column'), 10);\n this.order = formatSortingOrder( ts.getData($t, ch, 'sortInitialOrder') || c.sortInitialOrder ) ? [1,0,2] : [0,1,2];\n this.count = -1; // set to -1 because clicking on the header automatically adds one\n this.lockedOrder = false;\n lock = ts.getData($t, ch, 'lockedOrder') || false;\n if (typeof lock !== 'undefined' && lock !== false) {\n this.order = this.lockedOrder = formatSortingOrder(lock) ? [1,1,1] : [0,0,0];\n }\n $t.addClass(ts.css.header + ' ' + c.cssHeader);\n // add cell to headerList\n c.headerList[index] = this;\n // add to parent in case there are multiple rows\n $t.parent().addClass(ts.css.headerRow + ' ' + c.cssHeaderRow).attr('role', 'row');\n // allow keyboard cursor to focus on element\n if (c.tabIndex) { $t.attr(\"tabindex\", 0); }\n }).attr({\n scope: 'col',\n role : 'columnheader'\n });\n // enable/disable sorting\n updateHeader(table);\n if (c.debug) {\n benchmark(\"Built headers:\", time);\n log(c.$headers);\n }\n }\n\n function commonUpdate(table, resort, callback) {\n var c = table.config;\n // remove rows/elements before update\n c.$table.find(c.selectorRemove).remove();\n // rebuild parsers\n buildParserCache(table);\n // rebuild the cache map\n buildCache(table);\n checkResort(c.$table, resort, callback);\n }\n\n function updateHeader(table) {\n var s, $th, col,\n c = table.config;\n c.$headers.each(function(index, th){\n $th = $(th);\n col = ts.getColumnData( table, c.headers, index, true );\n // add \"sorter-false\" class if \"parser-false\" is set\n s = ts.getData( th, col, 'sorter' ) === 'false' || ts.getData( th, col, 'parser' ) === 'false';\n th.sortDisabled = s;\n $th[ s ? 'addClass' : 'removeClass' ]('sorter-false').attr('aria-disabled', '' + s);\n // aria-controls - requires table ID\n if (table.id) {\n if (s) {\n $th.removeAttr('aria-controls');\n } else {\n $th.attr('aria-controls', table.id);\n }\n }\n });\n }\n\n function setHeadersCss(table) {\n var f, i, j,\n c = table.config,\n list = c.sortList,\n len = list.length,\n none = ts.css.sortNone + ' ' + c.cssNone,\n css = [ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc],\n aria = ['ascending', 'descending'],\n // find the footer\n $t = $(table).find('tfoot tr').children().add(c.$extraHeaders).removeClass(css.join(' '));\n // remove all header information\n c.$headers\n .removeClass(css.join(' '))\n .addClass(none).attr('aria-sort', 'none');\n for (i = 0; i < len; i++) {\n // direction = 2 means reset!\n if (list[i][1] !== 2) {\n // multicolumn sorting updating - choose the :last in case there are nested columns\n f = c.$headers.not('.sorter-false').filter('[data-column=\"' + list[i][0] + '\"]' + (len === 1 ? ':last' : '') );\n if (f.length) {\n for (j = 0; j < f.length; j++) {\n if (!f[j].sortDisabled) {\n f.eq(j).removeClass(none).addClass(css[list[i][1]]).attr('aria-sort', aria[list[i][1]]);\n }\n }\n // add sorted class to footer & extra headers, if they exist\n if ($t.length) {\n $t.filter('[data-column=\"' + list[i][0] + '\"]').removeClass(none).addClass(css[list[i][1]]);\n }\n }\n }\n }\n // add verbose aria labels\n c.$headers.not('.sorter-false').each(function(){\n var $this = $(this),\n nextSort = this.order[(this.count + 1) % (c.sortReset ? 3 : 2)],\n txt = $this.text() + ': ' +\n ts.language[ $this.hasClass(ts.css.sortAsc) ? 'sortAsc' : $this.hasClass(ts.css.sortDesc) ? 'sortDesc' : 'sortNone' ] +\n ts.language[ nextSort === 0 ? 'nextAsc' : nextSort === 1 ? 'nextDesc' : 'nextNone' ];\n $this.attr('aria-label', txt );\n });\n }\n\n // automatically add col group, and column sizes if set\n function fixColumnWidth(table) {\n if (table.config.widthFixed && $(table).find('colgroup').length === 0) {\n var colgroup = $('<colgroup>'),\n overallWidth = $(table).width();\n // only add col for visible columns - fixes #371\n $(table.tBodies[0]).find(\"tr:first\").children(\":visible\").each(function() {\n colgroup.append($('<col>').css('width', parseInt(($(this).width()/overallWidth)*1000, 10)/10 + '%'));\n });\n $(table).prepend(colgroup);\n }\n }\n\n function updateHeaderSortCount(table, list) {\n var s, t, o, col, primary,\n c = table.config,\n sl = list || c.sortList;\n c.sortList = [];\n $.each(sl, function(i,v){\n // ensure all sortList values are numeric - fixes #127\n col = parseInt(v[0], 10);\n // make sure header exists\n o = c.$headers.filter('[data-column=\"' + col + '\"]:last')[0];\n if (o) { // prevents error if sorton array is wrong\n // o.count = o.count + 1;\n t = ('' + v[1]).match(/^(1|d|s|o|n)/);\n t = t ? t[0] : '';\n // 0/(a)sc (default), 1/(d)esc, (s)ame, (o)pposite, (n)ext\n switch(t) {\n case '1': case 'd': // descending\n t = 1;\n break;\n case 's': // same direction (as primary column)\n // if primary sort is set to \"s\", make it ascending\n t = primary || 0;\n break;\n case 'o':\n s = o.order[(primary || 0) % (c.sortReset ? 3 : 2)];\n // opposite of primary column; but resets if primary resets\n t = s === 0 ? 1 : s === 1 ? 0 : 2;\n break;\n case 'n':\n o.count = o.count + 1;\n t = o.order[(o.count) % (c.sortReset ? 3 : 2)];\n break;\n default: // ascending\n t = 0;\n break;\n }\n primary = i === 0 ? t : primary;\n s = [ col, parseInt(t, 10) || 0 ];\n c.sortList.push(s);\n t = $.inArray(s[1], o.order); // fixes issue #167\n o.count = t >= 0 ? t : s[1] % (c.sortReset ? 3 : 2);\n }\n });\n }\n\n function getCachedSortType(parsers, i) {\n return (parsers && parsers[i]) ? parsers[i].type || '' : '';\n }\n\n function initSort(table, cell, event){\n if (table.isUpdating) {\n // let any updates complete before initializing a sort\n return setTimeout(function(){ initSort(table, cell, event); }, 50);\n }\n var arry, indx, col, order, s,\n c = table.config,\n key = !event[c.sortMultiSortKey],\n $table = c.$table;\n // Only call sortStart if sorting is enabled\n $table.trigger(\"sortStart\", table);\n // get current column sort order\n cell.count = event[c.sortResetKey] ? 2 : (cell.count + 1) % (c.sortReset ? 3 : 2);\n // reset all sorts on non-current column - issue #30\n if (c.sortRestart) {\n indx = cell;\n c.$headers.each(function() {\n // only reset counts on columns that weren't just clicked on and if not included in a multisort\n if (this !== indx && (key || !$(this).is('.' + ts.css.sortDesc + ',.' + ts.css.sortAsc))) {\n this.count = -1;\n }\n });\n }\n // get current column index\n indx = cell.column;\n // user only wants to sort on one column\n if (key) {\n // flush the sort list\n c.sortList = [];\n if (c.sortForce !== null) {\n arry = c.sortForce;\n for (col = 0; col < arry.length; col++) {\n if (arry[col][0] !== indx) {\n c.sortList.push(arry[col]);\n }\n }\n }\n // add column to sort list\n order = cell.order[cell.count];\n if (order < 2) {\n c.sortList.push([indx, order]);\n // add other columns if header spans across multiple\n if (cell.colSpan > 1) {\n for (col = 1; col < cell.colSpan; col++) {\n c.sortList.push([indx + col, order]);\n }\n }\n }\n // multi column sorting\n } else {\n // get rid of the sortAppend before adding more - fixes issue #115 & #523\n if (c.sortAppend && c.sortList.length > 1) {\n for (col = 0; col < c.sortAppend.length; col++) {\n s = ts.isValueInArray(c.sortAppend[col][0], c.sortList);\n if (s >= 0) {\n c.sortList.splice(s,1);\n }\n }\n }\n // the user has clicked on an already sorted column\n if (ts.isValueInArray(indx, c.sortList) >= 0) {\n // reverse the sorting direction\n for (col = 0; col < c.sortList.length; col++) {\n s = c.sortList[col];\n order = c.$headers.filter('[data-column=\"' + s[0] + '\"]:last')[0];\n if (s[0] === indx) {\n // order.count seems to be incorrect when compared to cell.count\n s[1] = order.order[cell.count];\n if (s[1] === 2) {\n c.sortList.splice(col,1);\n order.count = -1;\n }\n }\n }\n } else {\n // add column to sort list array\n order = cell.order[cell.count];\n if (order < 2) {\n c.sortList.push([indx, order]);\n // add other columns if header spans across multiple\n if (cell.colSpan > 1) {\n for (col = 1; col < cell.colSpan; col++) {\n c.sortList.push([indx + col, order]);\n }\n }\n }\n }\n }\n if (c.sortAppend !== null) {\n arry = c.sortAppend;\n for (col = 0; col < arry.length; col++) {\n if (arry[col][0] !== indx) {\n c.sortList.push(arry[col]);\n }\n }\n }\n // sortBegin event triggered immediately before the sort\n $table.trigger(\"sortBegin\", table);\n // setTimeout needed so the processing icon shows up\n setTimeout(function(){\n // set css for headers\n setHeadersCss(table);\n multisort(table);\n appendToTable(table);\n $table.trigger(\"sortEnd\", table);\n }, 1);\n }\n\n // sort multiple columns\n function multisort(table) { /*jshint loopfunc:true */\n var i, k, num, col, sortTime, colMax,\n cache, order, sort, x, y,\n dir = 0,\n c = table.config,\n cts = c.textSorter || '',\n sortList = c.sortList,\n l = sortList.length,\n bl = table.tBodies.length;\n if (c.serverSideSorting || isEmptyObject(c.cache)) { // empty table - fixes #206/#346\n return;\n }\n if (c.debug) { sortTime = new Date(); }\n for (k = 0; k < bl; k++) {\n colMax = c.cache[k].colMax;\n cache = c.cache[k].normalized;\n\n cache.sort(function(a, b) {\n // cache is undefined here in IE, so don't use it!\n for (i = 0; i < l; i++) {\n col = sortList[i][0];\n order = sortList[i][1];\n // sort direction, true = asc, false = desc\n dir = order === 0;\n\n if (c.sortStable && a[col] === b[col] && l === 1) {\n return a[c.columns].order - b[c.columns].order;\n }\n\n // fallback to natural sort since it is more robust\n num = /n/i.test(getCachedSortType(c.parsers, col));\n if (num && c.strings[col]) {\n // sort strings in numerical columns\n if (typeof (c.string[c.strings[col]]) === 'boolean') {\n num = (dir ? 1 : -1) * (c.string[c.strings[col]] ? -1 : 1);\n } else {\n num = (c.strings[col]) ? c.string[c.strings[col]] || 0 : 0;\n }\n // fall back to built-in numeric sort\n // var sort = $.tablesorter[\"sort\" + s](table, a[c], b[c], c, colMax[c], dir);\n sort = c.numberSorter ? c.numberSorter(a[col], b[col], dir, colMax[col], table) :\n ts[ 'sortNumeric' + (dir ? 'Asc' : 'Desc') ](a[col], b[col], num, colMax[col], col, table);\n } else {\n // set a & b depending on sort direction\n x = dir ? a : b;\n y = dir ? b : a;\n // text sort function\n if (typeof(cts) === 'function') {\n // custom OVERALL text sorter\n sort = cts(x[col], y[col], dir, col, table);\n } else if (typeof(cts) === 'object' && cts.hasOwnProperty(col)) {\n // custom text sorter for a SPECIFIC COLUMN\n sort = cts[col](x[col], y[col], dir, col, table);\n } else {\n // fall back to natural sort\n sort = ts[ 'sortNatural' + (dir ? 'Asc' : 'Desc') ](a[col], b[col], col, table, c);\n }\n }\n if (sort) { return sort; }\n }\n return a[c.columns].order - b[c.columns].order;\n });\n }\n if (c.debug) { benchmark(\"Sorting on \" + sortList.toString() + \" and dir \" + order + \" time\", sortTime); }\n }\n\n function resortComplete($table, callback){\n var table = $table[0];\n if (table.isUpdating) {\n $table.trigger('updateComplete');\n }\n if ($.isFunction(callback)) {\n callback($table[0]);\n }\n }\n\n function checkResort($table, flag, callback) {\n var sl = $table[0].config.sortList;\n // don't try to resort if the table is still processing\n // this will catch spamming of the updateCell method\n if (flag !== false && !$table[0].isProcessing && sl.length) {\n $table.trigger(\"sorton\", [sl, function(){\n resortComplete($table, callback);\n }, true]);\n } else {\n resortComplete($table, callback);\n ts.applyWidget($table[0], false);\n }\n }\n\n function bindMethods(table){\n var c = table.config,\n $table = c.$table;\n // apply easy methods that trigger bound events\n $table\n .unbind('sortReset update updateRows updateCell updateAll addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave '.split(' ').join(c.namespace + ' '))\n .bind(\"sortReset\" + c.namespace, function(e, callback){\n e.stopPropagation();\n c.sortList = [];\n setHeadersCss(table);\n multisort(table);\n appendToTable(table);\n if ($.isFunction(callback)) {\n callback(table);\n }\n })\n .bind(\"updateAll\" + c.namespace, function(e, resort, callback){\n e.stopPropagation();\n table.isUpdating = true;\n ts.refreshWidgets(table, true, true);\n ts.restoreHeaders(table);\n buildHeaders(table);\n ts.bindEvents(table, c.$headers, true);\n bindMethods(table);\n commonUpdate(table, resort, callback);\n })\n .bind(\"update\" + c.namespace + \" updateRows\" + c.namespace, function(e, resort, callback) {\n e.stopPropagation();\n table.isUpdating = true;\n // update sorting (if enabled/disabled)\n updateHeader(table);\n commonUpdate(table, resort, callback);\n })\n .bind(\"updateCell\" + c.namespace, function(e, cell, resort, callback) {\n e.stopPropagation();\n table.isUpdating = true;\n $table.find(c.selectorRemove).remove();\n // get position from the dom\n var v, t, row, icell,\n $tb = $table.find('tbody'),\n $cell = $(cell),\n // update cache - format: function(s, table, cell, cellIndex)\n // no closest in jQuery v1.2.6 - tbdy = $tb.index( $(cell).closest('tbody') ),$row = $(cell).closest('tr');\n tbdy = $tb.index( $.fn.closest ? $cell.closest('tbody') : $cell.parents('tbody').filter(':first') ),\n $row = $.fn.closest ? $cell.closest('tr') : $cell.parents('tr').filter(':first');\n cell = $cell[0]; // in case cell is a jQuery object\n // tbody may not exist if update is initialized while tbody is removed for processing\n if ($tb.length && tbdy >= 0) {\n row = $tb.eq(tbdy).find('tr').index( $row );\n icell = $cell.index();\n c.cache[tbdy].normalized[row][c.columns].$row = $row;\n if (typeof c.extractors[icell].id === 'undefined') {\n t = getElementText(table, cell, icell);\n } else {\n t = c.extractors[icell].format( getElementText(table, cell, icell), table, cell, icell );\n }\n v = c.parsers[icell].id === 'no-parser' ? '' :\n c.parsers[icell].format( t, table, cell, icell );\n c.cache[tbdy].normalized[row][icell] = c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v;\n if ((c.parsers[icell].type || '').toLowerCase() === \"numeric\") {\n // update column max value (ignore sign)\n c.cache[tbdy].colMax[icell] = Math.max(Math.abs(v) || 0, c.cache[tbdy].colMax[icell] || 0);\n }\n checkResort($table, resort, callback);\n }\n })\n .bind(\"addRows\" + c.namespace, function(e, $row, resort, callback) {\n e.stopPropagation();\n table.isUpdating = true;\n if (isEmptyObject(c.cache)) {\n // empty table, do an update instead - fixes #450\n updateHeader(table);\n commonUpdate(table, resort, callback);\n } else {\n $row = $($row).attr('role', 'row'); // make sure we're using a jQuery object\n var i, j, l, t, v, rowData, cells,\n rows = $row.filter('tr').length,\n tbdy = $table.find('tbody').index( $row.parents('tbody').filter(':first') );\n // fixes adding rows to an empty table - see issue #179\n if (!(c.parsers && c.parsers.length)) {\n buildParserCache(table);\n }\n // add each row\n for (i = 0; i < rows; i++) {\n l = $row[i].cells.length;\n cells = [];\n rowData = {\n child: [],\n $row : $row.eq(i),\n order: c.cache[tbdy].normalized.length\n };\n // add each cell\n for (j = 0; j < l; j++) {\n if (typeof c.extractors[j].id === 'undefined') {\n t = getElementText(table, $row[i].cells[j], j);\n } else {\n t = c.extractors[j].format( getElementText(table, $row[i].cells[j], j), table, $row[i].cells[j], j );\n }\n v = c.parsers[j].id === 'no-parser' ? '' :\n c.parsers[j].format( t, table, $row[i].cells[j], j );\n cells[j] = c.ignoreCase && typeof v === 'string' ? v.toLowerCase() : v;\n if ((c.parsers[j].type || '').toLowerCase() === \"numeric\") {\n // update column max value (ignore sign)\n c.cache[tbdy].colMax[j] = Math.max(Math.abs(cells[j]) || 0, c.cache[tbdy].colMax[j] || 0);\n }\n }\n // add the row data to the end\n cells.push(rowData);\n // update cache\n c.cache[tbdy].normalized.push(cells);\n }\n // resort using current settings\n checkResort($table, resort, callback);\n }\n })\n .bind(\"updateComplete\" + c.namespace, function(){\n table.isUpdating = false;\n })\n .bind(\"sorton\" + c.namespace, function(e, list, callback, init) {\n var c = table.config;\n e.stopPropagation();\n $table.trigger(\"sortStart\", this);\n // update header count index\n updateHeaderSortCount(table, list);\n // set css for headers\n setHeadersCss(table);\n // fixes #346\n if (c.delayInit && isEmptyObject(c.cache)) { buildCache(table); }\n $table.trigger(\"sortBegin\", this);\n // sort the table and append it to the dom\n multisort(table);\n appendToTable(table, init);\n $table.trigger(\"sortEnd\", this);\n ts.applyWidget(table);\n if ($.isFunction(callback)) {\n callback(table);\n }\n })\n .bind(\"appendCache\" + c.namespace, function(e, callback, init) {\n e.stopPropagation();\n appendToTable(table, init);\n if ($.isFunction(callback)) {\n callback(table);\n }\n })\n .bind(\"updateCache\" + c.namespace, function(e, callback){\n // rebuild parsers\n if (!(c.parsers && c.parsers.length)) {\n buildParserCache(table);\n }\n // rebuild the cache map\n buildCache(table);\n if ($.isFunction(callback)) {\n callback(table);\n }\n })\n .bind(\"applyWidgetId\" + c.namespace, function(e, id) {\n e.stopPropagation();\n ts.getWidgetById(id).format(table, c, c.widgetOptions);\n })\n .bind(\"applyWidgets\" + c.namespace, function(e, init) {\n e.stopPropagation();\n // apply widgets\n ts.applyWidget(table, init);\n })\n .bind(\"refreshWidgets\" + c.namespace, function(e, all, dontapply){\n e.stopPropagation();\n ts.refreshWidgets(table, all, dontapply);\n })\n .bind(\"destroy\" + c.namespace, function(e, c, cb){\n e.stopPropagation();\n ts.destroy(table, c, cb);\n })\n .bind(\"resetToLoadState\" + c.namespace, function(){\n // remove all widgets\n ts.refreshWidgets(table, true, true);\n // restore original settings; this clears out current settings, but does not clear\n // values saved to storage.\n c = $.extend(true, ts.defaults, c.originalSettings);\n table.hasInitialized = false;\n // setup the entire table again\n ts.setup( table, c );\n });\n }\n\n /* public methods */\n ts.construct = function(settings) {\n return this.each(function() {\n var table = this,\n // merge & extend config options\n c = $.extend(true, {}, ts.defaults, settings);\n // save initial settings\n c.originalSettings = settings;\n // create a table from data (build table widget)\n if (!table.hasInitialized && ts.buildTable && this.tagName !== 'TABLE') {\n // return the table (in case the original target is the table's container)\n ts.buildTable(table, c);\n } else {\n ts.setup(table, c);\n }\n });\n };\n\n ts.setup = function(table, c) {\n // if no thead or tbody, or tablesorter is already present, quit\n if (!table || !table.tHead || table.tBodies.length === 0 || table.hasInitialized === true) {\n return c.debug ? log('ERROR: stopping initialization! No table, thead, tbody or tablesorter has already been initialized') : '';\n }\n\n var k = '',\n $table = $(table),\n m = $.metadata;\n // initialization flag\n table.hasInitialized = false;\n // table is being processed flag\n table.isProcessing = true;\n // make sure to store the config object\n table.config = c;\n // save the settings where they read\n $.data(table, \"tablesorter\", c);\n if (c.debug) { $.data( table, 'startoveralltimer', new Date()); }\n\n // removing this in version 3 (only supports jQuery 1.7+)\n c.supportsDataObject = (function(version) {\n version[0] = parseInt(version[0], 10);\n return (version[0] > 1) || (version[0] === 1 && parseInt(version[1], 10) >= 4);\n })($.fn.jquery.split(\".\"));\n // digit sort text location; keeping max+/- for backwards compatibility\n c.string = { 'max': 1, 'min': -1, 'emptyMin': 1, 'emptyMax': -1, 'zero': 0, 'none': 0, 'null': 0, 'top': true, 'bottom': false };\n // add table theme class only if there isn't already one there\n if (!/tablesorter\\-/.test($table.attr('class'))) {\n k = (c.theme !== '' ? ' tablesorter-' + c.theme : '');\n }\n c.table = table;\n c.$table = $table\n .addClass(ts.css.table + ' ' + c.tableClass + k)\n .attr('role', 'grid');\n c.$headers = $table.find(c.selectorHeaders);\n\n // give the table a unique id, which will be used in namespace binding\n if (!c.namespace) {\n c.namespace = '.tablesorter' + Math.random().toString(16).slice(2);\n } else {\n // make sure namespace starts with a period & doesn't have weird characters\n c.namespace = '.' + c.namespace.replace(/\\W/g,'');\n }\n\n c.$table.children().children('tr').attr('role', 'row');\n c.$tbodies = $table.children('tbody:not(.' + c.cssInfoBlock + ')').attr({\n 'aria-live' : 'polite',\n 'aria-relevant' : 'all'\n });\n if (c.$table.find('caption').length) {\n c.$table.attr('aria-labelledby', 'theCaption');\n }\n c.widgetInit = {}; // keep a list of initialized widgets\n // change textExtraction via data-attribute\n c.textExtraction = c.$table.attr('data-text-extraction') || c.textExtraction || 'basic';\n // build headers\n buildHeaders(table);\n // fixate columns if the users supplies the fixedWidth option\n // do this after theme has been applied\n fixColumnWidth(table);\n // try to auto detect column type, and store in tables config\n buildParserCache(table);\n // start total row count at zero\n c.totalRows = 0;\n // build the cache for the tbody cells\n // delayInit will delay building the cache until the user starts a sort\n if (!c.delayInit) { buildCache(table); }\n // bind all header events and methods\n ts.bindEvents(table, c.$headers, true);\n bindMethods(table);\n // get sort list from jQuery data or metadata\n // in jQuery < 1.4, an error occurs when calling $table.data()\n if (c.supportsDataObject && typeof $table.data().sortlist !== 'undefined') {\n c.sortList = $table.data().sortlist;\n } else if (m && ($table.metadata() && $table.metadata().sortlist)) {\n c.sortList = $table.metadata().sortlist;\n }\n // apply widget init code\n ts.applyWidget(table, true);\n // if user has supplied a sort list to constructor\n if (c.sortList.length > 0) {\n $table.trigger(\"sorton\", [c.sortList, {}, !c.initWidgets, true]);\n } else {\n setHeadersCss(table);\n if (c.initWidgets) {\n // apply widget format\n ts.applyWidget(table, false);\n }\n }\n\n // show processesing icon\n if (c.showProcessing) {\n $table\n .unbind('sortBegin' + c.namespace + ' sortEnd' + c.namespace)\n .bind('sortBegin' + c.namespace + ' sortEnd' + c.namespace, function(e) {\n clearTimeout(c.processTimer);\n ts.isProcessing(table);\n if (e.type === 'sortBegin') {\n c.processTimer = setTimeout(function(){\n ts.isProcessing(table, true);\n }, 500);\n }\n });\n }\n\n // initialized\n table.hasInitialized = true;\n table.isProcessing = false;\n if (c.debug) {\n ts.benchmark(\"Overall initialization time\", $.data( table, 'startoveralltimer'));\n }\n $table.trigger('tablesorter-initialized', table);\n if (typeof c.initialized === 'function') { c.initialized(table); }\n };\n\n ts.getColumnData = function(table, obj, indx, getCell){\n if (typeof obj === 'undefined' || obj === null) { return; }\n table = $(table)[0];\n var result, $h, k,\n c = table.config;\n if (obj[indx]) {\n return getCell ? obj[indx] : obj[c.$headers.index( c.$headers.filter('[data-column=\"' + indx + '\"]:last') )];\n }\n for (k in obj) {\n if (typeof k === 'string') {\n if (getCell) {\n // get header cell\n $h = c.$headers.eq(indx).filter(k);\n } else {\n // get column indexed cell\n $h = c.$headers.filter('[data-column=\"' + indx + '\"]:last').filter(k);\n }\n if ($h.length) {\n return obj[k];\n }\n }\n }\n return result;\n };\n\n // computeTableHeaderCellIndexes from:\n // http://www.javascripttoolbox.com/lib/table/examples.php\n // http://www.javascripttoolbox.com/temp/table_cellindex.html\n ts.computeColumnIndex = function(trs) {\n var matrix = [],\n lookup = {},\n cols = 0, // determine the number of columns\n i, j, k, l, $cell, cell, cells, rowIndex, cellId, rowSpan, colSpan, firstAvailCol, matrixrow;\n for (i = 0; i < trs.length; i++) {\n cells = trs[i].cells;\n for (j = 0; j < cells.length; j++) {\n cell = cells[j];\n $cell = $(cell);\n rowIndex = cell.parentNode.rowIndex;\n cellId = rowIndex + \"-\" + $cell.index();\n rowSpan = cell.rowSpan || 1;\n colSpan = cell.colSpan || 1;\n if (typeof(matrix[rowIndex]) === \"undefined\") {\n matrix[rowIndex] = [];\n }\n // Find first available column in the first row\n for (k = 0; k < matrix[rowIndex].length + 1; k++) {\n if (typeof(matrix[rowIndex][k]) === \"undefined\") {\n firstAvailCol = k;\n break;\n }\n }\n lookup[cellId] = firstAvailCol;\n cols = Math.max(firstAvailCol, cols);\n // add data-column\n $cell.attr({ 'data-column' : firstAvailCol }); // 'data-row' : rowIndex\n for (k = rowIndex; k < rowIndex + rowSpan; k++) {\n if (typeof(matrix[k]) === \"undefined\") {\n matrix[k] = [];\n }\n matrixrow = matrix[k];\n for (l = firstAvailCol; l < firstAvailCol + colSpan; l++) {\n matrixrow[l] = \"x\";\n }\n }\n }\n }\n // may not be accurate if # header columns !== # tbody columns\n return cols + 1; // add one because it's a zero-based index\n };\n\n // *** Process table ***\n // add processing indicator\n ts.isProcessing = function(table, toggle, $ths) {\n table = $(table);\n var c = table[0].config,\n // default to all headers\n $h = $ths || table.find('.' + ts.css.header);\n if (toggle) {\n // don't use sortList if custom $ths used\n if (typeof $ths !== 'undefined' && c.sortList.length > 0) {\n // get headers from the sortList\n $h = $h.filter(function(){\n // get data-column from attr to keep compatibility with jQuery 1.2.6\n return this.sortDisabled ? false : ts.isValueInArray( parseFloat($(this).attr('data-column')), c.sortList) >= 0;\n });\n }\n table.add($h).addClass(ts.css.processing + ' ' + c.cssProcessing);\n } else {\n table.add($h).removeClass(ts.css.processing + ' ' + c.cssProcessing);\n }\n };\n\n // detach tbody but save the position\n // don't use tbody because there are portions that look for a tbody index (updateCell)\n ts.processTbody = function(table, $tb, getIt){\n table = $(table)[0];\n var holdr;\n if (getIt) {\n table.isProcessing = true;\n $tb.before('<span class=\"tablesorter-savemyplace\"/>');\n holdr = ($.fn.detach) ? $tb.detach() : $tb.remove();\n return holdr;\n }\n holdr = $(table).find('span.tablesorter-savemyplace');\n $tb.insertAfter( holdr );\n holdr.remove();\n table.isProcessing = false;\n };\n\n ts.clearTableBody = function(table) {\n $(table)[0].config.$tbodies.children().detach();\n };\n\n ts.bindEvents = function(table, $headers, core){\n table = $(table)[0];\n var downTime,\n c = table.config;\n if (core !== true) {\n c.$extraHeaders = c.$extraHeaders ? c.$extraHeaders.add($headers) : $headers;\n }\n // apply event handling to headers and/or additional headers (stickyheaders, scroller, etc)\n $headers\n // http://stackoverflow.com/questions/5312849/jquery-find-self;\n .find(c.selectorSort).add( $headers.filter(c.selectorSort) )\n .unbind('mousedown mouseup sort keyup '.split(' ').join(c.namespace + ' '))\n .bind('mousedown mouseup sort keyup '.split(' ').join(c.namespace + ' '), function(e, external) {\n var cell, type = e.type;\n // only recognize left clicks or enter\n if ( ((e.which || e.button) !== 1 && !/sort|keyup/.test(type)) || (type === 'keyup' && e.which !== 13) ) {\n return;\n }\n // ignore long clicks (prevents resizable widget from initializing a sort)\n if (type === 'mouseup' && external !== true && (new Date().getTime() - downTime > 250)) { return; }\n // set timer on mousedown\n if (type === 'mousedown') {\n downTime = new Date().getTime();\n return /(input|select|button|textarea)/i.test(e.target.tagName) ? '' : !c.cancelSelection;\n }\n if (c.delayInit && isEmptyObject(c.cache)) { buildCache(table); }\n // jQuery v1.2.6 doesn't have closest()\n cell = $.fn.closest ? $(this).closest('th, td')[0] : /TH|TD/.test(this.tagName) ? this : $(this).parents('th, td')[0];\n // reference original table headers and find the same cell\n cell = c.$headers[ $headers.index( cell ) ];\n if (!cell.sortDisabled) {\n initSort(table, cell, e);\n }\n });\n if (c.cancelSelection) {\n // cancel selection\n $headers\n .attr('unselectable', 'on')\n .bind('selectstart', false)\n .css({\n 'user-select': 'none',\n 'MozUserSelect': 'none' // not needed for jQuery 1.8+\n });\n }\n };\n\n // restore headers\n ts.restoreHeaders = function(table){\n var c = $(table)[0].config;\n // don't use c.$headers here in case header cells were swapped\n c.$table.find(c.selectorHeaders).each(function(i){\n // only restore header cells if it is wrapped\n // because this is also used by the updateAll method\n if ($(this).find('.' + ts.css.headerIn).length){\n $(this).html( c.headerContent[i] );\n }\n });\n };\n\n ts.destroy = function(table, removeClasses, callback){\n table = $(table)[0];\n if (!table.hasInitialized) { return; }\n // remove all widgets\n ts.refreshWidgets(table, true, true);\n var $t = $(table), c = table.config,\n $h = $t.find('thead:first'),\n $r = $h.find('tr.' + ts.css.headerRow).removeClass(ts.css.headerRow + ' ' + c.cssHeaderRow),\n $f = $t.find('tfoot:first > tr').children('th, td');\n if (removeClasses === false && $.inArray('uitheme', c.widgets) >= 0) {\n // reapply uitheme classes, in case we want to maintain appearance\n $t.trigger('applyWidgetId', ['uitheme']);\n $t.trigger('applyWidgetId', ['zebra']);\n }\n // remove widget added rows, just in case\n $h.find('tr').not($r).remove();\n // disable tablesorter\n $t\n .removeData('tablesorter')\n .unbind('sortReset update updateAll updateRows updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave keypress sortBegin sortEnd resetToLoadState '.split(' ').join(c.namespace + ' '));\n c.$headers.add($f)\n .removeClass( [ts.css.header, c.cssHeader, c.cssAsc, c.cssDesc, ts.css.sortAsc, ts.css.sortDesc, ts.css.sortNone].join(' ') )\n .removeAttr('data-column')\n .removeAttr('aria-label')\n .attr('aria-disabled', 'true');\n $r.find(c.selectorSort).unbind('mousedown mouseup keypress '.split(' ').join(c.namespace + ' '));\n ts.restoreHeaders(table);\n $t.toggleClass(ts.css.table + ' ' + c.tableClass + ' tablesorter-' + c.theme, removeClasses === false);\n // clear flag in case the plugin is initialized again\n table.hasInitialized = false;\n delete table.config.cache;\n if (typeof callback === 'function') {\n callback(table);\n }\n };\n\n // *** sort functions ***\n // regex used in natural sort\n ts.regex = {\n chunk : /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi, // chunk/tokenize numbers & letters\n chunks: /(^\\\\0|\\\\0$)/, // replace chunks @ ends\n hex: /^0x[0-9a-f]+$/i // hex\n };\n\n // Natural sort - https://github.com/overset/javascript-natural-sort (date sorting removed)\n // this function will only accept strings, or you'll see \"TypeError: undefined is not a function\"\n // I could add a = a.toString(); b = b.toString(); but it'll slow down the sort overall\n ts.sortNatural = function(a, b) {\n if (a === b) { return 0; }\n var xN, xD, yN, yD, xF, yF, i, mx,\n r = ts.regex;\n // first try and sort Hex codes\n if (r.hex.test(b)) {\n xD = parseInt(a.match(r.hex), 16);\n yD = parseInt(b.match(r.hex), 16);\n if ( xD < yD ) { return -1; }\n if ( xD > yD ) { return 1; }\n }\n // chunk/tokenize\n xN = a.replace(r.chunk, '\\\\0$1\\\\0').replace(r.chunks, '').split('\\\\0');\n yN = b.replace(r.chunk, '\\\\0$1\\\\0').replace(r.chunks, '').split('\\\\0');\n mx = Math.max(xN.length, yN.length);\n // natural sorting through split numeric strings and default strings\n for (i = 0; i < mx; i++) {\n // find floats not starting with '0', string or 0 if not defined\n xF = isNaN(xN[i]) ? xN[i] || 0 : parseFloat(xN[i]) || 0;\n yF = isNaN(yN[i]) ? yN[i] || 0 : parseFloat(yN[i]) || 0;\n // handle numeric vs string comparison - number < string - (Kyle Adams)\n if (isNaN(xF) !== isNaN(yF)) { return (isNaN(xF)) ? 1 : -1; }\n // rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\n if (typeof xF !== typeof yF) {\n xF += '';\n yF += '';\n }\n if (xF < yF) { return -1; }\n if (xF > yF) { return 1; }\n }\n return 0;\n };\n\n ts.sortNaturalAsc = function(a, b, col, table, c) {\n if (a === b) { return 0; }\n var e = c.string[ (c.empties[col] || c.emptyTo ) ];\n if (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : -e || -1; }\n if (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : e || 1; }\n return ts.sortNatural(a, b);\n };\n\n ts.sortNaturalDesc = function(a, b, col, table, c) {\n if (a === b) { return 0; }\n var e = c.string[ (c.empties[col] || c.emptyTo ) ];\n if (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : e || 1; }\n if (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : -e || -1; }\n return ts.sortNatural(b, a);\n };\n\n // basic alphabetical sort\n ts.sortText = function(a, b) {\n return a > b ? 1 : (a < b ? -1 : 0);\n };\n\n // return text string value by adding up ascii value\n // so the text is somewhat sorted when using a digital sort\n // this is NOT an alphanumeric sort\n ts.getTextValue = function(a, num, mx) {\n if (mx) {\n // make sure the text value is greater than the max numerical value (mx)\n var i, l = a ? a.length : 0, n = mx + num;\n for (i = 0; i < l; i++) {\n n += a.charCodeAt(i);\n }\n return num * n;\n }\n return 0;\n };\n\n ts.sortNumericAsc = function(a, b, num, mx, col, table) {\n if (a === b) { return 0; }\n var c = table.config,\n e = c.string[ (c.empties[col] || c.emptyTo ) ];\n if (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : -e || -1; }\n if (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : e || 1; }\n if (isNaN(a)) { a = ts.getTextValue(a, num, mx); }\n if (isNaN(b)) { b = ts.getTextValue(b, num, mx); }\n return a - b;\n };\n\n ts.sortNumericDesc = function(a, b, num, mx, col, table) {\n if (a === b) { return 0; }\n var c = table.config,\n e = c.string[ (c.empties[col] || c.emptyTo ) ];\n if (a === '' && e !== 0) { return typeof e === 'boolean' ? (e ? -1 : 1) : e || 1; }\n if (b === '' && e !== 0) { return typeof e === 'boolean' ? (e ? 1 : -1) : -e || -1; }\n if (isNaN(a)) { a = ts.getTextValue(a, num, mx); }\n if (isNaN(b)) { b = ts.getTextValue(b, num, mx); }\n return b - a;\n };\n\n ts.sortNumeric = function(a, b) {\n return a - b;\n };\n\n // used when replacing accented characters during sorting\n ts.characterEquivalents = {\n \"a\" : \"\\u00e1\\u00e0\\u00e2\\u00e3\\u00e4\\u0105\\u00e5\", // áàâãäąå\n \"A\" : \"\\u00c1\\u00c0\\u00c2\\u00c3\\u00c4\\u0104\\u00c5\", // ÁÀÂÃÄĄÅ\n \"c\" : \"\\u00e7\\u0107\\u010d\", // çćč\n \"C\" : \"\\u00c7\\u0106\\u010c\", // ÇĆČ\n \"e\" : \"\\u00e9\\u00e8\\u00ea\\u00eb\\u011b\\u0119\", // éèêëěę\n \"E\" : \"\\u00c9\\u00c8\\u00ca\\u00cb\\u011a\\u0118\", // ÉÈÊËĚĘ\n \"i\" : \"\\u00ed\\u00ec\\u0130\\u00ee\\u00ef\\u0131\", // íìİîïı\n \"I\" : \"\\u00cd\\u00cc\\u0130\\u00ce\\u00cf\", // ÍÌİÎÏ\n \"o\" : \"\\u00f3\\u00f2\\u00f4\\u00f5\\u00f6\", // óòôõö\n \"O\" : \"\\u00d3\\u00d2\\u00d4\\u00d5\\u00d6\", // ÓÒÔÕÖ\n \"ss\": \"\\u00df\", // ß (s sharp)\n \"SS\": \"\\u1e9e\", // ẞ (Capital sharp s)\n \"u\" : \"\\u00fa\\u00f9\\u00fb\\u00fc\\u016f\", // úùûüů\n \"U\" : \"\\u00da\\u00d9\\u00db\\u00dc\\u016e\" // ÚÙÛÜŮ\n };\n ts.replaceAccents = function(s) {\n var a, acc = '[', eq = ts.characterEquivalents;\n if (!ts.characterRegex) {\n ts.characterRegexArray = {};\n for (a in eq) {\n if (typeof a === 'string') {\n acc += eq[a];\n ts.characterRegexArray[a] = new RegExp('[' + eq[a] + ']', 'g');\n }\n }\n ts.characterRegex = new RegExp(acc + ']');\n }\n if (ts.characterRegex.test(s)) {\n for (a in eq) {\n if (typeof a === 'string') {\n s = s.replace( ts.characterRegexArray[a], a );\n }\n }\n }\n return s;\n };\n\n // *** utilities ***\n ts.isValueInArray = function(column, arry) {\n var indx, len = arry.length;\n for (indx = 0; indx < len; indx++) {\n if (arry[indx][0] === column) {\n return indx;\n }\n }\n return -1;\n };\n\n ts.addParser = function(parser) {\n var i, l = ts.parsers.length, a = true;\n for (i = 0; i < l; i++) {\n if (ts.parsers[i].id.toLowerCase() === parser.id.toLowerCase()) {\n a = false;\n }\n }\n if (a) {\n ts.parsers.push(parser);\n }\n };\n\n ts.getParserById = function(name) {\n /*jshint eqeqeq:false */\n if (name == 'false') { return false; }\n var i, l = ts.parsers.length;\n for (i = 0; i < l; i++) {\n if (ts.parsers[i].id.toLowerCase() === (name.toString()).toLowerCase()) {\n return ts.parsers[i];\n }\n }\n return false;\n };\n\n ts.addWidget = function(widget) {\n ts.widgets.push(widget);\n };\n\n ts.hasWidget = function(table, name){\n table = $(table);\n return table.length && table[0].config && table[0].config.widgetInit[name] || false;\n };\n\n ts.getWidgetById = function(name) {\n var i, w, l = ts.widgets.length;\n for (i = 0; i < l; i++) {\n w = ts.widgets[i];\n if (w && w.hasOwnProperty('id') && w.id.toLowerCase() === name.toLowerCase()) {\n return w;\n }\n }\n };\n\n ts.applyWidget = function(table, init) {\n table = $(table)[0]; // in case this is called externally\n var c = table.config,\n wo = c.widgetOptions,\n widgets = [],\n time, w, wd;\n // prevent numerous consecutive widget applications\n if (init !== false && table.hasInitialized && (table.isApplyingWidgets || table.isUpdating)) { return; }\n if (c.debug) { time = new Date(); }\n if (c.widgets.length) {\n table.isApplyingWidgets = true;\n // ensure unique widget ids\n c.widgets = $.grep(c.widgets, function(v, k){\n return $.inArray(v, c.widgets) === k;\n });\n // build widget array & add priority as needed\n $.each(c.widgets || [], function(i,n){\n wd = ts.getWidgetById(n);\n if (wd && wd.id) {\n // set priority to 10 if not defined\n if (!wd.priority) { wd.priority = 10; }\n widgets[i] = wd;\n }\n });\n // sort widgets by priority\n widgets.sort(function(a, b){\n return a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1;\n });\n // add/update selected widgets\n $.each(widgets, function(i,w){\n if (w) {\n if (init || !(c.widgetInit[w.id])) {\n // set init flag first to prevent calling init more than once (e.g. pager)\n c.widgetInit[w.id] = true;\n if (w.hasOwnProperty('options')) {\n wo = table.config.widgetOptions = $.extend( true, {}, w.options, wo );\n }\n if (w.hasOwnProperty('init')) {\n w.init(table, w, c, wo);\n }\n }\n if (!init && w.hasOwnProperty('format')) {\n w.format(table, c, wo, false);\n }\n }\n });\n }\n setTimeout(function(){\n table.isApplyingWidgets = false;\n }, 0);\n if (c.debug) {\n w = c.widgets.length;\n benchmark(\"Completed \" + (init === true ? \"initializing \" : \"applying \") + w + \" widget\" + (w !== 1 ? \"s\" : \"\"), time);\n }\n };\n\n ts.refreshWidgets = function(table, doAll, dontapply) {\n table = $(table)[0]; // see issue #243\n var i, c = table.config,\n cw = c.widgets,\n w = ts.widgets, l = w.length;\n // remove previous widgets\n for (i = 0; i < l; i++){\n if ( w[i] && w[i].id && (doAll || $.inArray( w[i].id, cw ) < 0) ) {\n if (c.debug) { log( 'Refeshing widgets: Removing \"' + w[i].id + '\"' ); }\n // only remove widgets that have been initialized - fixes #442\n if (w[i].hasOwnProperty('remove') && c.widgetInit[w[i].id]) {\n w[i].remove(table, c, c.widgetOptions);\n c.widgetInit[w[i].id] = false;\n }\n }\n }\n if (dontapply !== true) {\n ts.applyWidget(table, doAll);\n }\n };\n\n // get sorter, string, empty, etc options for each column from\n // jQuery data, metadata, header option or header class name (\"sorter-false\")\n // priority = jQuery data > meta > headers option > header class name\n ts.getData = function(h, ch, key) {\n var val = '', $h = $(h), m, cl;\n if (!$h.length) { return ''; }\n m = $.metadata ? $h.metadata() : false;\n cl = ' ' + ($h.attr('class') || '');\n if (typeof $h.data(key) !== 'undefined' || typeof $h.data(key.toLowerCase()) !== 'undefined'){\n // \"data-lockedOrder\" is assigned to \"lockedorder\"; but \"data-locked-order\" is assigned to \"lockedOrder\"\n // \"data-sort-initial-order\" is assigned to \"sortInitialOrder\"\n val += $h.data(key) || $h.data(key.toLowerCase());\n } else if (m && typeof m[key] !== 'undefined') {\n val += m[key];\n } else if (ch && typeof ch[key] !== 'undefined') {\n val += ch[key];\n } else if (cl !== ' ' && cl.match(' ' + key + '-')) {\n // include sorter class name \"sorter-text\", etc; now works with \"sorter-my-custom-parser\"\n val = cl.match( new RegExp('\\\\s' + key + '-([\\\\w-]+)') )[1] || '';\n }\n return $.trim(val);\n };\n\n ts.formatFloat = function(s, table) {\n if (typeof s !== 'string' || s === '') { return s; }\n // allow using formatFloat without a table; defaults to US number format\n var i,\n t = table && table.config ? table.config.usNumberFormat !== false :\n typeof table !== \"undefined\" ? table : true;\n if (t) {\n // US Format - 1,234,567.89 -> 1234567.89\n s = s.replace(/,/g,'');\n } else {\n // German Format = 1.234.567,89 -> 1234567.89\n // French Format = 1 234 567,89 -> 1234567.89\n s = s.replace(/[\\s|\\.]/g,'').replace(/,/g,'.');\n }\n if(/^\\s*\\([.\\d]+\\)/.test(s)) {\n // make (#) into a negative number -> (10) = -10\n s = s.replace(/^\\s*\\(([.\\d]+)\\)/, '-$1');\n }\n i = parseFloat(s);\n // return the text instead of zero\n return isNaN(i) ? $.trim(s) : i;\n };\n\n ts.isDigit = function(s) {\n // replace all unwanted chars and match\n return isNaN(s) ? (/^[\\-+(]?\\d+[)]?$/).test(s.toString().replace(/[,.'\"\\s]/g, '')) : true;\n };\n\n }()\n });\n\n // make shortcut\n var ts = $.tablesorter;\n\n // extend plugin scope\n $.fn.extend({\n tablesorter: ts.construct\n });\n\n // add default parsers\n ts.addParser({\n id: 'no-parser',\n is: function() {\n return false;\n },\n format: function() {\n return '';\n },\n type: 'text'\n });\n\n ts.addParser({\n id: \"text\",\n is: function() {\n return true;\n },\n format: function(s, table) {\n var c = table.config;\n if (s) {\n s = $.trim( c.ignoreCase ? s.toLocaleLowerCase() : s );\n s = c.sortLocaleCompare ? ts.replaceAccents(s) : s;\n }\n return s;\n },\n type: \"text\"\n });\n\n ts.addParser({\n id: \"digit\",\n is: function(s) {\n return ts.isDigit(s);\n },\n format: function(s, table) {\n var n = ts.formatFloat((s || '').replace(/[^\\w,. \\-()]/g, \"\"), table);\n return s && typeof n === 'number' ? n : s ? $.trim( s && table.config.ignoreCase ? s.toLocaleLowerCase() : s ) : s;\n },\n type: \"numeric\"\n });\n\n ts.addParser({\n id: \"currency\",\n is: function(s) {\n return (/^\\(?\\d+[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]|[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]\\d+\\)?$/).test((s || '').replace(/[+\\-,. ]/g,'')); // £$€¤¥¢\n },\n format: function(s, table) {\n var n = ts.formatFloat((s || '').replace(/[^\\w,. \\-()]/g, \"\"), table);\n return s && typeof n === 'number' ? n : s ? $.trim( s && table.config.ignoreCase ? s.toLocaleLowerCase() : s ) : s;\n },\n type: \"numeric\"\n });\n\n ts.addParser({\n id: \"ipAddress\",\n is: function(s) {\n return (/^\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}[\\.]\\d{1,3}$/).test(s);\n },\n format: function(s, table) {\n var i, a = s ? s.split(\".\") : '',\n r = \"\",\n l = a.length;\n for (i = 0; i < l; i++) {\n r += (\"00\" + a[i]).slice(-3);\n }\n return s ? ts.formatFloat(r, table) : s;\n },\n type: \"numeric\"\n });\n\n ts.addParser({\n id: \"url\",\n is: function(s) {\n return (/^(https?|ftp|file):\\/\\//).test(s);\n },\n format: function(s) {\n return s ? $.trim(s.replace(/(https?|ftp|file):\\/\\//, '')) : s;\n },\n type: \"text\"\n });\n\n ts.addParser({\n id: \"isoDate\",\n is: function(s) {\n return (/^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}/).test(s);\n },\n format: function(s, table) {\n return s ? ts.formatFloat((s !== \"\") ? (new Date(s.replace(/-/g, \"/\")).getTime() || s) : \"\", table) : s;\n },\n type: \"numeric\"\n });\n\n ts.addParser({\n id: \"percent\",\n is: function(s) {\n return (/(\\d\\s*?%|%\\s*?\\d)/).test(s) && s.length < 15;\n },\n format: function(s, table) {\n return s ? ts.formatFloat(s.replace(/%/g, \"\"), table) : s;\n },\n type: \"numeric\"\n });\n\n ts.addParser({\n id: \"usLongDate\",\n is: function(s) {\n // two digit years are not allowed cross-browser\n // Jan 01, 2013 12:34:56 PM or 01 Jan 2013\n return (/^[A-Z]{3,10}\\.?\\s+\\d{1,2},?\\s+(\\d{4})(\\s+\\d{1,2}:\\d{2}(:\\d{2})?(\\s+[AP]M)?)?$/i).test(s) || (/^\\d{1,2}\\s+[A-Z]{3,10}\\s+\\d{4}/i).test(s);\n },\n format: function(s, table) {\n return s ? ts.formatFloat( (new Date(s.replace(/(\\S)([AP]M)$/i, \"$1 $2\")).getTime() || s), table) : s;\n },\n type: \"numeric\"\n });\n\n ts.addParser({\n id: \"shortDate\", // \"mmddyyyy\", \"ddmmyyyy\" or \"yyyymmdd\"\n is: function(s) {\n // testing for ##-##-#### or ####-##-##, so it's not perfect; time can be included\n return (/(^\\d{1,2}[\\/\\s]\\d{1,2}[\\/\\s]\\d{4})|(^\\d{4}[\\/\\s]\\d{1,2}[\\/\\s]\\d{1,2})/).test((s || '').replace(/\\s+/g,\" \").replace(/[\\-.,]/g, \"/\"));\n },\n format: function(s, table, cell, cellIndex) {\n if (s) {\n var c = table.config,\n ci = c.$headers.filter('[data-column=' + cellIndex + ']:last'),\n format = ci.length && ci[0].dateFormat || ts.getData( ci, ts.getColumnData( table, c.headers, cellIndex ), 'dateFormat') || c.dateFormat;\n s = s.replace(/\\s+/g,\" \").replace(/[\\-.,]/g, \"/\"); // escaped - because JSHint in Firefox was showing it as an error\n if (format === \"mmddyyyy\") {\n s = s.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, \"$3/$1/$2\");\n } else if (format === \"ddmmyyyy\") {\n s = s.replace(/(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/, \"$3/$2/$1\");\n } else if (format === \"yyyymmdd\") {\n s = s.replace(/(\\d{4})[\\/\\s](\\d{1,2})[\\/\\s](\\d{1,2})/, \"$1/$2/$3\");\n }\n }\n return s ? ts.formatFloat( (new Date(s).getTime() || s), table) : s;\n },\n type: \"numeric\"\n });\n\n ts.addParser({\n id: \"time\",\n is: function(s) {\n return (/^(([0-2]?\\d:[0-5]\\d)|([0-1]?\\d:[0-5]\\d\\s?([AP]M)))$/i).test(s);\n },\n format: function(s, table) {\n return s ? ts.formatFloat( (new Date(\"2000/01/01 \" + s.replace(/(\\S)([AP]M)$/i, \"$1 $2\")).getTime() || s), table) : s;\n },\n type: \"numeric\"\n });\n\n ts.addParser({\n id: \"metadata\",\n is: function() {\n return false;\n },\n format: function(s, table, cell) {\n var c = table.config,\n p = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;\n return $(cell).metadata()[p];\n },\n type: \"numeric\"\n });\n\n // add default widgets\n ts.addWidget({\n id: \"zebra\",\n priority: 90,\n format: function(table, c, wo) {\n var $tb, $tv, $tr, row, even, time, k, l,\n child = new RegExp(c.cssChildRow, 'i'),\n b = c.$tbodies;\n if (c.debug) {\n time = new Date();\n }\n for (k = 0; k < b.length; k++ ) {\n // loop through the visible rows\n $tb = b.eq(k);\n l = $tb.children('tr').length;\n if (l > 1) {\n row = 0;\n $tv = $tb.children('tr:visible').not(c.selectorRemove);\n // revered back to using jQuery each - strangely it's the fastest method\n /*jshint loopfunc:true */\n $tv.each(function(){\n $tr = $(this);\n // style children rows the same way the parent row was styled\n if (!child.test(this.className)) { row++; }\n even = (row % 2 === 0);\n $tr.removeClass(wo.zebra[even ? 1 : 0]).addClass(wo.zebra[even ? 0 : 1]);\n });\n }\n }\n if (c.debug) {\n ts.benchmark(\"Applying Zebra widget\", time);\n }\n },\n remove: function(table, c, wo){\n var k, $tb,\n b = c.$tbodies,\n rmv = (wo.zebra || [ \"even\", \"odd\" ]).join(' ');\n for (k = 0; k < b.length; k++ ){\n $tb = $.tablesorter.processTbody(table, b.eq(k), true); // remove tbody\n $tb.children().removeClass(rmv);\n $.tablesorter.processTbody(table, $tb, false); // restore tbody\n }\n }\n });\n\n})(jQuery);","import './styles/aui.pattern.tabs';\nimport './aui.component.dropdown2'; // to make responsive tabs work.\nexport * from '@atlassian/aui/src/js/aui/tabs';\n","import 'skatejs-template-html';\nimport * as logger from './internal/log';\nimport debounce from './debounce';\nimport $ from './jquery';\nimport addId from './internal/add-id';\nimport globalize from './internal/globalize';\nimport isClipped from './is-clipped';\nimport skate from './internal/skate';\n\nvar template = window.skateTemplateHtml;\n\nvar STORAGE_PREFIX = '_internal-aui-tabs-';\nvar RESPONSIVE_OPT_IN_SELECTOR = '.aui-tabs.horizontal-tabs[data-aui-responsive]:not([data-aui-responsive=\"false\"]), aui-tabs[responsive]:not([responsive=\"false\"])';\n\nfunction getPaneIdFromTabLink (el) {\n let $el = $(el);\n let maybeId = String($el.attr('href') || '').trim();\n return maybeId.indexOf('#') === 0 ? maybeId.substr(1) : null;\n}\n\n/**\n * Locate what is assumed to be a tab panel within the DOM, based on the link element passed in\n * @param {HTMLElement} el a tab link element with an href attribute pointing to a tab panel\n * @returns {HTMLElement|null} the element with matching ID if it exists, otherwise null\n */\nfunction getPaneFromTabLink (el) {\n let maybeId = getPaneIdFromTabLink(el);\n return maybeId ? document.getElementById(maybeId) : null;\n}\n\nfunction enhanceTabLink (link) {\n var $thisLink = $(link);\n var targetPane = getPaneFromTabLink($thisLink);\n\n if (!getPaneIdFromTabLink(link)) {\n logger.error('A tab link must use an anchor link (e.g., <a href=\"#a-valid-id\"></a>) to work correctly.', link);\n }\n\n if (targetPane) {\n addId($thisLink);\n $thisLink.attr('role', 'tab');\n $(targetPane).attr('aria-labelledby', $thisLink.attr('id'));\n\n if ($thisLink.parent().hasClass('active-tab')) {\n $thisLink.attr('aria-selected', 'true');\n } else {\n $thisLink.attr('aria-selected', 'false');\n }\n } else {\n logger.warn('A tab panel could not be found with the tab link\\'s configured href.' +\n ' Check whether the tab link href is correct.', link);\n }\n}\n\nvar ResponsiveAdapter = {\n totalTabsWidth: function ($visibleTabs, $dropdown) {\n var totalVisibleTabsWidth = this.totalVisibleTabWidth($visibleTabs);\n var totalDropdownTabsWidth = 0;\n\n $dropdown.find('li').each(function (index, tab) {\n totalDropdownTabsWidth += parseInt(tab.getAttribute('data-aui-tab-width'));\n });\n\n return totalVisibleTabsWidth + totalDropdownTabsWidth;\n },\n\n totalVisibleTabWidth: function ($tabs) {\n var totalWidth = 0;\n\n $tabs.each(function (index, tab) {\n totalWidth += $(tab).outerWidth();\n });\n\n return totalWidth;\n },\n\n removeResponsiveDropdown: function ($dropdown, $dropdownTriggerTab) {\n $dropdown.remove();\n $dropdownTriggerTab.remove();\n },\n\n createResponsiveDropdownTrigger: function ($tabsMenu, id) {\n var triggerMarkup = `<li class=\"menu-item aui-tabs-responsive-trigger-item\">\n <a\n class=\"aui-dropdown2-trigger aui-tabs-responsive-trigger aui-dropdown2-trigger-arrowless\"\n id=\"aui-tabs-responsive-trigger-${id}\"\n aria-haspopup=\"true\"\n aria-controls=\"aui-tabs-responsive-dropdown-${id}\"\n href=\"#aui-tabs-responsive-dropdown-${id}\">...</a>\n </li>`;\n $tabsMenu.append(triggerMarkup);\n return $tabsMenu.find('.aui-tabs-responsive-trigger-item');\n },\n\n createResponsiveDropdown: function ($tabsContainer, id) {\n var dropdownMarkup = '<div class=\"aui-dropdown2 aui-style-default aui-tabs-responsive-dropdown\" id=\"aui-tabs-responsive-dropdown-' + id + '\">' +\n '<ul>' +\n '</ul>' +\n '</div>';\n $tabsContainer.append(dropdownMarkup);\n var $dropdown = $tabsContainer.find('#aui-tabs-responsive-dropdown-' + id);\n return $dropdown;\n },\n\n findNewVisibleTabs: function (tabs, parentWidth, dropdownTriggerTabWidth) {\n function hasMoreSpace(currentTotalTabWidth, dropdownTriggerTabWidth, parentWidth) {\n return currentTotalTabWidth + dropdownTriggerTabWidth <= parentWidth;\n }\n\n var currentTotalTabWidth = 0;\n\n for (var i = 0; hasMoreSpace(currentTotalTabWidth, dropdownTriggerTabWidth, parentWidth) && i < tabs.length; i++) {\n var $tab = $(tabs[i]);\n var tabWidth = $tab.outerWidth(true);\n currentTotalTabWidth += tabWidth;\n }\n\n // i should now be at the tab index after the last visible tab because of the loop so we minus 1 to get the new visible tabs\n return tabs.slice(0, i - 1);\n },\n\n moveVisibleTabs: function (oldVisibleTabs, $tabsParent, $dropdownTriggerTab) {\n var dropdownId = $dropdownTriggerTab.find('a').attr('aria-controls');\n var $dropdown = $('#' + dropdownId);\n var newVisibleTabs = this.findNewVisibleTabs(oldVisibleTabs, $tabsParent.outerWidth(), $dropdownTriggerTab.parent().outerWidth(true));\n var lastTabIndex = newVisibleTabs.length - 1;\n\n for (var j = oldVisibleTabs.length - 1; j >= lastTabIndex; j--) {\n var $tab = $(oldVisibleTabs[j]);\n this.moveTabToResponsiveDropdown($tab, $dropdown, $dropdownTriggerTab);\n }\n\n return $(newVisibleTabs);\n },\n\n moveTabToResponsiveDropdown: function ($tab, $dropdown, $dropdownTriggerTab) {\n var $tabLink = $tab.find('a');\n\n $tab.attr('data-aui-tab-width', $tab.outerWidth(true));\n $tabLink.addClass('aui-dropdown2-radio aui-tabs-responsive-item');\n\n if ($tab.hasClass('active-tab')) {\n $tabLink.addClass('aui-dropdown2-checked');\n $dropdownTriggerTab.addClass('active-tab');\n }\n\n $dropdown.find('ul').prepend($tab);\n },\n\n moveInvisibleTabs: function (tabsInDropdown, remainingSpace, $dropdownTriggerTab) {\n function hasMoreSpace(remainingSpace) {\n return remainingSpace > 0;\n }\n\n for (var i = 0; hasMoreSpace(remainingSpace) && i < tabsInDropdown.length; i++) {\n var $tab = $(tabsInDropdown[i]);\n var tabInDropdownWidth = parseInt($tab.attr('data-aui-tab-width'), 10);\n var shouldMoveTabOut = tabInDropdownWidth < remainingSpace;\n\n if (shouldMoveTabOut) {\n this.moveTabOutOfDropdown($tab, $dropdownTriggerTab);\n }\n\n remainingSpace -= tabInDropdownWidth;\n }\n },\n\n moveTabOutOfDropdown: function ($tab, $dropdownTriggerTab) {\n var isTabInDropdownActive = $tab.find('a').hasClass('aui-dropdown2-checked');\n\n if (isTabInDropdownActive){\n $tab.addClass('active-tab');\n $dropdownTriggerTab.removeClass('active-tab');\n }\n\n $tab.children('a').removeClass('aui-dropdown2-radio aui-tabs-responsive-item aui-dropdown2-checked');\n $dropdownTriggerTab.before($tab);\n }\n};\n\n// this function is run by jquery .each() where 'this' is the current tabs container\nfunction calculateResponsiveTabs(tabsContainer, index) {\n var $tabsContainer = $(tabsContainer);\n var $tabsMenu = $tabsContainer.find('.tabs-menu').first();\n var $visibleTabs = $tabsMenu.find('li:not(.aui-tabs-responsive-trigger-item)');\n var $dropdownTriggerTab = $tabsMenu.find('.aui-tabs-responsive-trigger').parent();\n var $dropdownTrigger = $dropdownTriggerTab.find('a');\n var dropdownId = $dropdownTrigger.attr('aria-controls');\n var $dropdown = $(document.getElementById(dropdownId)).attr('aria-checked', false);\n var isResponsive = $dropdown.length > 0;\n var totalTabsWidth = ResponsiveAdapter.totalTabsWidth($visibleTabs, $dropdown);\n var needsResponsive = totalTabsWidth > $tabsContainer.outerWidth();\n\n if (!isResponsive && needsResponsive) {\n $dropdownTriggerTab = ResponsiveAdapter.createResponsiveDropdownTrigger($tabsMenu, index);\n $dropdown = ResponsiveAdapter.createResponsiveDropdown($tabsContainer, index);\n }\n\n // reset id's in case tabs have changed DOM order\n $dropdownTrigger.attr('aria-controls', 'aui-tabs-responsive-dropdown-' + index);\n $dropdownTrigger.attr('id', 'aui-tabs-responsive-trigger-' + index);\n $dropdownTrigger.attr('href', '#aui-tabs-responsive-trigger-' + index);\n $dropdown.attr('id', 'aui-tabs-responsive-dropdown-' + index);\n\n if (needsResponsive) {\n var $newVisibleTabs = ResponsiveAdapter.moveVisibleTabs($visibleTabs.toArray(), $tabsContainer, $dropdownTriggerTab);\n var visibleTabWidth = ResponsiveAdapter.totalVisibleTabWidth($newVisibleTabs);\n var remainingSpace = $tabsContainer.outerWidth() - visibleTabWidth - $dropdownTriggerTab.outerWidth(true);\n var hasSpace = remainingSpace > 0;\n\n if (hasSpace) {\n var $tabsInDropdown = $dropdown.find('li');\n ResponsiveAdapter.moveInvisibleTabs($tabsInDropdown.toArray(), remainingSpace, $dropdownTriggerTab);\n }\n\n if (!$tabsContainer.hasClass('aui-tabs-disabled')) {\n $dropdown.on('click', 'a', handleTabClick);\n }\n\n /* Workaround for bug in Edge where the dom is just not being re-rendered properly\n It is only triggered for certain widths. Simply taking the element out of the DOM\n and placing it back in causes the browser to re-render, hiding the issue.\n added from AUI-4098 and to be revisited in AUI-4117*/\n if ($tabsMenu.is(':visible')) {\n $tabsMenu.hide().show();\n }\n }\n\n if (isResponsive && !needsResponsive) {\n $dropdown.find('li').each(function () {\n ResponsiveAdapter.moveTabOutOfDropdown($(this), $dropdownTriggerTab);\n });\n ResponsiveAdapter.removeResponsiveDropdown($dropdown, $dropdownTriggerTab);\n }\n}\n\nfunction switchToTab (tab) {\n var $tab = $(tab);\n\n // This probably isn't needed anymore. Remove once confirmed.\n if ($tab.hasClass('aui-tabs-responsive-trigger')) {\n return;\n }\n\n var pane = getPaneFromTabLink($tab);\n if (!pane) {\n logger.error('Cannot switch to tab panel because it does not exist.' +\n ' Check whether the tab link href is correct.', tab);\n return;\n }\n\n var $pane = $(pane);\n\n $pane\n .addClass('active-pane')\n .attr('aria-hidden', 'false')\n .siblings('.tabs-pane')\n .removeClass('active-pane')\n .attr('aria-hidden', 'true');\n\n var $dropdownTriggerTab = $tab.parents('.aui-tabs').find('.aui-tabs-responsive-trigger-item a');\n var dropdownId = $dropdownTriggerTab.attr('aria-controls');\n var $dropdown = $(document.getElementById(dropdownId));\n\n $dropdown.find('li a').attr('aria-checked', false).removeClass('checked aui-dropdown2-checked');\n $dropdown.find('li').removeClass('active-tab');\n\n $tab\n .parent('li.menu-item')\n .addClass('active-tab')\n .siblings('.menu-item')\n .removeClass('active-tab');\n\n if ($tab.hasClass('aui-tabs-responsive-item')) {\n var $visibleTabs = $pane.parent('.aui-tabs').find('li.menu-item:not(.aui-tabs-responsive-trigger-item)');\n\n $visibleTabs.removeClass('active-tab');\n $visibleTabs.find('a').removeClass('checked').removeAttr('aria-checked');\n }\n\n if ($tab.hasClass('aui-tabs-responsive-item')) {\n $pane.parent('.aui-tabs').find('li.menu-item.aui-tabs-responsive-trigger-item').addClass('active-tab');\n }\n\n $tab.closest('.tabs-menu').find('a').attr('aria-selected', 'false');\n $tab.attr('aria-selected', 'true');\n $tab.trigger('tabSelect', {\n tab: $tab,\n pane: $pane\n });\n}\n\nfunction isPersistentTabGroup($tabGroup) {\n // Tab group persistent attribute exists and is not false\n return $tabGroup.attr('data-aui-persist') !== undefined && $tabGroup.attr('data-aui-persist') !== 'false';\n}\n\nfunction createPersistentKey($tabGroup) {\n var tabGroupId = $tabGroup.attr('id');\n var value = $tabGroup.attr('data-aui-persist');\n\n return STORAGE_PREFIX + (tabGroupId ? tabGroupId : '') + (value && value !== 'true' ? '-' + value : '');\n}\n\n/* eslint max-depth: 1 */\nfunction updateTabsFromLocalStorage($tabGroups) {\n for (var i = 0, ii = $tabGroups.length; i < ii; i++) {\n var $tabGroup = $tabGroups.eq(i);\n var tabs = $tabGroups.get(i);\n\n if (isPersistentTabGroup($tabGroup) && window.localStorage) {\n var tabGroupId = $tabGroup.attr('id');\n\n if (tabGroupId) {\n var persistentTabId = window.localStorage.getItem(createPersistentKey($tabGroup));\n\n if (persistentTabId) {\n var anchor = tabs.querySelector(`a[href$=\"${persistentTabId}\"]`);\n\n if (anchor) {\n switchToTab(anchor);\n }\n }\n } else {\n logger.warn('A tab group must specify an id attribute if it specifies data-aui-persist.');\n }\n }\n }\n}\n\nfunction updateLocalStorageEntry ($tab) {\n var $tabGroup = $tab.closest('.aui-tabs');\n var tabGroupId = $tabGroup.attr('id');\n\n if (tabGroupId) {\n var tabId = getPaneIdFromTabLink($tab);\n\n if (tabId) {\n window.localStorage.setItem(createPersistentKey($tabGroup),'#' + tabId);\n }\n } else {\n logger.warn('A tab group must specify an id attribute if it specifies data-aui-persist.');\n }\n}\n\nfunction handleTabClick (e) {\n tabs.change($(e.target).closest('a'));\n\n if (e) {\n e.preventDefault();\n }\n}\n\nfunction responsiveResizeHandler (tabs) {\n tabs.forEach(function (tab, index) {\n calculateResponsiveTabs(tab, index);\n });\n}\n\n\n// Initialisation\n// --------------\n\nfunction getTabs () {\n return $('.aui-tabs:not(.aui-tabs-disabled)');\n}\n\nfunction getResponsiveTabs () {\n return $(RESPONSIVE_OPT_IN_SELECTOR).toArray();\n}\n\nfunction initWindow () {\n var debounced = debounce(responsiveResizeHandler, 200);\n var responsive = getResponsiveTabs();\n\n responsiveResizeHandler(responsive);\n\n $(window).on('resize', function () {\n debounced(responsive);\n });\n}\n\nfunction initTab (tab) {\n var $tab = $(tab);\n\n tab.setAttribute('role', 'application');\n\n if (!$tab.data('aui-tab-events-bound')) {\n var $tabMenu = $tab.children('ul.tabs-menu');\n\n // ARIA setup\n $tabMenu.attr('role', 'tablist');\n\n // ignore the LIs so tab count is announced correctly\n $tabMenu.children('li').attr('role', 'presentation');\n $tabMenu.find('> .menu-item a').each(function () {\n enhanceTabLink(this);\n });\n\n // Set up click event for tabs\n $tabMenu.on('click', 'a', handleTabClick);\n $tab.data('aui-tab-events-bound', true);\n\n initPanes(tab);\n }\n}\n\nfunction initTabs () {\n var tabs = getTabs();\n\n tabs.each(function () {\n initTab(this);\n });\n\n updateTabsFromLocalStorage(tabs);\n}\n\nfunction initPane (pane) {\n pane.setAttribute('role', 'tabpanel');\n pane.setAttribute('aria-hidden', $(pane).hasClass('active-pane') ? 'false' : 'true');\n}\n\nfunction initPanes (tab) {\n [].slice.call(tab.querySelectorAll('.tabs-pane')).forEach(initPane);\n}\n\nfunction initVerticalTabs () {\n // Vertical tab truncation setup (adds title if clipped)\n $('.aui-tabs.vertical-tabs').find('a').each(function () {\n var thisTab = $(this);\n\n // don't override existing titles\n if (!thisTab.attr('title')) {\n // if text has been truncated, add title\n if (isClipped(thisTab)) {\n thisTab.attr('title', thisTab.text());\n }\n }\n });\n}\n\nvar tabs = {\n setup: function () {\n initWindow();\n initTabs();\n initVerticalTabs();\n },\n\n change: function (a) {\n var $a = $(a);\n var $tabGroup = $a.closest('.aui-tabs');\n\n switchToTab($a);\n\n if (isPersistentTabGroup($tabGroup) && window.localStorage) {\n updateLocalStorageEntry($a);\n }\n }\n};\n\n$(tabs.setup);\n\n\n// Web Components\n// --------------\n\nfunction findComponent (element) {\n return $(element).closest('aui-tabs').get(0);\n}\n\nfunction findPanes (tabs) {\n return tabs.querySelectorAll('aui-tabs-pane');\n}\n\nfunction findTabs (tabs) {\n return tabs.querySelectorAll('li[is=aui-tabs-tab]');\n}\n\nconst TabContainerEl = skate('aui-tabs', {\n created: function (element) {\n $(element).addClass('aui-tabs horizontal-tabs');\n\n // We must initialise here so that the old code still works since\n // the lifecycle of the sub-components setup the markup so that it\n // can be processed by the old logic.\n skate.init(element);\n\n // Use the old logic to initialise the tabs.\n initTab(element);\n },\n template: template(\n '<ul class=\"tabs-menu\">',\n '<content select=\"li[is=aui-tabs-tab]\"></content>',\n '</ul>',\n '<content select=\"aui-tabs-pane\"></content>'\n ),\n prototype: {\n select: function (element) {\n var index = $(findPanes(this)).index(element);\n\n if (index > -1) {\n tabs.change(findTabs(this)[index].children[0]);\n }\n\n return this;\n }\n }\n});\n\nconst TabItemEl = skate('aui-tabs-tab', {\n extends: 'li',\n created: function (element) {\n $(element).addClass('menu-item');\n },\n template: template(\n '<a href=\"#\">',\n '<strong>',\n '<content></content>',\n '</strong>',\n '</a>'\n )\n});\n\nconst TabPaneEl = skate('aui-tabs-pane', {\n attached: function (element) {\n var $component = $(findComponent(element));\n var $element = $(element);\n var index = $component.find('aui-tabs-pane').index($element);\n var tab = new TabItemEl();\n var $tab = $(tab);\n\n $element.addClass('tabs-pane');\n tab.firstChild.setAttribute('href', '#' + element.id);\n template.wrap(tab).textContent = $element.attr('title');\n\n if (index === 0) {\n $element.addClass('active-pane');\n }\n\n if ($element.hasClass('active-pane')) {\n $tab.addClass('active-tab');\n }\n\n $element.siblings('ul').append(tab);\n },\n template: template(\n '<content></content>'\n )\n});\n\nglobalize('tabs', tabs);\n\nexport default tabs;\nexport {\n TabContainerEl,\n TabPaneEl,\n TabItemEl\n};\n","import $ from '../jquery';\nimport globalize from './globalize';\nimport uniqueId from '../unique-id';\n\n/**\n * Apply a unique ID to the element. Preserves ID if the element already has one.\n *\n * @param {Element} el Selector to find target element.\n * @param {string} [prefix] Optional. String to prepend to ID instead of default AUI prefix.\n *\n * @returns {undefined}\n */\nfunction addId (el, prefix = '') {\n var element = $(el);\n var addprefix = prefix || false;\n\n element.each(function () {\n var $el = $(this);\n\n if (!$el.attr('id')) {\n $el.attr('id', uniqueId(addprefix));\n }\n });\n}\n\nglobalize('_addID', addId);\n\nexport default addId;\n","import $ from './jquery';\nimport globalize from './internal/globalize';\n\n/**\n * Shortcut function to see if passed element is truncated/clipped, eg. with\n * text-overflow: ellipsis.\n *\n * @param {String | Element | jQuery} element The element to check.\n *\n * @returns {Boolean}\n */\nfunction isClipped (el) {\n el = $(el);\n return (el.prop('scrollWidth') > el.prop('clientWidth'));\n}\n\nglobalize('isClipped', isClipped);\n\nexport default isClipped;\n","export {default as i18n} from '@atlassian/aui/src/js/aui/i18n';\n","// Page-level CSS\nimport './styles/aui.page.reset'\nimport './styles/aui.page.typography'\nimport './styles/aui.page.links'\n","// HTML + CSS patterns\nimport './styles/aui.pattern.avatar'\nimport './styles/aui.pattern.badge'\nimport './styles/aui.pattern.banner'\nimport './styles/aui.pattern.basic'\nimport './styles/aui.pattern.button'\nimport './styles/aui.pattern.forms'\nimport './styles/aui.pattern.group'\nimport './styles/aui.pattern.help'\nimport './styles/aui.pattern.icon'\nimport './styles/aui.pattern.inline-dialog'\nimport './styles/aui.pattern.label'\nimport './styles/aui.pattern.lozenge'\nimport './styles/aui.pattern.messages'\nimport './styles/aui.pattern.multi-step-progress'\nimport './styles/aui.pattern.nav'\nimport './styles/aui.pattern.page-header'\nimport './styles/aui.pattern.page-layout'\nimport './styles/aui.pattern.table'\nimport './styles/aui.pattern.tabs'\nimport './styles/aui.pattern.toolbar2'\n","// todo: split help in to its individual patterns so that this file can be made smaller.\nimport './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport './aui.pattern.page-layout';\nimport './aui.pattern.inline-dialog';\nimport '@atlassian/aui/src/less/adg-help.less';\n","// todo: this component needs re-naming to avoid confusion with the <aui-label> component.\nimport './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport '@atlassian/aui/src/less/aui-experimental-labels.less';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\nimport '@atlassian/aui/src/less/aui-lozenge.less';\n","import './aui.page.reset';\nimport './aui.page.typography';\nimport './aui.page.links';\n// todo: determine how interop styles with page-header pattern should be loaded\nimport '@atlassian/aui/src/less/aui-experimental-progress-tracker.less';\n","import './styles/aui.pattern.icon';\nimport './styles/aui.page.iconography';\n","import './aui.component.form-notification';\nimport '@atlassian/aui/src/js/aui/form-validation.js';\nexport {};\n","import $ from './jquery';\nimport './form-notification';\nimport {appendDescription, appendErrorMessages, getMessageContainer, setFieldSpinner} from './form-notification';\nimport './form-validation/basic-validators';\nimport amdify from './internal/amdify';\nimport * as deprecate from './internal/deprecation';\nimport globalize from './internal/globalize';\nimport skate from './internal/skate';\nimport validatorRegister from './form-validation/validator-register';\n\n//Attributes\nconst ATTRIBUTE_VALIDATION_OPTION_PREFIX = 'aui-validation-';\nconst ATTRIBUTE_NOTIFICATION_PREFIX = 'data-aui-notification-';\n\nconst ATTRIBUTE_FIELD_STATE = 'aui-validation-state';\nconst INVALID = 'invalid';\nconst VALID = 'valid';\nconst VALIDATING = 'validating';\nconst UNVALIDATED = 'unvalidated';\n\nconst ATTRIBUTE_VALIDATION_FIELD_COMPONENT = 'data-aui-validation-field';\n\n//Classes\nconst CLASS_VALIDATION_INITIALISED = '_aui-form-validation-initialised';\n\n//Events\nconst EVENT_FIELD_STATE_CHANGED = '_aui-internal-field-state-changed';\n\nfunction isFieldInitialised($field) {\n return $field.hasClass(CLASS_VALIDATION_INITIALISED);\n}\n\nfunction initValidation($field) {\n if (!isFieldInitialised($field)) {\n prepareFieldMarkup($field);\n bindFieldEvents($field);\n changeFieldState($field, UNVALIDATED);\n }\n}\n\nfunction prepareFieldMarkup($field){\n $field.addClass(CLASS_VALIDATION_INITIALISED);\n appendDescription($field);\n}\n\nfunction bindFieldEvents($field) {\n bindStopTypingEvent($field);\n bindValidationEvent($field);\n}\n\nfunction bindStopTypingEvent($field){\n var keyUpTimer;\n\n var triggerStopTypingEvent = function () {\n $field.trigger('aui-stop-typing');\n };\n\n $field.on('keyup', function () {\n clearTimeout(keyUpTimer);\n keyUpTimer = setTimeout(triggerStopTypingEvent, 1500);\n });\n}\n\nfunction bindValidationEvent($field) {\n var validateWhen = getValidationOption($field, 'when');\n var watchedFieldID = getValidationOption($field, 'watchfield');\n\n var elementsToWatch = watchedFieldID ? $field.add('#' + watchedFieldID) : $field;\n\n elementsToWatch.on(validateWhen, function startValidation () {\n validationTriggeredHandler($field);\n });\n}\n\nfunction validationTriggeredHandler($field) {\n var noValidate = getValidationOption($field, 'novalidate');\n\n if (noValidate) {\n changeFieldState($field, VALID);\n return;\n }\n\n return startValidating($field);\n}\n\nfunction getValidationOption($field, option) {\n var defaults = {\n 'when': 'change'\n };\n var optionValue = $field.attr('data-' + ATTRIBUTE_VALIDATION_OPTION_PREFIX + option);\n if (!optionValue) {\n optionValue = defaults[option];\n }\n\n return optionValue;\n}\n\nfunction startValidating($field) {\n clearFieldMessages($field);\n\n var validatorsToRun = getActivatedValidators($field);\n\n changeFieldState($field, VALIDATING);\n var deferreds = runValidatorsAndGetDeferred($field, validatorsToRun);\n var fieldValidators = $.when.apply($, deferreds);\n fieldValidators.done(function () {\n changeFieldState($field, VALID);\n });\n return fieldValidators;\n}\n\nfunction clearFieldMessages($field) {\n setFieldNotification(getDisplayField($field), 'none');\n}\n\nfunction getValidators() {\n return validatorRegister.validators();\n}\n\nfunction getActivatedValidators($field) {\n var callList = [];\n getValidators().forEach(function (validator, index) {\n var validatorTrigger = validator.validatorTrigger;\n var runThisValidator = $field.is(validatorTrigger);\n if (runThisValidator) {\n callList.push(index);\n }\n });\n\n return callList;\n}\n\nfunction runValidatorsAndGetDeferred($field, validatorsToRun) {\n var allDeferreds = [];\n\n validatorsToRun.forEach(function (validatorIndex) {\n var validatorFunction = getValidators()[validatorIndex].validatorFunction;\n var deferred = new $.Deferred();\n var validatorContext = createValidatorContext($field, deferred);\n validatorFunction(validatorContext);\n\n allDeferreds.push(deferred);\n });\n\n return allDeferreds;\n}\n\nfunction createValidatorContext($field, validatorDeferred) {\n var context = {\n validate: function () {\n validatorDeferred.resolve();\n },\n invalidate: function (message) {\n changeFieldState($field, INVALID, message);\n validatorDeferred.reject();\n },\n args: createArgumentAccessorFunction($field),\n el: $field[0],\n $el: $field\n };\n\n deprecate.prop(context, '$el', {\n sinceVersion: '5.9.0',\n removeInVersion: '9.0.0',\n alternativeName: 'el',\n extraInfo: 'See https://ecosystem.atlassian.net/browse/AUI-3263.'\n });\n\n return context;\n}\n\nfunction createArgumentAccessorFunction($field) {\n return function (arg) {\n return $field.attr('data-' + ATTRIBUTE_VALIDATION_OPTION_PREFIX + arg) || $field.attr(arg);\n };\n}\n\nfunction changeFieldState($field, state, message) {\n $field.attr('data-' + ATTRIBUTE_FIELD_STATE, state);\n\n if (state === UNVALIDATED) {\n return;\n }\n\n $field.trigger($.Event(EVENT_FIELD_STATE_CHANGED));\n\n var $displayField = getDisplayField($field);\n\n var stateToNotificationTypeMap = {};\n stateToNotificationTypeMap[VALIDATING] = 'wait';\n stateToNotificationTypeMap[INVALID] = 'error';\n stateToNotificationTypeMap[VALID] = 'success';\n\n var notificationType = stateToNotificationTypeMap[state];\n\n if (state === VALIDATING) {\n showSpinnerIfSlow($field);\n } else {\n setFieldNotification($displayField, notificationType, message);\n }\n\n}\n\nfunction showSpinnerIfSlow($field) {\n setTimeout(function () {\n let stillValidating = getFieldState($field) === VALIDATING;\n if (stillValidating) {\n setFieldNotification($field, 'wait');\n setFieldSpinner($field, true)\n }\n }, 500);\n}\n\nfunction setFieldNotification($field, type, message) {\n const spinnerWasVisible = isSpinnerVisible($field);\n removeIconOnlyNotifications($field);\n const skipShowingSuccessNotification = (type === 'success') && !spinnerWasVisible;\n if (skipShowingSuccessNotification) {\n return;\n }\n\n if (type === 'none') {\n removeFieldNotification($field, 'error');\n } else {\n const previousMessage = $field.attr(ATTRIBUTE_NOTIFICATION_PREFIX + type) || '[]';\n const newMessages = message ? combineJSONMessages(message, previousMessage) : [];\n $field.attr(ATTRIBUTE_NOTIFICATION_PREFIX + type, JSON.stringify(newMessages));\n if (type === 'error') {\n appendErrorMessages($field, newMessages);\n }\n }\n}\n\nfunction removeIconOnlyNotifications($field) {\n removeFieldNotification($field, 'wait');\n setFieldSpinner($field, false);\n removeFieldNotification($field, 'success');\n}\n\nfunction removeFieldNotification($field, type) {\n $field.removeAttr(ATTRIBUTE_NOTIFICATION_PREFIX + type);\n if (type === 'error') {\n getMessageContainer($field, type).remove();\n }\n}\n\nfunction isSpinnerVisible($field) {\n return $field.is('[' + ATTRIBUTE_NOTIFICATION_PREFIX + 'wait]');\n}\n\nfunction combineJSONMessages(newString, previousString) {\n const previousStackedMessageList = JSON.parse(previousString);\n return previousStackedMessageList.concat([newString]);\n}\n\nfunction getDisplayField($field) {\n var displayFieldID = getValidationOption($field, 'displayfield');\n var notifyOnSelf = (displayFieldID === undefined);\n return notifyOnSelf ? $field : $('#' + displayFieldID);\n}\n\nfunction getFieldState($field) {\n return $field.attr('data-' + ATTRIBUTE_FIELD_STATE);\n}\n\n/**\n * Trigger validation on a field manually\n * @param $field the field that validation should be triggered for\n */\nfunction validateField($field) {\n $field = $($field);\n validationTriggeredHandler($field);\n}\n\n/**\n * Form scrolling and submission prevent based on validation state\n * -If the form is unvalidated, validate all fields\n * -If the form is invalid, go to the first invalid element\n * -If the form is validating, wait for them to validate and then try submitting again\n * -If the form is valid, allow form submission\n */\n$(document).on('submit', function (e) {\n var form = e.target;\n var $form = $(form);\n\n var formState = getFormStateName($form);\n if (formState === UNVALIDATED) {\n delaySubmitUntilStateChange($form, e);\n validateUnvalidatedFields($form);\n } else if (formState === VALIDATING) {\n delaySubmitUntilStateChange($form, e);\n } else if (formState === INVALID) {\n e.preventDefault();\n selectFirstInvalid($form);\n } else if (formState === VALID) {\n var validSubmitEvent = $.Event('aui-valid-submit');\n $form.trigger(validSubmitEvent);\n var preventNormalSubmit = validSubmitEvent.isDefaultPrevented();\n if (preventNormalSubmit) {\n e.preventDefault(); //users can bind to aui-valid-submit for ajax forms\n }\n }\n});\n\nfunction delaySubmitUntilStateChange($form, event) {\n event.preventDefault();\n $form.one(EVENT_FIELD_STATE_CHANGED, function () {\n $form.trigger('submit');\n });\n}\n\nfunction getFormStateName($form) {\n var $fieldCollection = $form.find('.' + CLASS_VALIDATION_INITIALISED);\n var fieldStates = getFieldCollectionStateNames($fieldCollection);\n var wholeFormState = mergeStates(fieldStates);\n return wholeFormState;\n}\n\nfunction getFieldCollectionStateNames($fields) {\n var states = $.map($fields, function (field) {\n return getFieldState($(field));\n });\n return states;\n}\n\nfunction mergeStates(stateNames) {\n var containsInvalidState = stateNames.indexOf(INVALID) !== -1;\n var containsUnvalidatedState = stateNames.indexOf(UNVALIDATED) !== -1;\n var containsValidatingState = stateNames.indexOf(VALIDATING) !== -1;\n\n if (containsInvalidState) {\n return INVALID;\n } else if (containsUnvalidatedState) {\n return UNVALIDATED;\n } else if (containsValidatingState) {\n return VALIDATING;\n } else {\n return VALID;\n }\n}\n\nfunction validateUnvalidatedFields($form) {\n var $unvalidatedElements = getFieldsInFormWithState($form, UNVALIDATED);\n $unvalidatedElements.each(function (index, el) {\n validator.validate($(el));\n });\n}\n\nfunction selectFirstInvalid($form) {\n var $firstInvalidField = getFieldsInFormWithState($form, INVALID).first();\n $firstInvalidField.focus();\n}\n\nfunction getFieldsInFormWithState($form, state) {\n var selector = '[data-' + ATTRIBUTE_FIELD_STATE + '=' + state + ']';\n return $form.find(selector);\n}\n\n\nconst validator = {\n register: validatorRegister.register,\n validate: validateField\n};\n\nskate(ATTRIBUTE_VALIDATION_FIELD_COMPONENT, {\n attached: function (field) {\n if (field.form) {\n field.form.setAttribute('novalidate', 'novalidate');\n }\n var $field = $(field);\n initValidation($field);\n skate.init(field); //needed to kick off form notification skate initialisation\n },\n type: skate.type.ATTRIBUTE\n});\n\namdify('aui/form-validation', validator);\nglobalize('formValidation', validator);\nexport default validator;\n","import $ from '../jquery';\nimport amdify from '../internal/amdify';\nimport format from '../format'; // eslint-disable-line no-unused-vars\nimport i18n from '../i18n'; // eslint-disable-line no-unused-vars\nimport validatorRegister from './validator-register';\n\n//Input length\nfunction minMaxLength(field) {\n var fieldValueLength = field.el.value.length;\n let fieldIsEmpty = fieldValueLength === 0;\n var minlength = parseInt(field.args('minlength'), 10);\n var maxlength = parseInt(field.args('maxlength'), 10);\n\n if (minlength && maxlength && minlength === maxlength && (!fieldIsEmpty && fieldValueLength !== minlength)) {\n const exactlengthMessage = makeMessage('exactlength', field.args, [minlength]);\n field.invalidate(exactlengthMessage);\n } else if (minlength && (fieldValueLength < minlength && !fieldIsEmpty)) {\n const minlengthMessage = makeMessage('minlength', field.args);\n field.invalidate(minlengthMessage);\n } else if (maxlength && (fieldValueLength > maxlength)) {\n const maxlengthMessage = makeMessage('maxlength', field.args);\n field.invalidate(maxlengthMessage);\n } else {\n field.validate();\n }\n}\nvalidatorRegister.register(['maxlength', 'minlength'], minMaxLength); //AUI-prefixed attribute is deprecated as of 5.9.0\nvalidatorRegister.register('[maxlength],[minlength]', minMaxLength);\n\n//Field matching\nvalidatorRegister.register(['matchingfield'], function (field) {\n var thisFieldValue = field.el.value;\n var matchingField = document.getElementById(field.args('matchingfield'));\n var matchingFieldValue = matchingField.value;\n\n var matchingFieldMessage = makeMessage('matchingfield', field.args, [thisFieldValue, matchingFieldValue]);\n\n var shouldHidePasswords = isPasswordField(field.el) || isPasswordField(matchingField);\n if (shouldHidePasswords) {\n matchingFieldMessage = makeMessage('matchingfield-novalue', field.args);\n }\n\n if (!thisFieldValue || !matchingFieldValue){\n field.validate();\n } else if (matchingFieldValue !== thisFieldValue) {\n field.invalidate(matchingFieldMessage);\n } else {\n field.validate();\n }\n});\n\nfunction isPasswordField(field) {\n return field.getAttribute('type') === 'password';\n}\n\n//Banned words\nvalidatorRegister.register(['doesnotcontain'], function (field) {\n var doesNotContainMessage = makeMessage('doesnotcontain', field.args);\n\n if (field.el.value.indexOf(field.args('doesnotcontain')) === -1) {\n field.validate();\n } else {\n field.invalidate(doesNotContainMessage);\n }\n});\n\n//Matches regex\n\nfunction matchesRegex(val, regex){\n var matches = val.match(regex);\n if (!matches) {\n return false;\n }\n var isExactMatch = (val === matches[0]);\n return isExactMatch;\n}\n\nfunction pattern(field) {\n var patternMessage = makeMessage('pattern', field.args);\n\n if (matchesRegex(field.el.value, new RegExp(field.args('pattern')))) {\n field.validate();\n } else {\n field.invalidate(patternMessage);\n }\n}\n\nvalidatorRegister.register(['pattern'], pattern); //AUI-prefixed attribute is deprecated as of 5.9.0\nvalidatorRegister.register('[pattern]', pattern);\n\n//Native Required\nfunction required(field) {\n var requiredMessage = makeMessage('required', field.args);\n if (field.el.value) {\n field.validate();\n } else {\n field.invalidate(requiredMessage);\n }\n}\nvalidatorRegister.register(['required'], required); //AUI-prefixed attribute is deprecated as of 5.9.0\nvalidatorRegister.register('[required]', required);\n\n//Field value range (between min and max)\n\nfunction minOrMax(field) {\n var validNumberMessage = makeMessage('validnumber', field.args);\n\n var fieldValue = parseInt(field.el.value, 10);\n if (isNaN(fieldValue)) {\n field.invalidate(validNumberMessage);\n return;\n }\n\n var minValue = field.args('min');\n var maxValue = field.args('max');\n\n if (minValue && (fieldValue < parseInt(minValue, 10))) {\n field.invalidate(makeMessage('min', field.args));\n } else if (maxValue && (fieldValue > parseInt(maxValue, 10))){\n field.invalidate(makeMessage('max', field.args));\n } else {\n field.validate();\n }\n}\nvalidatorRegister.register(['min', 'max'], minOrMax); //AUI-prefixed attribute is deprecated as of 5.9.0\nvalidatorRegister.register('[min],[max]', minOrMax);\n\n//Date format\nvalidatorRegister.register(['dateformat'], function (field) {\n var dateFormatSymbolic = field.args('dateformat');\n var dateFormatMessage = makeMessage('dateformat', field.args);\n\n var symbolRegexMap = {\n 'Y': '[0-9]{4}',\n 'y': '[0-9]{2}',\n 'm': '(0?[1-9]|10|11|12)',\n 'M': '[Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec]',\n 'D': '[Mon|Tue|Wed|Thu|Fri|Sat|Sun]',\n 'd': '([0-2]?[1-9]|10|20|30|31)'\n };\n\n var dateFormatSymbolArray = dateFormatSymbolic.split('');\n var dateFormatRegexString = '';\n\n dateFormatSymbolArray.forEach(function (dateSymbol) {\n var isRecognisedSymbol = symbolRegexMap.hasOwnProperty(dateSymbol);\n if (isRecognisedSymbol) {\n dateFormatRegexString += symbolRegexMap[dateSymbol];\n } else {\n dateFormatRegexString += dateSymbol;\n }\n });\n\n var dateFormatRegex = new RegExp(dateFormatRegexString + '$', 'i');\n var isValidDate = matchesRegex(field.el.value, dateFormatRegex);\n\n if (isValidDate) {\n field.validate();\n } else {\n field.invalidate(dateFormatMessage);\n }\n});\n\n//Checkbox count\nvalidatorRegister.register(['minchecked', 'maxchecked'], function (field) {\n var amountChecked = $(field.el).find(':checked').length;\n var aboveMin = !field.args('minchecked') || (amountChecked >= field.args('minchecked'));\n var belowMax = !field.args('maxchecked') || (amountChecked <= field.args('maxchecked'));\n\n var belowMinMessage = makeMessage('minchecked', field.args);\n var aboveMaxMessage = makeMessage('maxchecked', field.args);\n\n if (aboveMin && belowMax) {\n field.validate();\n } else if (!aboveMin) {\n field.invalidate(belowMinMessage);\n } else if (!belowMax) {\n field.invalidate(aboveMaxMessage);\n }\n});\n\n/*\n Retrieves a message for a plugin validator through the data attributes or the default (which is in the i18n file)\n */\nfunction makeMessage(key, accessorFunction, customTokens) {\n var inFlatpackMode = i18n.keys !== undefined;\n var defaultMessage;\n if (inFlatpackMode) {\n defaultMessage = i18n.keys['aui.validation.message.' + key];\n } else {\n defaultMessage = pluginI18nMessages[key];\n }\n\n var messageTokens = customTokens;\n if (!customTokens) {\n messageTokens = [accessorFunction(key)];\n }\n\n var customMessageUnformatted = accessorFunction(key + '-msg');\n var formattingArguments;\n\n if (customMessageUnformatted) {\n formattingArguments = [customMessageUnformatted].concat(messageTokens);\n } else {\n formattingArguments = [defaultMessage].concat(messageTokens);\n }\n\n return AJS.format.apply(null, formattingArguments);\n}\n\n/*\n The value i18n.getText('aui.validation.message...') (defaultMessage) cannot be refactored as it\n must appear verbatim for the plugin I18n transformation to pick it up\n */\nvar pluginI18nMessages = {\n minlength: i18n.getText('aui.validation.message.minlength'),\n maxlength: i18n.getText('aui.validation.message.maxlength'),\n exactlength: i18n.getText('aui.validation.message.exactlength'),\n matchingfield: i18n.getText('aui.validation.message.matchingfield'),\n 'matchingfield-novalue': i18n.getText('aui.validation.message.matchingfield-novalue'),\n doesnotcontain: i18n.getText('aui.validation.message.doesnotcontain'),\n pattern: i18n.getText('aui.validation.message.pattern'),\n required: i18n.getText('aui.validation.message.required'),\n validnumber: i18n.getText('aui.validation.message.validnumber'),\n min: i18n.getText('aui.validation.message.min'),\n max: i18n.getText('aui.validation.message.max'),\n dateformat: i18n.getText('aui.validation.message.dateformat'),\n minchecked: i18n.getText('aui.validation.message.minchecked'),\n maxchecked: i18n.getText('aui.validation.message.maxchecked')\n};\n\namdify('aui/form-validation/basic-validators');\n","import './aui.component.static-header';\nimport './aui.component.trigger';\nimport './aui.component.dropdown2';\nimport '@atlassian/aui/src/less/aui-header-responsive.less';\nimport '@atlassian/aui/src/js/aui/header.js';\nexport { default as Header } from '@atlassian/aui/src/js/aui/header-async';\n","import createHeader from './internal/header/create-header';\nimport skate from './internal/skate';\n\nconst Header = skate('aui-header', {\n type: skate.type.CLASSNAME,\n created: function (element) {\n createHeader(element);\n }\n});\n\nexport default Header;\n","import './styles/aui.page.reset';\nimport './styles/aui.page.typography';\nimport './styles/aui.page.iconography';\nimport './styles/aui.page.links';\nimport './styles/aui.pattern.button';\nimport './styles/aui.pattern.icon';\nimport './styles/aui.pattern.nav'; // for the basic aui-nav pattern only\nimport '@atlassian/aui/src/less/aui-header.less';\nimport '@atlassian/aui/src/less/adg-header-quicksearch.less';\nimport '@atlassian/aui/src/less/adg-header-buttons.less';\nimport '@atlassian/brand-logos/dist/aui-legacy/aui-header.css'; // todo: remove in AUI 9.\nexport {};\n","import $ from './jquery';\nimport createHeader from './internal/header/create-header';\nimport * as deprecate from './internal/deprecation';\nimport globalize from './internal/globalize';\n\nfunction findAndCreateHeaders () {\n $('.aui-header').each(function () {\n createHeader(this);\n });\n}\n\n$(findAndCreateHeaders);\n\nconst responsiveheader = {};\nresponsiveheader.setup = deprecate.fn(findAndCreateHeaders, 'responsiveheader.setup', {\n removeInVersion: '9.0.0',\n sinceVersion: '5.8.0',\n extraInfo: 'No need to manually initialise anymore as this is now a web component.'\n});\n\nglobalize('responsiveheader', responsiveheader);\n\nexport default responsiveheader;\n","import './styles/aui.pattern.forms';\nimport './aui.component.inline-dialog2'; // so that the inline dialog styles get placed before date picker.\nimport '@atlassian/aui/src/less/aui-date-picker.less';\nexport { default as DatePicker } from '@atlassian/aui/src/js/aui/date-picker';\n","import $ from './jquery';\nimport datepickerUI from 'jquery-ui/ui/widgets/datepicker';\nimport * as logger from './internal/log';\nimport { supportsDateField } from './internal/browser';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport i18n from './i18n';\nimport InlineDialogEl from './inline-dialog2';\nimport generateUniqueId from './unique-id';\n\nconst makePopup = ({horizontalAlignment, datePickerUUID}) => {\n const popupInlineDialogElement = new InlineDialogEl();\n popupInlineDialogElement.id = datePickerUUID;\n\n const popup = $(popupInlineDialogElement);\n popup.attr('persistent', '');\n popup.attr('data-aui-focus', 'false');\n popup.attr('alignment', `bottom ${horizontalAlignment}`);\n popup.addClass('aui-datepicker-dialog');\n\n return popup;\n};\n\nconst makeConfig = ({dateFormat, $field, onSelect, hide, onChangeMonthYear}) => ({\n 'dateFormat': dateFormat,\n 'defaultDate': $field.val(),\n 'maxDate': $field.attr('max'),\n 'minDate': $field.attr('min'),\n 'nextText': '>',\n 'onSelect': function (dateText) {\n $field.val(dateText);\n $field.trigger('change');\n hide();\n // TODO make sure the docs are explicit about the fact that onSelect cannot be an arrow function\n onSelect && onSelect.call(this, dateText);\n },\n onChangeMonthYear,\n 'prevText': '<'\n});\n\nconst initCalendar = ({config, popupContents, getCalendarNode, hint}) => {\n const calendar = $(getCalendarNode());\n\n calendar.datepicker(config);\n\n let $hint;\n if (hint) {\n $hint = $('<div/>').addClass('aui-datepicker-hint');\n $hint.append('<span/>').text(hint);\n popupContents.append($hint);\n }\n\n return calendar;\n};\n\nconst makeDefaultPopupController = ($field, datePickerUUID) => {\n let popup;\n let popupContents;\n let parentPopup;\n let isTrackingDatePickerFocus = false; // used to prevent multiple bindings of handleDatePickerFocus within handleFieldBlur\n\n\n const $body = $('body');\n\n const handleDatePickerFocus = (event) => {\n let $eventTarget = $(event.target);\n let isTargetInput = $eventTarget.closest(popupContents).length || $eventTarget.is($field);\n let isTargetPopup = $eventTarget.closest('.ui-datepicker-header').length;\n\n // Hide if we're clicking anywhere else but the input or popup OR if esc is pressed.\n if ((!isTargetInput && !isTargetPopup) || event.keyCode === keyCode.ESCAPE) {\n hideDatePicker();\n isTrackingDatePickerFocus = false;\n return;\n }\n\n if ($eventTarget.get(0) !== $field.get(0)) {\n event.preventDefault();\n }\n };\n\n const handleFieldBlur = () => {\n // Trigger blur if event is keydown and esc OR is focusout.\n if (!(isTrackingDatePickerFocus)) {\n $body.on('focus blur click mousedown', '*', handleDatePickerFocus);\n isTrackingDatePickerFocus = true;\n }\n };\n\n\n const createPolyfill = function () {\n // bind additional field processing events\n $body.on('keydown', handleDatePickerFocus);\n $field.on('focusout keydown', handleFieldBlur);\n\n\n };\n\n const getPopupContents = ({$field}) => {\n const calculateHorizontalAlignment = $field => {\n let inLeftHalf = $field.offset().left < window.innerWidth / 2;\n return inLeftHalf ? 'left' : 'right';\n };\n\n popup = makePopup({horizontalAlignment: calculateHorizontalAlignment($field), datePickerUUID});\n\n parentPopup = $field.closest('aui-inline-dialog').get(0);\n if (parentPopup) {\n parentPopup._datePickerPopup = popup; // AUI-2696 - hackish coupling to control inline-dialog close behaviour.\n $(parentPopup).on('aui-hide', e => {\n if (isTrackingDatePickerFocus) {\n e.preventDefault();\n }\n $body.off('focus blur', '*', handleDatePickerFocus);\n if (parentPopup && parentPopup._datePickerPopup) {\n delete parentPopup._datePickerPopup;\n }\n });\n }\n\n $body.append(popup);\n\n popupContents = popup;\n\n return popup;\n };\n\n const handleFieldFocus = () => {\n if (!popup.get(0).open) {\n showDatePicker()\n }\n };\n\n const showDatePicker = () => {\n popup.get(0).open = true;\n };\n\n const hideDatePicker = () => {\n popup.get(0).open = false;\n };\n\n const handleChangeMonthYear = () => {\n // defer refresh call until current stack has cleared (after month has rendered)\n setTimeout(popup.refresh, 0);\n };\n\n const getCalendarNode = () =>\n popup.get(0).childNodes[0];\n\n const destroyPolyfill = () => {\n // goodbye, cruel world!\n hideDatePicker();\n\n $field.attr('placeholder', null);\n\n $field.off('focus click', handleFieldFocus);\n $field.off('focusout keydown', handleFieldBlur);\n\n $body.off('keydown', handleFieldBlur);\n $body.off('focus blur click mousedown keydown', handleDatePickerFocus);\n };\n\n return {\n calendarContainerSelector: null,\n getPopupContents,\n handleFieldFocus,\n showDatePicker,\n hideDatePicker,\n handleChangeMonthYear,\n getCalendarNode,\n destroyPolyfill,\n createPolyfill\n }\n};\n\nconst initPolyfill = function (\n {datePicker},\n {\n calendarContainerSelector,\n getPopupContents,\n handleFieldFocus,\n showDatePicker,\n hideDatePicker,\n handleChangeMonthYear,\n getCalendarNode,\n destroyPolyfill,\n createPolyfill\n }\n) {\n\n const $field = datePicker.getField();\n const options = datePicker.getOptions();\n const datePickerUUID = datePicker.getUUID();\n\n let calendar;\n let attributeHandler;\n let popupContents;\n\n // -----------------------------------------------------------------\n // extend datePicker public API (side effects)----------------------\n // -----------------------------------------------------------------\n {\n const withCalendar = callback => value => {\n if (typeof calendar !== 'undefined') {\n return callback(value)\n }\n };\n\n const destroyCalendar = withCalendar(() => {\n calendar.datepicker('destroy');\n });\n\n datePicker.show = showDatePicker;\n\n datePicker.hide = hideDatePicker;\n\n datePicker.destroyPolyfill = () => {\n\n destroyPolyfill();\n\n $field.off('propertychange keyup input paste', handleFieldUpdate);\n\n if (attributeHandler) {\n attributeHandler.disconnect();\n attributeHandler = null;\n }\n\n if (DatePicker.prototype.browserSupportsDateField) {\n $field.get(0).type = 'date';\n }\n\n destroyCalendar();\n\n // TODO: figure out a way to tear down the popup (if necessary)\n\n delete datePicker.destroyPolyfill;\n\n delete datePicker.show;\n delete datePicker.hide;\n\n };\n\n datePicker.setDate = withCalendar(value => {\n calendar.datepicker('setDate', value)\n });\n\n datePicker.getDate = withCalendar(() => calendar.datepicker('getDate'));\n\n datePicker.setMin = withCalendar(value => calendar.datepicker('option', 'minDate', value));\n\n datePicker.setMax = withCalendar(value => calendar.datepicker('option', 'maxDate', value));\n }\n\n const handleFieldUpdate = (event) => {\n let val = $(event.currentTarget).val();\n // IE10/11 fire the 'input' event when internally showing and hiding\n // the placeholder of an input. This was cancelling the initial click\n // event and preventing the selection of the first date. The val check here\n // is a workaround to assure we have legitimate user input that should update\n // the calendar\n if (val) {\n calendar.datepicker('setDate', $field.val());\n }\n };\n\n\n // -----------------------------------------------------------------\n // polyfill bootstrap ----------------------------------------------\n // -----------------------------------------------------------------\n\n\n if (!(options.languageCode in DatePicker.prototype.localisations)) {\n options.languageCode = '';\n }\n const i18nConfig = DatePicker.prototype.localisations;\n\n $field.attr('aria-controls', datePickerUUID);\n\n if (!calendarContainerSelector) {\n popupContents = getPopupContents({$field});\n } else {\n popupContents = $(calendarContainerSelector);\n popupContents.addClass('aui-datepicker-dialog');\n }\n\n\n if (typeof calendar === 'undefined') {\n if (typeof $field.attr('step') !== 'undefined') {\n logger.log('WARNING: The date picker polyfill currently does not support the step attribute!');\n }\n const baseConfig = makeConfig({\n dateFormat: options.dateFormat,\n $field,\n onSelect: options.onSelect,\n hide: datePicker.hide,\n onChangeMonthYear: handleChangeMonthYear\n });\n const config = $.extend(undefined, baseConfig, i18nConfig);\n\n if (options.firstDay > -1) {\n config.firstDay = options.firstDay;\n }\n\n calendar = initCalendar({\n config,\n popupContents,\n getCalendarNode: () =>\n calendarContainerSelector || getCalendarNode(),\n hint: options.hint\n });\n\n createPolyfill();\n\n $field.on('propertychange keyup input paste', handleFieldUpdate);\n\n\n // bind attribute handlers to account for html5 attributes\n attributeHandler = new MutationObserver(function (mutationsList) {\n mutationsList.forEach(function (mutation) {\n if (mutation.attributeName === 'min') {\n datePicker.setMin(mutation.target.getAttribute('min'));\n } else if (mutation.attributeName === 'max') {\n datePicker.setMax(mutation.target.getAttribute('max'));\n }\n });\n });\n attributeHandler.observe($field.get(0), {attributes: true});\n }\n\n\n // bind what we need to start off with\n $field.on('focus click', handleFieldFocus); // the click is for fucking opera... Y U NO FIRE FOCUS EVENTS PROPERLY???\n\n // give users a hint that this is a date field; note that placeholder isn't technically a valid attribute\n // according to the spec...\n $field.attr('placeholder', options.dateFormat);\n\n // override the browser's default date field implementation (if applicable)\n // since IE doesn't support date input fields, we should be fine...\n if (options.overrideBrowserDefault && DatePicker.prototype.browserSupportsDateField) {\n $field.get(0).type = 'text';\n\n //workaround for this issue in Edge: https://connect.microsoft.com/IE/feedback/details/1603512/changing-an-input-type-to-text-does-not-set-the-value\n let value = $field.get(0).getAttribute('value'); //can't use jquery to get the attribute because it doesn't work in Edge\n if (value) {\n $field.get(0).value = value;\n }\n }\n\n};\n\nconst noop = () => {\n};\n\nfunction DatePicker(field, baseOptions) {\n let options = {};\n\n const datePickerUUID = generateUniqueId('date-picker');\n\n const $field = $(field);\n $field.attr('data-aui-dp-uuid', datePickerUUID);\n\n const datePicker = {\n getUUID: () => datePickerUUID,\n destroyPolyfill: noop, // may be overridden by initPolyfill\n getField: () => $field,\n getOptions: () => options,\n reset: () => {\n datePicker.destroyPolyfill();\n\n const browserDoesNotSupportDateField = !DatePicker.prototype.browserSupportsDateField;\n const shouldOverrideBrowserDefault = options.overrideBrowserDefault;\n\n if (\n browserDoesNotSupportDateField ||\n shouldOverrideBrowserDefault\n ) {\n const popupController = makeDefaultPopupController($field, datePickerUUID);\n initPolyfill({datePicker}, popupController);\n }\n },\n reconfigure: newOptions => {\n options = $.extend(undefined, DatePicker.prototype.defaultOptions, newOptions);\n datePicker.reset();\n }\n };\n\n datePicker.reconfigure(baseOptions);\n\n return datePicker;\n}\n\n// -------------------------------------------------------------------------\n// things that should be common --------------------------------------------\n// -------------------------------------------------------------------------\n\nDatePicker.prototype.browserSupportsDateField = supportsDateField();\n\nDatePicker.prototype.defaultOptions = {\n overrideBrowserDefault: false,\n firstDay: -1,\n languageCode: $('html').attr('lang') || 'en-AU',\n dateFormat: datepickerUI.W3C // same as $.datepicker.ISO_8601\n};\n\nfunction CalendarWidget(calendarNode, baseOptions) {\n const options = $.extend({\n 'nextText': '>',\n 'prevText': '<'\n }, baseOptions);\n\n const $calendarNode = $(calendarNode);\n\n const $result = $calendarNode.addClass('aui-datepicker-dialog').datepicker(options);\n\n if (options.hint) {\n const $hint = $('<div/>').addClass('aui-datepicker-hint');\n $hint.append('<span/>').text(options.hint);\n $result.append($hint);\n }\n\n $result.reconfigure = (options) => {\n $result.datepicker('destroy');\n $result.datepicker(options);\n };\n\n $result.destroy = () => {\n $result.datepicker('destroy');\n };\n\n return $result\n}\n\n// adapted from the jQuery UI Datepicker widget (v1.8.16), with the following changes:\n// - dayNamesShort -> dayNamesMin\n// - unnecessary attributes omitted\n/*\nCODE to extract codes out:\n\nvar langCode, langs, out;\nlangs = jQuery.datepicker.regional;\nout = {};\n\nfor (langCode in langs) {\n if (langs.hasOwnProperty(langCode)) {\n out[langCode] = {\n 'dayNames': langs[langCode].dayNames,\n 'dayNamesMin': langs[langCode].dayNamesShort, // this is deliberate\n 'firstDay': langs[langCode].firstDay,\n 'isRTL': langs[langCode].isRTL,\n 'monthNames': langs[langCode].monthNames,\n 'showMonthAfterYear': langs[langCode].showMonthAfterYear,\n 'yearSuffix': langs[langCode].yearSuffix\n };\n }\n}\n\n */\n\nDatePicker.prototype.localisations = {\n 'dayNames': [i18n.getText('ajs.datepicker.localisations.day-names.sunday'),\n i18n.getText('ajs.datepicker.localisations.day-names.monday'),\n i18n.getText('ajs.datepicker.localisations.day-names.tuesday'),\n i18n.getText('ajs.datepicker.localisations.day-names.wednesday'),\n i18n.getText('ajs.datepicker.localisations.day-names.thursday'),\n i18n.getText('ajs.datepicker.localisations.day-names.friday'),\n i18n.getText('ajs.datepicker.localisations.day-names.saturday')],\n 'dayNamesMin': [i18n.getText('ajs.datepicker.localisations.day-names-min.sunday'),\n i18n.getText('ajs.datepicker.localisations.day-names-min.monday'),\n i18n.getText('ajs.datepicker.localisations.day-names-min.tuesday'),\n i18n.getText('ajs.datepicker.localisations.day-names-min.wednesday'),\n i18n.getText('ajs.datepicker.localisations.day-names-min.thursday'),\n i18n.getText('ajs.datepicker.localisations.day-names-min.friday'),\n i18n.getText('ajs.datepicker.localisations.day-names-min.saturday')],\n 'firstDay': i18n.getText('ajs.datepicker.localisations.first-day'),\n 'isRTL': i18n.getText('ajs.datepicker.localisations.is-RTL') === 'true',\n 'monthNames': [i18n.getText('ajs.datepicker.localisations.month-names.january'),\n i18n.getText('ajs.datepicker.localisations.month-names.february'),\n i18n.getText('ajs.datepicker.localisations.month-names.march'),\n i18n.getText('ajs.datepicker.localisations.month-names.april'),\n i18n.getText('ajs.datepicker.localisations.month-names.may'),\n i18n.getText('ajs.datepicker.localisations.month-names.june'),\n i18n.getText('ajs.datepicker.localisations.month-names.july'),\n i18n.getText('ajs.datepicker.localisations.month-names.august'),\n i18n.getText('ajs.datepicker.localisations.month-names.september'),\n i18n.getText('ajs.datepicker.localisations.month-names.october'),\n i18n.getText('ajs.datepicker.localisations.month-names.november'),\n i18n.getText('ajs.datepicker.localisations.month-names.december')],\n 'showMonthAfterYear': i18n.getText('ajs.datepicker.localisations.show-month-after-year') === 'true',\n 'yearSuffix': i18n.getText('ajs.datepicker.localisations.year-suffix')\n};\n\n\n// -------------------------------------------------------------------------\n// finally, integrate with jQuery for convenience --------------------------\n// -------------------------------------------------------------------------\nconst key = 'aui-datepicker';\n\nconst makePlugin = (WidgetConstructor) => function (options) {\n let picker = this.data(key);\n if (!picker) {\n picker = new WidgetConstructor(this, options);\n this.data(key, picker);\n } else if (typeof options === 'object') {\n picker.reconfigure(options);\n }\n return picker;\n};\n\n$.fn.datePicker = makePlugin(DatePicker);\nglobalize('DatePicker', DatePicker);\n\n$.fn.calendarWidget = makePlugin(CalendarWidget);\nglobalize('CalendarWidget', CalendarWidget);\n\nexport default DatePicker;\nexport { CalendarWidget }\n","// jscs:disable maximumLineLength\n/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */\n/*!\n * jQuery UI Datepicker 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: http://api.jqueryui.com/datepicker/\n//>>demos: http://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"../version\",\n\t\t\t\"../keycode\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\n$.extend( $.ui, { datepicker: { version: \"1.12.1\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n/* Date picker manager.\n Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n Settings for (groups of) date pickers are maintained in an instance object,\n allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n\t\t\t\"July\",\"August\",\"September\",\"October\",\"November\",\"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\" // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param settings object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t * @param settings object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span class='\" + this._appendClass + \"'>\" + appendText + \"</span>\" );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\t\t\tinst.trigger = $( this._get( inst, \"buttonImageOnly\" ) ?\n\t\t\t\t$( \"<img/>\" ).addClass( this._triggerClass ).\n\t\t\t\t\tattr( { src: buttonImage, alt: buttonText, title: buttonText } ) :\n\t\t\t\t$( \"<button type='button'></button>\" ).addClass( this._triggerClass ).\n\t\t\t\t\thtml( !buttonImage ? buttonText : $( \"<img/>\" ).attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText } ) ) );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param input element - ignored\n\t * @param date\tstring or Date - the initial date to display\n\t * @param onSelect function - the function to call when a date is selected\n\t * @param settings object - update the dialog date picker instance's settings (anonymous object)\n\t * @param pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = false; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = true; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param target element - the target input field or division or span\n\t * @return object - the associated instance data\n\t * @throws error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t}\n\t\tcatch ( err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param target element - the target input field or division or span\n\t * @param name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param value any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param target element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param target element - the target input field or division or span\n\t * @param date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param target element - the target input field or division or span\n\t * @param noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param input element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year:first\" ).replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param input element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset +\n\t\t\t( period === \"M\" ? this._get( inst, \"showCurrentAtPos\" ) : 0 ), // undo positioning\n\t\t\tperiod );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = $( \"a\", td ).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param date Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param date Date - the date to get the week for\n\t * @return number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param format string - the expected format of the date\n\t * @param value string - the date in the above format\n\t * @param settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D - day name short\n\t * DD - day name long\n\t * m - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M - month name short\n\t * MM - month name long\n\t * y - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param format string - the desired format of the date\n\t * @param date Date - the date value to format\n\t * @param settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param date (Date) the date to check\n\t * @return (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers. These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tprev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'\" +\n\t\t\t\" title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" ) );\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tnext = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'\" +\n\t\t\t\" title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" ) );\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = ( !inst.inline ? \"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\" +\n\t\t\tthis._get( inst, \"closeText\" ) + \"</button>\" : \"\" );\n\n\t\tbuttonPanel = ( showButtonPanel ) ? \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" + ( isRTL ? controls : \"\" ) +\n\t\t\t( this._isInRange( inst, gotoDate ) ? \"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'\" +\n\t\t\t\">\" + currentText + \"</button>\" : \"\" ) + ( isRTL ? \"\" : controls ) + \"</div>\" : \"\";\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) + // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n @param options string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n @return jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\ttypeof options === \"string\" ?\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\t\tapply( $.datepicker, [ this ].concat( otherArgs ) ) :\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.12.1\";\n\nreturn $.datepicker;\n\n} ) );\n","/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\nreturn $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n} ) );\n","import './styles/aui.pattern.table';\nimport '@atlassian/aui/src/less/aui-experimental-restfultable.less';\nexport { default as RestfulTable } from '@atlassian/aui/src/js/aui/restful-table';\n","import $ from './jquery';\nimport 'jquery-ui/ui/core';\nimport 'jquery-ui/ui/widget';\nimport 'jquery-ui/ui/widgets/mouse';\nimport 'jquery-ui/ui/widgets/draggable';\nimport 'jquery-ui/ui/widgets/sortable';\nimport * as logger from './internal/log';\nimport Backbone from 'backbone';\nimport classNames from './restful-table/class-names';\nimport CustomCreateView from './restful-table/custom-create-view';\nimport CustomEditView from './restful-table/custom-edit-view';\nimport CustomReadView from './restful-table/custom-read-view';\nimport dataKeys from './restful-table/data-keys';\nimport EditRow from './restful-table/edit-row';\nimport EntryModel from './restful-table/entry-model';\nimport {triggerEvtForInst} from './restful-table/event-handlers';\nimport events from './restful-table/event-names';\nimport globalize from './internal/globalize';\nimport Row from './restful-table/row';\nimport {spinner} from './restful-table/spinner';\nimport i18n from './i18n';\n\n/**\n * A table whose entries/rows can be retrieved, added and updated via REST (CRUD).\n * It uses backbone.js to sync the table's state back to the server, avoiding page refreshes.\n *\n * @class RestfulTable\n */\nvar RestfulTable = Backbone.View.extend({\n /**\n * @param {!Object} options\n * ... {!Object} resources\n * ... ... {(string|function(function(Array.<Object>)))} all - URL of REST resource OR function that retrieves all entities.\n * ... ... {string} self - URL of REST resource to sync a single entities state (CRUD).\n * ... {!(selector|Element|jQuery)} el - Table element or selector of the table element to populate.\n * ... {!Array.<Object>} columns - Which properties of the entities to render. The id of a column maps to the property of an entity.\n * ... {Object} views\n * ... ... {RestfulTable.EditRow} editRow - Backbone view that renders the edit & create row. Your view MUST extend RestfulTable.EditRow.\n * ... ... {RestfulTable.Row} row - Backbone view that renders the readonly row. Your view MUST extend RestfulTable.Row.\n * ... {boolean} allowEdit - Is the table editable. If true, clicking row will switch it to edit state. Default true.\n * ... {boolean} allowDelete - Can entries be removed from the table, default true.\n * ... {boolean} allowCreate - Can new entries be added to the table, default true.\n * ... {boolean} allowReorder - Can we drag rows to reorder them, default false.\n * ... {boolean} autoFocus - Automatically set focus to first field on init, default false.\n * ... {boolean} reverseOrder - Reverse the order of rows, default false.\n * ... {boolean} silent - Do not trigger a \"refresh\" event on sort, default false.\n * ... {String} id - The id for the table. This id will be used to fire events specific to this instance.\n * ... {string} createPosition - If set to \"bottom\", place the create form at the bottom of the table instead of the top.\n * ... {string} addPosition - If set to \"bottom\", add new rows at the bottom of the table instead of the top. If undefined, createPosition will be used to define where to add the new row.\n * ... {string} noEntriesMsg - Text to display under the table header if it is empty, default empty.\n * ... {string} loadingMsg - Text/HTML to display while loading, default \"Loading\".\n * ... {string} submitAccessKey - Access key for submitting.\n * ... {string} cancelAccessKey - Access key for canceling.\n * ... @property {RestfulTable~deleteConfirmationCallback} deleteConfirmationCallback - function returning Promise determining if row should be deleted or not\n * ... {function(string): (selector|jQuery|Element)} fieldFocusSelector - Element to focus on given a name.\n * ... {EntryModel} model - Backbone model representing a row, default EntryModel.\n * ... {Backbone.Collection} Collection - Backbone collection representing the entire table, default Backbone.Collection.\n * @callback deleteConfirmationCallback\n */\n initialize: function (options) {\n var instance = this;\n\n // combine default and user options\n instance.options = $.extend(true, instance._getDefaultOptions(options), options);\n\n // Prefix events for this instance with this id.\n instance.id = this.options.id;\n\n // faster lookup\n instance._event = events;\n instance.classNames = classNames;\n instance.dataKeys = dataKeys;\n\n // shortcuts to popular elements\n this.$table = $(options.el)\n .addClass(this.classNames.RESTFUL_TABLE)\n .addClass(this.classNames.ALLOW_HOVER)\n .addClass('aui');\n\n this.$table.wrapAll(\"<form class='aui' action='#' />\");\n\n this.$thead = $('<thead/>');\n this.$theadRow = $('<tr />').appendTo(this.$thead);\n this.$tbody = $('<tbody/>');\n\n if (!this.$table.length) {\n throw new Error('RestfulTable: Init failed! The table you have specified [' + this.$table.selector + '] cannot be found.');\n }\n\n if (!this.options.columns) {\n throw new Error(\"RestfulTable: Init failed! You haven't provided any columns to render.\");\n }\n\n if (this.options.deleteConfirmationCallback && !(this.options.deleteConfirmationCallback instanceof Function)) {\n throw new Error('RestfulTable: Init failed! deleteConfirmationCallback is not a function');\n }\n\n // Let user know the table is loading\n this.showGlobalLoading();\n this.options.columns.forEach(function (column) {\n var header = $.isFunction(column.header) ? column.header() : column.header;\n if (typeof header === 'undefined') {\n logger.warn('You have not specified [header] for column [' + column.id + ']. Using id for now...');\n header = column.id;\n }\n\n instance.$theadRow.append('<th>' + header + '</th>');\n });\n\n // columns for submit buttons and loading indicator used when editing\n instance.$theadRow.append('<th></th><th></th>');\n\n // create a new Backbone collection to represent rows (http://documentcloud.github.com/backbone/#Collection)\n this._models = this._createCollection();\n\n // shortcut to the class we use to create rows\n this._rowClass = this.options.views.row;\n\n this.editRows = []; // keep track of rows that are being edited concurrently\n\n this.$table.closest('form').submit(function (e) {\n if (instance.focusedRow) {\n // Delegates saving of row. See EditRow.submit\n instance.focusedRow.trigger(instance._event.SAVE);\n }\n e.preventDefault();\n });\n\n if (this.options.allowReorder) {\n // Add allowance for another cell to the <thead>\n this.$theadRow.prepend('<th />');\n\n // Allow drag and drop reordering of rows\n this.$tbody.sortable({\n handle: '.' + this.classNames.DRAG_HANDLE,\n helper: function (e, elt) {\n var helper = $('<div/>').attr('class', elt.attr('class')).addClass(instance.classNames.MOVEABLE);\n elt.children().each(function () {\n var $td = $(this);\n\n // .offsetWidth/.outerWidth() is broken in webkit for tables, so we do .clientWidth + borders\n // Need to coerce the border-left-width to an in because IE - http://bugs.jquery.com/ticket/10855\n var borderLeft = parseInt(0 + $td.css('border-left-width'), 10);\n var borderRight = parseInt(0 + $td.css('border-right-width'), 10);\n var width = $td[0].clientWidth + borderLeft + borderRight;\n\n helper.append($('<div/>').html($td.html()).attr('class', $td.attr('class')).width(width));\n });\n\n helper = $(\"<div class='aui-restfultable-readonly'/>\").append(helper); // Basically just to get the styles.\n helper.css({left: elt.offset().left}); // To align with the other table rows, since we've locked scrolling on x.\n helper.appendTo(document.body);\n\n return helper;\n },\n start: function (event, ui) {\n var cachedHeight = ui.helper[0].clientHeight;\n var $this = ui.placeholder.find('td');\n\n // Make sure that when we start dragging widths do not change\n ui.item\n .addClass(instance.classNames.MOVEABLE)\n .children().each(function (i) {\n $(this).width($this.eq(i).width());\n });\n\n // Create a <td> to add to the placeholder <tr> to inherit CSS styles.\n var td = '<td colspan=\"' + instance.getColumnCount() + '\">&nbsp;</td>';\n\n ui.placeholder.html(td).css({\n height: cachedHeight,\n visibility: 'visible'\n });\n\n // Stop hover effects etc from occuring as we move the mouse (while dragging) over other rows\n instance.getRowFromElement(ui.item[0]).trigger(instance._event.MODAL);\n },\n stop: function (event, ui) {\n if ($(ui.item[0]).is(':visible')) {\n ui.item\n .removeClass(instance.classNames.MOVEABLE)\n .children().attr('style', '');\n\n ui.placeholder.removeClass(instance.classNames.ROW);\n\n // Return table to a normal state\n instance.getRowFromElement(ui.item[0]).trigger(instance._event.MODELESS);\n }\n },\n update: function (event, ui) {\n var context = {\n row: instance.getRowFromElement(ui.item[0]),\n item: ui.item,\n nextItem: ui.item.next(),\n prevItem: ui.item.prev()\n };\n\n instance.move(context);\n },\n axis: 'y',\n delay: 0,\n containment: 'document',\n cursor: 'move',\n scroll: true,\n zIndex: 8000\n });\n\n // Prevent text selection while reordering.\n this.$tbody.on('selectstart mousedown', function (event) {\n return !$(event.target).is('.' + instance.classNames.DRAG_HANDLE);\n });\n }\n\n if (this.options.allowCreate !== false) {\n\n // Create row responsible for adding new entries ...\n this._createRow = new this.options.views.editRow({\n columns: this.options.columns,\n isCreateRow: true,\n model: this.options.model.extend({\n url: function () {\n return instance.options.resources.self;\n }\n }),\n cancelAccessKey: this.options.cancelAccessKey,\n submitAccessKey: this.options.submitAccessKey,\n allowReorder: this.options.allowReorder,\n fieldFocusSelector: this.options.fieldFocusSelector\n });\n this._createRow.on(this._event.CREATED, function (values) {\n if ((typeof instance.options.addPosition === 'undefined' && instance.options.createPosition === 'bottom') ||\n instance.options.addPosition === 'bottom') {\n instance.addRow(values);\n } else {\n instance.addRow(values, 0);\n }\n });\n this._createRow.on(this._event.VALIDATION_ERROR, function () {\n this.trigger(instance._event.FOCUS);\n });\n this._createRow.render({\n errors: {},\n values: {}\n });\n\n // ... and appends it as the first row\n this.$create = $('<tbody class=\"' + this.classNames.CREATE + '\" />')\n .append(this._createRow.el);\n\n // Manage which row has focus\n this._applyFocusCoordinator(this._createRow);\n\n // focus create row\n this._createRow.trigger(this._event.FOCUS);\n }\n\n // when a model is removed from the collection, remove it from the viewport also\n this._models.on('remove', function (model) {\n instance.getRows().forEach(function (row) {\n if (row.model === model) {\n if (row.hasFocus() && instance._createRow) {\n instance._createRow.trigger(instance._event.FOCUS);\n }\n instance.removeRow(row);\n }\n });\n });\n\n this.fetchInitialResources();\n },\n\n fetchInitialResources: function () {\n var instance = this;\n if ($.isFunction(this.options.resources.all)) {\n this.options.resources.all(function (entries) {\n instance.populate(entries);\n });\n } else {\n $.get(this.options.resources.all, function (entries) {\n instance.populate(entries);\n });\n }\n },\n\n move: function (context) {\n\n var instance = this;\n\n var createRequest = function (afterElement) {\n if (!afterElement.length) {\n return {\n position: 'First'\n };\n } else {\n var afterModel = instance.getRowFromElement(afterElement).model;\n return {\n after: afterModel.url()\n };\n }\n };\n\n if (context.row) {\n\n var data = instance.options.reverseOrder ? createRequest(context.nextItem) : createRequest(context.prevItem);\n\n $.ajax({\n url: context.row.model.url() + '/move',\n type: 'POST',\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n complete: function () {\n // hides loading indicator (spinner)\n context.row.hideLoading();\n },\n success: function (xhr) {\n triggerEvtForInst(instance._event.REORDER_SUCCESS, instance, [xhr]);\n },\n error: function (xhr) {\n var responseData = $.parseJSON(xhr.responseText || xhr.data);\n triggerEvtForInst(instance._event.SERVER_ERROR, instance, [responseData, xhr, this]);\n }\n });\n\n // shows loading indicator (spinner)\n context.row.showLoading();\n }\n },\n\n _createCollection: function () {\n var instance = this;\n\n // create a new Backbone collection to represent rows (http://documentcloud.github.com/backbone/#Collection)\n var RowsAwareCollection = this.options.Collection.extend({\n // Force the collection to re-sort itself. You don't need to call this under normal\n // circumstances, as the set will maintain sort order as each item is added.\n sort: function (options) {\n options || (options = {});\n if (!this.comparator) {\n throw new Error('Cannot sort a set without a comparator');\n }\n this.tableRows = instance.getRows();\n this.models = this.sortBy(this.comparator, this);\n this.tableRows = undefined;\n if (!options.silent) {\n this.trigger('refresh', this, options);\n }\n return this;\n },\n remove: function (...args) {\n this.tableRows = instance.getRows();\n Backbone.Collection.prototype.remove.apply(this, args);\n this.tableRows = undefined;\n return this;\n }\n });\n\n return new RowsAwareCollection([], {\n comparator: function (row) {\n // sort models in collection based on dom ordering\n var index;\n\n var currentTableRows = (this && this.tableRows !== undefined) ? this.tableRows : instance.getRows();\n currentTableRows.some(function (item, i) {\n if (item.model.id === row.id) {\n index = i;\n return true;\n }\n });\n return index;\n }\n });\n },\n\n /**\n * Refreshes table with entries\n *\n * @param entries\n */\n populate: function (entries) {\n if (this.options.reverseOrder) {\n entries.reverse();\n }\n\n this.hideGlobalLoading();\n if (entries && entries.length) {\n // Empty the models collection\n this._models.reset([], {silent: true});\n // Add all the entries to collection and render them\n this.renderRows(entries);\n // show message to user if we have no entries\n if (this.isEmpty()) {\n this.showNoEntriesMsg();\n }\n } else {\n this.showNoEntriesMsg();\n }\n\n // Ok, lets let everyone know that we are done...\n this.$table\n .append(this.$thead);\n\n if (this.options.createPosition === 'bottom') {\n this.$table.append(this.$tbody)\n .append(this.$create);\n } else {\n this.$table\n .append(this.$create)\n .append(this.$tbody);\n }\n\n this.$table.trigger(this._event.INITIALIZED, [this]);\n\n triggerEvtForInst(this._event.INITIALIZED, this, [this]);\n\n if (this.options.autoFocus) {\n this.$table.find(':input:text:first').focus(); // set focus to first field\n }\n },\n\n /**\n * Shows loading indicator and text\n *\n * @return {RestfulTable}\n */\n showGlobalLoading: function () {\n if (!this.$loading) {\n this.$loading = $('<div class=\"aui-restfultable-init\">' +\n '<span class=\"aui-restfultable-loading\">' + spinner + this.options.loadingMsg + '</span></div>');\n }\n\n if (!this.$loading.is(':visible')) {\n this.$loading.insertAfter(this.$table);\n }\n\n return this;\n },\n\n /**\n * Hides loading indicator and text\n * @return {RestfulTable}\n */\n hideGlobalLoading: function () {\n if (this.$loading) {\n this.$loading.remove();\n }\n return this;\n },\n\n\n /**\n * Adds row to collection and renders it\n *\n * @param {Object} values\n * @param {number} index\n * @return {RestfulTable}\n */\n addRow: function (values, index) {\n var view;\n var model;\n\n if (!values.id) {\n throw new Error('RestfulTable.addRow: to add a row values object must contain an id. ' +\n 'Maybe you are not returning it from your restend point?' +\n 'Recieved:' + JSON.stringify(values));\n }\n\n model = new this.options.model(values);\n\n\n view = this._renderRow(model, index);\n\n this._models.add(model);\n this.removeNoEntriesMsg();\n\n // Let everyone know we added a row\n triggerEvtForInst(this._event.ROW_ADDED, this, [view, this]);\n return this;\n },\n\n /**\n * Provided a view, removes it from display and backbone collection\n *\n * @param row {Row} The row to remove.\n */\n removeRow: function (row) {\n this._models.remove(row.model);\n row.remove();\n\n if (this.isEmpty()) {\n this.showNoEntriesMsg();\n }\n\n // Let everyone know we removed a row\n triggerEvtForInst(this._event.ROW_REMOVED, this, [row, this]);\n },\n\n /**\n * Is there any entries in the table\n *\n * @return {Boolean}\n */\n isEmpty: function () {\n return this._models.length === 0;\n },\n\n /**\n * Gets all models\n *\n * @return {Backbone.Collection}\n */\n getModels: function () {\n return this._models;\n },\n\n /**\n * Gets table body\n *\n * @return {jQuery}\n */\n getTable: function () {\n return this.$table;\n },\n\n /**\n * Gets table body\n *\n * @return {jQuery}\n */\n getTableBody: function () {\n return this.$tbody;\n },\n\n /**\n * Gets create Row\n *\n * @return {EditRow}\n */\n getCreateRow: function () {\n return this._createRow;\n },\n\n /**\n * Gets the number of table columns, accounting for the number of\n * additional columns added by RestfulTable itself\n * (such as the drag handle column, buttons and actions columns)\n *\n * @return {Number}\n */\n getColumnCount: function () {\n var staticFieldCount = 2; // accounts for the columns allocated to submit buttons and loading indicator\n if (this.allowReorder) {\n ++staticFieldCount;\n }\n return this.options.columns.length + staticFieldCount;\n },\n\n /**\n * Get the Row that corresponds to the given <tr> element.\n *\n * @param {HTMLElement} tr\n *\n * @return {Row}\n */\n getRowFromElement: function (tr) {\n return $(tr).data(this.dataKeys.ROW_VIEW);\n },\n\n /**\n * Shows message {options.noEntriesMsg} to the user if there are no entries\n *\n * @return {RestfulTable}\n */\n showNoEntriesMsg: function () {\n\n if (this.$noEntries) {\n this.$noEntries.remove();\n }\n\n this.$noEntries = $('<tr>')\n .addClass(this.classNames.NO_ENTRIES)\n .append($('<td>')\n .attr('colspan', this.getColumnCount())\n .text(this.options.noEntriesMsg)\n )\n .appendTo(this.$tbody);\n\n return this;\n },\n\n /**\n * Removes message {options.noEntriesMsg} to the user if there ARE entries\n *\n * @return {RestfulTable}\n */\n removeNoEntriesMsg: function () {\n if (this.$noEntries && this._models.length > 0) {\n this.$noEntries.remove();\n }\n return this;\n },\n\n /**\n * Gets the Row from their associated <tr> elements\n *\n * @return {Array}\n */\n getRows: function () {\n var instance = this;\n var views = [];\n\n this.$tbody.find('.' + this.classNames.READ_ONLY).each(function () {\n var $row = $(this);\n var view = $row.data(instance.dataKeys.ROW_VIEW);\n\n if (view) {\n views.push(view);\n }\n });\n\n return views;\n },\n\n /**\n * Appends entry to end or specified index of table\n *\n * @param {EntryModel} model\n * @param index\n *\n * @return {jQuery}\n */\n _renderRow: function (model, index) {\n var instance = this;\n var $rows = this.$tbody.find('.' + this.classNames.READ_ONLY);\n var $row;\n var view;\n\n view = new this._rowClass({\n model: model,\n columns: this.options.columns,\n allowEdit: this.options.allowEdit,\n allowDelete: this.options.allowDelete,\n allowReorder: this.options.allowReorder,\n deleteConfirmationCallback: this.options.deleteConfirmationCallback\n });\n\n this.removeNoEntriesMsg();\n\n view.on(this._event.ROW_EDIT, function (field) {\n triggerEvtForInst(this._event.EDIT_ROW, {}, [this, instance]);\n instance.edit(this, field);\n });\n\n $row = view.render().$el;\n\n if (index !== -1) {\n\n if (typeof index === 'number' && $rows.length !== 0) {\n $row.insertBefore($rows[index]);\n } else {\n this.$tbody.append($row);\n }\n }\n\n $row.data(this.dataKeys.ROW_VIEW, view);\n\n // deactivate all rows - used in the cases, such as opening a dropdown where you do not want the table editable\n // or any interactions\n view.on(this._event.MODAL, function () {\n instance.$table.removeClass(instance.classNames.ALLOW_HOVER);\n instance.$tbody.sortable('disable');\n instance.getRows().forEach(function (row) {\n if (!instance.isRowBeingEdited(row)) {\n row.delegateEvents({}); // clear all events\n }\n });\n });\n\n // activate all rows - used in the cases, such as opening a dropdown where you do not want the table editable\n // or any interactions\n view.on(this._event.MODELESS, function () {\n instance.$table.addClass(instance.classNames.ALLOW_HOVER);\n instance.$tbody.sortable('enable');\n instance.getRows().forEach(function (row) {\n if (!instance.isRowBeingEdited(row)) {\n row.delegateEvents(); // rebind all events\n }\n });\n });\n\n // ensure that when this row is focused no other are\n this._applyFocusCoordinator(view);\n\n this.trigger(this._event.ROW_INITIALIZED, view);\n\n return view;\n },\n\n /**\n * Returns if the row is edit mode or note.\n *\n * @param {Row} row Read-only row to check if being edited.\n *\n * @return {Boolean}\n */\n isRowBeingEdited: function (row) {\n\n var isBeingEdited = false;\n\n this.editRows.some(function (editRow) {\n if (editRow.el === row.el) {\n isBeingEdited = true;\n return true;\n }\n });\n\n return isBeingEdited;\n },\n\n /**\n * Ensures that when supplied view is focused no others are\n *\n * @param {Backbone.View} view\n * @return {RestfulTable}\n */\n _applyFocusCoordinator: function (view) {\n var instance = this;\n\n if (!view.hasFocusBound) {\n view.hasFocusBound = true;\n\n view.on(this._event.FOCUS, function () {\n if (instance.focusedRow && instance.focusedRow !== view) {\n instance.focusedRow.trigger(instance._event.BLUR);\n }\n instance.focusedRow = view;\n if (view instanceof Row && instance._createRow) {\n instance._createRow.enable();\n }\n });\n }\n\n return this;\n },\n\n /**\n * Remove specified row from collection holding rows being concurrently edited\n *\n * @param {EditRow} editView\n *\n * @return {RestfulTable}\n */\n _removeEditRow: function (editView) {\n var index = $.inArray(editView, this.editRows);\n this.editRows.splice(index, 1);\n return this;\n },\n\n /**\n * Focuses last row still being edited or create row (if it exists)\n *\n * @return {RestfulTable}\n */\n _shiftFocusAfterEdit: function () {\n\n if (this.editRows.length > 0) {\n this.editRows[this.editRows.length - 1].trigger(this._event.FOCUS);\n } else if (this._createRow) {\n this._createRow.trigger(this._event.FOCUS);\n }\n\n return this;\n },\n\n /**\n * Evaluate if we save row when we blur. We can only do this when there is one row being edited at a time, otherwise\n * it causes an infinite loop JRADEV-5325\n *\n * @return {boolean}\n */\n _saveEditRowOnBlur: function () {\n return this.editRows.length <= 1;\n },\n\n /**\n * Dismisses rows being edited concurrently that have no changes\n */\n dismissEditRows: function () {\n this.editRows.forEach(function (editRow) {\n if (!editRow.hasUpdates()) {\n editRow.trigger(this._event.FINISHED_EDITING);\n }\n }, this);\n },\n\n /**\n * Converts readonly row to editable view\n *\n * @param {Backbone.View} row\n * @param {String} field - field name to focus\n * @return {Backbone.View} editRow\n */\n edit: function (row, field) {\n var instance = this;\n var editRow = new this.options.views.editRow({\n el: row.el,\n columns: this.options.columns,\n isUpdateMode: true,\n allowReorder: this.options.allowReorder,\n fieldFocusSelector: this.options.fieldFocusSelector,\n model: row.model,\n cancelAccessKey: this.options.cancelAccessKey,\n submitAccessKey: this.options.submitAccessKey\n });\n var values = row.model.toJSON();\n\n values.update = true;\n editRow.render({\n errors: {},\n update: true,\n values: values\n })\n .on(instance._event.UPDATED, function (model, focusUpdated) {\n instance._removeEditRow (this);\n this.off();\n row.render().delegateEvents(); // render and rebind events\n row.trigger(instance._event.UPDATED); // trigger blur fade out\n if (focusUpdated !== false) {\n instance._shiftFocusAfterEdit();\n }\n })\n .on(instance._event.VALIDATION_ERROR, function () {\n this.trigger(instance._event.FOCUS);\n })\n .on(instance._event.FINISHED_EDITING, function () {\n instance._removeEditRow(this);\n row.render().delegateEvents();\n this.off(); // avoid any other updating, blurring, finished editing, cancel events being fired\n })\n .on(instance._event.CANCEL, function () {\n instance._removeEditRow(this);\n this.off(); // avoid any other updating, blurring, finished editing, cancel events being fired\n row.render().delegateEvents(); // render and re` events\n instance._shiftFocusAfterEdit();\n })\n .on(instance._event.BLUR, function () {\n instance.dismissEditRows(); // dismiss edit rows that have no changes\n if (instance._saveEditRowOnBlur()) {\n this.trigger(instance._event.SAVE, false); // save row, which if successful will call the updated event above\n }\n });\n\n // Ensure that if focus is pulled to another row, we blur the edit row\n this._applyFocusCoordinator(editRow);\n\n // focus edit row, which has the flow on effect of blurring current focused row\n editRow.trigger(instance._event.FOCUS, field);\n\n // disables form fields\n if (instance._createRow) {\n instance._createRow.disable();\n }\n\n this.editRows.push(editRow);\n\n return editRow;\n },\n\n\n /**\n * Renders all specified rows\n *\n * @param rows {Array<Backbone.Model>} array of objects describing Backbone.Model's to render\n * @return {RestfulTable}\n */\n renderRows: function (rows = []) {\n var comparator = this._models.comparator;\n var els = [];\n\n this._models.comparator = undefined; // disable temporarily, assume rows are sorted\n\n var models = rows.map((row) => {\n var model = new this.options.model(row);\n els.push(this._renderRow(model, -1).el);\n return model;\n });\n\n this._models.add(models, {silent: true});\n this._models.comparator = comparator;\n this.removeNoEntriesMsg();\n this.$tbody.append(els);\n\n return this;\n },\n\n /**\n * Gets default options\n *\n * @param {Object} options\n */\n _getDefaultOptions: function (options) {\n return {\n model: options.model || EntryModel,\n allowEdit: true,\n views: {\n editRow: EditRow,\n row: Row\n },\n Collection: Backbone.Collection.extend({\n url: options.resources.self,\n model: options.model || EntryModel\n }),\n allowReorder: false,\n fieldFocusSelector: function (name) {\n return ':input[name=' + name + '], #' + name;\n },\n loadingMsg: options.loadingMsg || i18n.getText('aui.words.loading')\n };\n }\n});\n\nRestfulTable.ClassNames = classNames;\nRestfulTable.CustomCreateView = CustomCreateView;\nRestfulTable.CustomEditView = CustomEditView;\nRestfulTable.CustomReadView = CustomReadView;\nRestfulTable.DataKeys = dataKeys;\nRestfulTable.EditRow = EditRow;\nRestfulTable.EntryModel = EntryModel;\nRestfulTable.Events = events;\nRestfulTable.Row = Row;\n\nglobalize('RestfulTable', RestfulTable);\n\nexport default RestfulTable;\n","// This file is deprecated in 1.12.0 to be removed in 1.13\n( function() {\ndefine( [\n\t\"jquery\",\n\t\"./data\",\n\t\"./disable-selection\",\n\t\"./focusable\",\n\t\"./form\",\n\t\"./ie\",\n\t\"./keycode\",\n\t\"./labels\",\n\t\"./jquery-1-7\",\n\t\"./plugin\",\n\t\"./safe-active-element\",\n\t\"./safe-blur\",\n\t\"./scroll-parent\",\n\t\"./tabbable\",\n\t\"./unique-id\",\n\t\"./version\"\n] );\n} )();\n","/*!\n * jQuery UI Draggable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: http://api.jqueryui.com/draggable/\n//>>demos: http://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./mouse\",\n\t\t\t\"../data\",\n\t\t\t\"../plugin\",\n\t\t\t\"../safe-active-element\",\n\t\t\t\"../safe-blur\",\n\t\t\t\"../scroll-parent\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( $.isFunction( this.options.revert ) &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// Http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\t( inst.options.snap.release &&\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\t( inst.options.snap.snap &&\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) ) );\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) { return; }\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nreturn $.ui.draggable;\n\n} ) );\n","( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nreturn $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n} ) );\n","( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\nreturn $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n} ) );\n","( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\", \"./version\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} ( function( $ ) {\nreturn $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n} ) );\n","/*!\n * jQuery UI Sortable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: http://api.jqueryui.com/sortable/\n//>>demos: http://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n( function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [\n\t\t\t\"jquery\",\n\t\t\t\"./mouse\",\n\t\t\t\"../data\",\n\t\t\t\"../ie\",\n\t\t\t\"../scroll-parent\",\n\t\t\t\"../version\",\n\t\t\t\"../widget\"\n\t\t], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}( function( $ ) {\n\nreturn $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t// Execute the drag once - this causes the helper not to be visiblebefore getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event );\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tif ( !this.lastPositionAbs ) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( this.options.scroll ) {\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ? \"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" || this._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this._getDragVerticalDirection();\n\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 )\n\t\t\t: ( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ $.isFunction( this.options.items ) ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ $.isFunction( this.options.items ) ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( item.instance !== this.currentContainer && this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming\n\t\t\t\t\t// from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif ( !p.height() ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ?\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true ) :\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction( o.helper ) ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\t$( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\ta ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n} ) );\n","import Backbone from 'backbone';\nexport default Backbone.View;\n","import Backbone from 'backbone';\nexport default Backbone.View;\n","import Backbone from 'backbone';\nexport default Backbone.View;\n","import $ from '../jquery';\nimport '../../../js-vendor/jquery/serializetoobject';\nimport Backbone from 'backbone';\nimport classNames from './class-names';\nimport dataKeys from './data-keys';\nimport events from './event-names';\nimport i18n from '../i18n';\nimport {appendStatusSpinner, removeStatusSpinner} from './spinner';\n\nvar isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n\n/**\n * An abstract class that gives the required behaviour for the creating and editing entries. Extend this class and pass\n * it as the {views.row} property of the options passed to RestfulTable in construction.\n */\nexport default Backbone.View.extend({\n tagName: 'tr',\n\n // delegate events\n events: {\n 'focusin': '_focus',\n 'click': '_focus',\n 'keyup': '_handleKeyUpEvent'\n },\n\n /**\n * @constructor\n * @param {Object} options\n */\n initialize: function (options) {\n this.$el = $(this.el);\n\n // faster lookup\n this._event = events;\n this.classNames = classNames;\n this.dataKeys = dataKeys;\n this.columns = options.columns;\n this.isCreateRow = options.isCreateRow;\n this.allowReorder = options.allowReorder;\n\n // Allow cancelling an edit with support for setting a new element.\n this.events['click .' + this.classNames.CANCEL] = '_cancel';\n this.delegateEvents();\n\n if (options.isUpdateMode) {\n this.isUpdateMode = true;\n } else {\n this._modelClass = options.model;\n this.model = new this._modelClass();\n }\n\n this.fieldFocusSelector = options.fieldFocusSelector;\n this\n .on(this._event.CANCEL, () => this.disabled = true)\n .on(this._event.SAVE, (focusUpdated) => !this.disabled && this.submit(focusUpdated))\n .on(this._event.FOCUS, (name) => this.focus(name))\n .on(this._event.BLUR, () => {\n this.$el.removeClass(this.classNames.FOCUSED);\n this.disable();\n })\n .on(this._event.SUBMIT_STARTED, () => this._submitStarted())\n .on(this._event.SUBMIT_FINISHED, () => this._submitFinished())\n },\n\n /**\n * Renders default cell contents\n *\n * @param data\n */\n defaultColumnRenderer: function (data) {\n if (data.allowEdit !== false) {\n return $(\"<input type='text' />\")\n .addClass('text')\n .attr({\n name: data.name,\n value: data.value,\n 'aria-label': data.ariaLabel\n });\n } else if (data.value) {\n return document.createTextNode(data.value);\n }\n },\n\n /**\n * Renders drag handle\n * @return jQuery\n */\n renderDragHandle: function () {\n return '<span class=\"' + this.classNames.DRAG_HANDLE + '\"></span></td>';\n },\n\n /**\n * Executes cancel event if ESC is pressed\n *\n * @param {Event} e\n */\n _handleKeyUpEvent: function (e) {\n if (e.keyCode === 27) {\n this.trigger(this._event.CANCEL);\n }\n },\n\n /**\n * Fires cancel event\n *\n * @param {Event} e\n *\n * @return EditRow\n */\n _cancel: function (e) {\n this.trigger(this._event.CANCEL);\n e.preventDefault();\n return this;\n },\n\n /**\n * Disables events/fields and adds safe guard against double submitting\n *\n * @return EditRow\n */\n _submitStarted: function () {\n this.submitting = true;\n this.showLoading()\n .disable()\n .delegateEvents({});\n\n return this;\n },\n\n /**\n * Enables events & fields\n *\n * @return EditRow\n */\n _submitFinished: function () {\n this.submitting = false;\n this.hideLoading()\n .enable()\n .delegateEvents(this.events);\n\n return this;\n },\n\n /**\n * Handles dom focus event, by only focusing row if it isn't already\n *\n * @param {Event} e\n *\n * @return EditRow\n */\n _focus: function (e) {\n if (!this.hasFocus()) {\n this.trigger(this._event.FOCUS, e.target.name);\n }\n return this;\n },\n\n\n /**\n * Returns true if row has focused class\n *\n * @return Boolean\n */\n hasFocus: function () {\n return this.$el.hasClass(this.classNames.FOCUSED);\n },\n\n /**\n * Focus specified field (by name or id - first argument), first field with an error or first field (DOM order)\n *\n * @param name\n *\n * @return EditRow\n */\n focus: function (name) {\n var $focus;\n var $error;\n\n this.enable();\n\n if (name) {\n $focus = this.$el.find(this.fieldFocusSelector(name));\n } else {\n\n $error = this.$el.find(this.classNames.ERROR + ':first');\n\n if ($error.length === 0) {\n $focus = this.$el.find(':input:text:first');\n } else {\n $focus = $error.parent().find(':input');\n }\n }\n\n this.$el.addClass(this.classNames.FOCUSED);\n $focus.focus().trigger('select');\n\n return this;\n },\n\n /**\n * Disables all fields\n *\n * @return EditRow\n */\n disable: function () {\n var $replacementSubmit;\n var $submit;\n\n // firefox does not allow you to submit a form if there are 2 or more submit buttons in a form, even if all but\n // one is disabled. It also does not let you change the type=\"submit' to type=\"button\". Therfore he lies the hack.\n if (isFirefox) {\n $submit = this.$el.find(':submit');\n\n if ($submit.length) {\n $replacementSubmit = $(\"<input type='submit' class='\" + this.classNames.SUBMIT + \"' />\")\n .addClass($submit.attr('class'))\n .val($submit.val())\n .data(this.dataKeys.ENABLED_SUBMIT, $submit);\n\n $submit.replaceWith($replacementSubmit);\n }\n }\n\n this.$el.addClass(this.classNames.DISABLED)\n .find(':submit')\n .attr('disabled', 'disabled');\n\n return this;\n },\n\n /**\n * Enables all fields\n *\n * @return EditRow\n */\n enable: function () {\n var $placeholderSubmit;\n var $submit;\n\n // firefox does not allow you to submit a form if there are 2 or more submit buttons in a form, even if all but\n // one is disabled. It also does not let you change the type=\"submit' to type=\"button\". Therfore he lies the hack.\n if (isFirefox) {\n $placeholderSubmit = this.$el.find(this.classNames.SUBMIT);\n $submit = $placeholderSubmit.data(this.dataKeys.ENABLED_SUBMIT);\n\n if ($submit && $placeholderSubmit.length) {\n $placeholderSubmit.replaceWith($submit);\n }\n }\n\n this.$el.removeClass(this.classNames.DISABLED)\n .find(':submit')\n .removeAttr('disabled');\n\n return this;\n },\n\n /**\n * Shows loading indicator\n *\n * @return EditRow\n */\n showLoading: function () {\n appendStatusSpinner(this.$el);\n return this;\n },\n\n /**\n * Hides loading indicator\n *\n * @return EditRow\n */\n hideLoading: function () {\n removeStatusSpinner(this.$el);\n return this;\n },\n\n /**\n * If any of the fields have changed\n *\n * @return {Boolean}\n */\n hasUpdates: function () {\n return !!this.mapSubmitParams(this.serializeObject());\n },\n\n /**\n * Serializes the view into model representation.\n * Default implementation uses simple jQuery plugin to serialize form fields into object\n *\n * @return Object\n */\n serializeObject: function () {\n var $el = this.$el;\n return $el.serializeObject ?\n $el.serializeObject() :\n $el.serialize();\n },\n\n mapSubmitParams: function (params) {\n return this.model.changedAttributes(params);\n },\n\n /**\n * Handle submission of new entries and editing of old.\n *\n * @param {Boolean} focusUpdated - flag of whether to focus read-only view after succssful submission\n *\n * @return EditRow\n */\n submit: function (focusUpdated) {\n var instance = this;\n var values;\n\n // IE doesnt like it when the focused element is removed\n if (document.activeElement !== window) {\n $(document.activeElement).blur();\n }\n\n if (this.isUpdateMode) {\n values = this.mapSubmitParams(this.serializeObject()); // serialize form fields into JSON\n\n if (!values) {\n return instance.trigger(instance._event.CANCEL);\n }\n } else {\n this.model.clear();\n values = this.mapSubmitParams(this.serializeObject()); // serialize form fields into JSON\n }\n\n this.trigger(this._event.SUBMIT_STARTED);\n\n /* Attempt to add to server model. If fail delegate to createView to render errors etc. Otherwise,\n add a new model to this._models and render a row to represent it. */\n this.model.save(values, {\n success: function () {\n if (instance.isUpdateMode) {\n instance.trigger(instance._event.UPDATED, instance.model, focusUpdated);\n } else {\n instance.trigger(instance._event.CREATED, instance.model.toJSON());\n\n instance.model = new instance._modelClass(); // reset\n\n instance.render({errors: {}, values: {}}); // pulls in instance's model for create row\n instance.trigger(instance._event.FOCUS);\n }\n\n instance.trigger(instance._event.SUBMIT_FINISHED);\n },\n\n error: function (model, data, xhr) {\n if (xhr.status === 400) {\n instance.renderErrors(data.errors);\n instance.trigger(instance._event.VALIDATION_ERROR, data.errors);\n }\n\n instance.trigger(instance._event.SUBMIT_FINISHED);\n },\n\n silent: true\n });\n\n return this;\n },\n\n /**\n * Render an error message\n *\n * @param msg\n *\n * @return {jQuery}\n */\n renderError: function (name, msg) {\n return $('<div />').attr('data-field', name).addClass(this.classNames.ERROR).text(msg);\n },\n\n /**\n * Render and append error messages. The property name will be matched to the input name to determine which cell to\n * append the error message to. If this does not meet your needs please extend this method.\n *\n * @param errors\n */\n renderErrors: function (errors) {\n var instance = this;\n\n this.$('.' + this.classNames.ERROR).remove(); // avoid duplicates\n\n if (errors) {\n $.each(errors, function (name, msg) {\n instance.$el.find(\"[name='\" + name + \"']\")\n .closest('td')\n .append(instance.renderError(name, msg));\n });\n }\n\n return this;\n },\n\n\n /**\n * Handles rendering of row\n *\n * @param {Object} renderData\n * ... {Object} vales - Values of fields\n */\n render: function (renderData) {\n var instance = this;\n\n this.$el.empty();\n\n if (this.allowReorder) {\n $('<td class=\"' + this.classNames.ORDER + '\" />').append(this.renderDragHandle()).appendTo(instance.$el);\n }\n\n $.each(this.columns, function (i, column) {\n var contents;\n var $cell;\n var value = renderData.values[column.id];\n var args = [\n {name: column.id, ariaLabel: column.inputAriaLabel ? column.inputAriaLabel : column.header, value: value, allowEdit: column.allowEdit},\n renderData.values,\n instance.model\n ];\n if (value) {\n instance.$el.attr('data-' + column.id, value); // helper for webdriver testing\n }\n\n if (instance.isCreateRow && column.createView) {\n // TODO AUI-1058 - The row's model should be guaranteed to be in the correct state by this point.\n contents = new column.createView({\n model: instance.model\n }).render(args[0]);\n\n } else if (column.editView) {\n contents = new column.editView({\n model: instance.model\n }).render(args[0]);\n } else {\n contents = instance.defaultColumnRenderer.apply(instance, args);\n }\n\n $cell = $('<td />');\n\n if (typeof contents === 'object' && contents.done) {\n contents.done(function (contents) {\n $cell.append(contents);\n });\n } else {\n $cell.append(contents);\n }\n\n if (column.styleClass) {\n $cell.addClass(column.styleClass);\n }\n\n $cell.appendTo(instance.$el);\n });\n\n this.$el\n .append(this.renderOperations(renderData.update, renderData.values)) // add submit/cancel buttons\n .addClass(this.classNames.ROW + ' ' + this.classNames.EDIT_ROW);\n\n this.trigger(this._event.RENDER, this.$el, renderData.values);\n this.$el.trigger(this._event.CONTENT_REFRESHED, [this.$el]);\n\n return this;\n },\n\n /**\n * Gets markup for add/update and cancel buttons\n *\n * @param {Boolean} update\n */\n renderOperations: function (update) {\n var $operations = $('<td class=\"aui-restfultable-operations\" />');\n\n if (update) {\n $operations.append($('<input class=\"aui-button aui-button-primary\" type=\"submit\" />').attr({\n accesskey: this.submitAccessKey,\n value: i18n.getText('aui.words.update')\n }))\n .append($('<a class=\"aui-button aui-button-link\" href=\"#\" />')\n .addClass(this.classNames.CANCEL)\n .text(i18n.getText('aui.words.cancel'))\n .attr({\n accesskey: this.cancelAccessKey\n }));\n } else {\n $operations.append($('<input class=\"aui-button aui-button-primary\" type=\"submit\" />').attr({\n accesskey: this.submitAccessKey,\n value: i18n.getText('aui.words.add')\n }));\n }\n\n return $operations.add($(`<td class=\"${this.classNames.STATUS}\" />`));\n }\n});\n","/**\n * Serializes form fields within the given element to a JSON object\n *\n * {\n * fieldName: \"fieldValue\"\n * }\n *\n * @returns {Object}\n */\njQuery.fn.serializeObject = function () {\n\n var data = {};\n\n this.find(\":input:not(:button):not(:submit):not(:radio):not('select[multiple]')\").each(function () {\n\n if (this.name === \"\") {\n return;\n }\n\n if (this.value === null) {\n this.value = \"\";\n }\n\n data[this.name] = this.value.match(/^(tru|fals)e$/i) ?\n this.value.toLowerCase() == \"true\" : this.value;\n });\n\n this.find(\"input:radio:checked\").each(function(){\n data[this.name] = this.value;\n });\n\n this.find(\"select[multiple]\").each(function(){\n\n var $select = jQuery(this),\n val = $select.val();\n\n if ($select.data(\"aui-ss\")) {\n if (val) {\n data[this.name] = val[0];\n } else {\n data[this.name] = \"\";\n }\n } else {\n\n if (val !== null) {\n data[this.name] = val;\n } else {\n data[this.name] = [];\n }\n }\n });\n\n return data;\n};","import $ from '../jquery';\nimport { triggerEvtForInst } from './event-handlers';\nimport { isEmpty, isEqual } from 'underscore';\nimport Backbone from 'backbone';\nimport events from './event-names';\n\n/**\n * A class provided to fill some gaps with the out of the box Backbone.Model class. Most notiably the inability\n * to send ONLY modified attributes back to the server.\n */\nvar EntryModel = Backbone.Model.extend({\n sync: function (method, model, options) {\n var instance = this;\n var oldError = options.error;\n\n options.error = function (xhr) {\n instance._serverErrorHandler(xhr, this);\n if (oldError) {\n oldError.apply(this, arguments);\n }\n };\n\n return Backbone.sync.apply(Backbone, arguments);\n },\n\n /**\n * Overrides default save handler to only save (send to server) attributes that have changed.\n * Also provides some default error handling.\n *\n * @override\n * @param attributes\n * @param options\n */\n save: function (attributes, options) {\n options = options || {};\n\n var instance = this;\n var Model;\n var syncModel;\n var error = options.error; // we override, so store original\n var success = options.success;\n\n\n // override error handler to provide some defaults\n options.error = function (model, xhr) {\n\n var data = $.parseJSON(xhr.responseText || xhr.data);\n\n // call original error handler\n if (error) {\n error.call(instance, instance, data, xhr);\n }\n };\n\n // if it is a new model, we don't have to worry about updating only changed attributes because they are all new\n if (this.isNew()) {\n\n // call super\n Backbone.Model.prototype.save.call(this, attributes, options);\n\n // only go to server if something has changed\n } else if (attributes) {\n // create temporary model\n Model = EntryModel.extend({\n url: this.url()\n });\n\n syncModel = new Model({\n id: this.id\n });\n\n syncModel.save = Backbone.Model.prototype.save;\n\n options.success = function (model, xhr) {\n\n // update original model with saved attributes\n instance.clear().set(model.toJSON());\n\n // call original success handler\n if (success) {\n success.call(instance, instance, xhr);\n }\n };\n\n // update temporary model with the changed attributes\n syncModel.save(attributes, options);\n }\n },\n\n /**\n * Destroys the model on the server. We need to override the default method as it does not support sending of\n * query paramaters.\n *\n * @override\n * @param {object} [options]\n * @param {function} options.success - Server success callback\n * @param {function} options.error - Server error callback\n * @param {object} options.data\n *\n * @return EntryModel\n */\n destroy: function (options) {\n options = options || {};\n\n var instance = this;\n var url = this.url();\n\n $.ajax({\n url: url,\n type: 'DELETE',\n dataType: 'json',\n data: options.data || {},\n contentType: 'application/json',\n success(data) {\n if (instance.collection){\n instance.collection.remove(instance);\n }\n if (options.success) {\n options.success.call(instance, data);\n }\n },\n error(xhr) {\n instance._serverErrorHandler(xhr, this);\n if (options.error) {\n options.error.call(instance, xhr);\n }\n }\n });\n\n return this;\n },\n\n\n /**\n * A more complex lookup for changed attributes then default backbone one.\n *\n * @param attributes\n */\n changedAttributes: function (attributes) {\n var changed = {};\n var current = this.toJSON();\n\n $.each(attributes, function (name, value) {\n\n if (!current[name]) {\n if (typeof value === 'string') {\n if ($.trim(value) !== '') {\n changed[name] = value;\n }\n } else if ($.isArray(value)) {\n if (value.length !== 0) {\n changed[name] = value;\n }\n } else {\n changed[name] = value;\n }\n } else if (current[name] && current[name] !== value) {\n\n if (typeof value === 'object') {\n if (!isEqual(value, current[name])) {\n changed[name] = value;\n }\n } else {\n changed[name] = value;\n }\n }\n });\n\n if (!isEmpty(changed)) {\n this.addExpand(changed);\n return changed;\n }\n },\n\n /**\n * Useful point to override if you always want to add an expand to your rest calls.\n *\n * @param changed attributes that have already changed\n */\n addExpand: function (changed) {}, // eslint-disable-line no-unused-vars\n\n /**\n * Throws a server error event unless user input validation error (status 400)\n *\n * @param xhr\n * @param ajaxOptions\n */\n _serverErrorHandler: function (xhr, ajaxOptions) {\n var data;\n if (xhr.status !== 400) {\n data = $.parseJSON(xhr.responseText || xhr.data);\n triggerEvtForInst(events.SERVER_ERROR, this, [data, xhr, ajaxOptions]);\n }\n },\n\n /**\n * Fetches values, with some generic error handling\n *\n * @override\n * @param options\n */\n fetch: function (options) {\n options = options || {};\n\n // clear the model, so we do not merge the old with the new\n this.clear();\n\n // call super\n Backbone.Model.prototype.fetch.call(this, options);\n }\n});\n\nexport default EntryModel;\n","import $ from '../jquery';\nimport i18n from '../i18n';\nimport Backbone from 'backbone';\nimport classNames from './class-names';\nimport dataKeys from './data-keys';\nimport events from './event-names';\nimport {appendStatusSpinner, removeStatusSpinner} from './spinner';\n\n/**\n * An abstract class that gives the required behaviour for RestfulTable rows.\n * Extend this class and pass it as the {views.row} property of the options passed to RestfulTable in construction.\n */\nexport default Backbone.View.extend({\n tagName: 'tr',\n\n events: {\n 'click .aui-restfultable-editable': 'edit'\n },\n\n initialize: function (options) {\n options = options || {};\n\n this._event = events;\n this.classNames = classNames;\n this.dataKeys = dataKeys;\n this.columns = options.columns;\n this.allowEdit = options.allowEdit;\n this.allowDelete = options.allowDelete;\n\n if (!this.events['click .aui-restfultable-editable']) {\n throw new Error('It appears you have overridden the events property. To add events you will need to use' +\n 'a work around. https://github.com/documentcloud/backbone/issues/244');\n }\n\n this.index = options.index || 0;\n this.deleteConfirmationCallback = options.deleteConfirmationCallback;\n this.allowReorder = options.allowReorder;\n this.$el = $(this.el);\n\n this\n .on(this._event.CANCEL, () => this.disabled = true)\n .on(this._event.FOCUS, field => this.focus(field))\n .on(this._event.BLUR, () => this.unfocus())\n .on(this._event.MODAL, () => this.$el.addClass(this.classNames.ACTIVE))\n .on(this._event.MODELESS, () => this.$el.removeClass(this.classNames.ACTIVE))\n },\n\n /**\n * Renders drag handle\n *\n * @return jQuery\n */\n renderDragHandle: function () {\n return '<span class=\"' + this.classNames.DRAG_HANDLE + '\"></span></td>';\n },\n\n /**\n * Renders default cell contents\n *\n * @param data\n *\n * @return {undefiend, String}\n */\n defaultColumnRenderer: function (data) {\n if (data.value) {\n return document.createTextNode(data.value.toString());\n }\n },\n\n /**\n * Save changed attributes back to server and re-render\n *\n * @param attr\n *\n * @return {Row}\n */\n sync: function (attr) {\n var instance = this;\n\n this.model.addExpand(attr);\n this.showLoading();\n this.model.save(attr, {\n success: function () {\n instance.hideLoading().render();\n instance.trigger(instance._event.UPDATED);\n },\n error: function () {\n instance.hideLoading();\n }\n });\n\n return this;\n },\n\n /**\n * Get model from server and re-render\n *\n * @return {Row}\n */\n refresh: function (success, error) {\n var instance = this;\n\n this.showLoading();\n this.model.fetch({\n success: function () {\n instance.hideLoading().render();\n if (success) {\n success.apply(this, arguments);\n }\n },\n error: function () {\n instance.hideLoading();\n if (error) {\n error.apply(this, arguments);\n }\n }\n });\n\n return this;\n },\n\n /**\n * Returns true if row has focused class\n *\n * @return Boolean\n */\n hasFocus: function () {\n return this.$el.hasClass(this.classNames.FOCUSED);\n },\n\n /**\n * Adds focus class (Item has been recently updated)\n *\n * @return Row\n */\n focus: function () {\n $(this.el).addClass(this.classNames.FOCUSED);\n return this;\n },\n\n /**\n * Removes focus class\n *\n * @return Row\n */\n unfocus: function () {\n $(this.el).removeClass(this.classNames.FOCUSED);\n return this;\n },\n\n /**\n * Adds loading class (to show server activity)\n *\n * @return Row\n */\n showLoading: function () {\n appendStatusSpinner(this.$el);\n return this;\n },\n\n /**\n * Hides loading class (to show server activity)\n *\n * @return Row\n */\n hideLoading: function () {\n removeStatusSpinner(this.$el);\n return this;\n },\n\n /**\n * Switches row into edit mode\n *\n * @param e\n */\n edit: function (e) {\n var field;\n if ($(e.target).is('.' + this.classNames.EDITABLE)) {\n field = $(e.target).attr('data-field-name');\n } else {\n field = $(e.target).closest('.' + this.classNames.EDITABLE).attr('data-field-name');\n }\n this.trigger(this._event.ROW_EDIT, field);\n return this;\n },\n\n /**\n * Can be overriden to add custom options.\n *\n * @returns {jQuery}\n */\n renderOperations: function () {\n var instance = this;\n if (this.allowDelete !== false) {\n return $(\"<a href='#' class='aui-button' />\")\n .addClass(this.classNames.DELETE)\n .text(i18n.getText('aui.words.delete'))\n .on('click', function (e) {\n e.preventDefault();\n instance.destroy();\n });\n }\n },\n\n /**\n * Removes entry from table.\n *\n * @returns {undefined}\n */\n destroy: function () {\n if (this.deleteConfirmationCallback) {\n let promise = this.deleteConfirmationCallback(this.model.toJSON());\n if (promise && promise.then) {\n promise.then(\n () => this.model.destroy(),\n () => {}\n );\n } else {\n throw new Error('deleteConfirmationCallback needs to return a Promise')\n }\n } else {\n this.model.destroy();\n }\n },\n\n /**\n * Renders a generic edit row. You probably want to override this in a sub class.\n *\n * @return Row\n */\n render: function () {\n var instance = this;\n var renderData = this.model.toJSON();\n var $opsCell = $(\"<td class='aui-restfultable-operations' />\").append(this.renderOperations({}, renderData));\n var $throbberCell = $(`<td class=\"${this.classNames.STATUS}\" />`);\n // restore state\n this.$el\n .removeClass(this.classNames.DISABLED + ' ' + this.classNames.FOCUSED + ' ' + this.classNames.EDIT_ROW)\n .addClass(this.classNames.READ_ONLY)\n .empty();\n\n\n if (this.allowReorder) {\n $('<td class=\"' + this.classNames.ORDER + '\" />').append(this.renderDragHandle()).appendTo(instance.$el);\n }\n\n this.$el.attr('data-id', this.model.id); // helper for webdriver testing\n\n $.each(this.columns, function (i, column) {\n var contents;\n var $cell = $('<td />');\n var value = renderData[column.id];\n var fieldName = column.fieldName || column.id;\n var args = [{name: fieldName, value: value, allowEdit: column.allowEdit}, renderData, instance.model];\n\n if (value) {\n instance.$el.attr('data-' + column.id, value); // helper for webdriver testing\n }\n\n if (column.readView) {\n contents = new column.readView({\n model: instance.model\n }).render(args[0]);\n } else {\n contents = instance.defaultColumnRenderer.apply(instance, args);\n }\n\n if (instance.allowEdit !== false && column.allowEdit !== false) {\n var $editableRegion = $('<span />')\n .addClass(instance.classNames.EDITABLE)\n .append('<span class=\"aui-icon aui-icon-small aui-iconfont-edit\"></span>')\n .append(contents)\n .attr('data-field-name', fieldName);\n\n $cell = $('<td />').append($editableRegion).appendTo(instance.$el);\n\n if (!contents || !$.trim(contents)) {\n $cell.addClass(instance.classNames.NO_VALUE);\n $editableRegion.html($('<em />').text(this.emptyText || i18n.getText('aui.enter.value')));\n }\n\n } else {\n $cell.append(contents);\n }\n\n if (column.styleClass) {\n $cell.addClass(column.styleClass);\n }\n\n $cell.appendTo(instance.$el);\n });\n\n this.$el\n .append($opsCell)\n .append($throbberCell)\n .addClass(this.classNames.ROW + ' ' + this.classNames.READ_ONLY);\n\n this.trigger(this._event.RENDER, this.$el, renderData);\n this.$el.trigger(this._event.CONTENT_REFRESHED, [this.$el]);\n\n return this;\n }\n});\n","import './styles/aui.page.reset';\nimport './styles/aui.page.typography';\nimport './styles/aui.page.iconography';\nimport './styles/aui.page.links';\nimport './styles/aui.pattern.page-header'; // for sidebar titles\nimport './styles/aui.pattern.badge'; // for sidebar item notifications (sidebar contextually overrides them)\nimport './styles/aui.pattern.button';\nimport './styles/aui.pattern.icon';\nimport './styles/aui.pattern.nav'; // for vertical nav\nimport './aui.component.nav'; // for navigation expand/collapse behaviour\nimport './aui.component.inline-dialog2'; // for collapsed navigation menus :(\nimport './aui.component.tooltip'; // for collapsed navigation items\nimport '@atlassian/aui/src/less/aui-sidebar.less';\nexport { default as sidebar } from '@atlassian/aui/src/js/aui/sidebar';\n","import $ from './jquery';\nimport './tooltip';\nimport './navigation';\nimport i18n from './i18n';\nimport clone from './clone';\nimport * as deprecate from './internal/deprecation';\nimport globalize from './internal/globalize';\nimport hasTouch from './internal/has-touch';\nimport isInput from './internal/is-input';\nimport keyCode from './key-code';\nimport mediaQuery from './internal/mediaQuery';\nimport skate from './internal/skate';\nimport uid from './unique-id';\nimport widget from './internal/widget';\nimport deduplicateIDs from './internal/deduplicateIDs';\n\n\nfunction sidebarOffset(sidebar) {\n return sidebar.offset().top;\n}\n\nfunction Sidebar(selector) {\n this.$el = $(selector);\n if (!this.$el.length) {\n return;\n }\n this.$body = $('body');\n this.$wrapper = this.$el.children('.aui-sidebar-wrapper');\n\n // Sidebar users should add class=\"aui-page-sidebar\" to the\n // <body> in the rendered markup (to prevent any potential flicker),\n // so we add it just in case they forgot.\n this.$body.addClass('aui-page-sidebar');\n\n this._previousScrollTop = null;\n this._previousViewportHeight = null;\n this._previousViewportWidth = null;\n this._previousOffsetTop = null;\n\n this.submenus = new SubmenuManager();\n\n initializeHandlers(this);\n constructAllSubmenus(this);\n}\n\nvar FORCE_COLLAPSE_WIDTH = 1240;\nvar EVENT_PREFIX = '_aui-internal-sidebar-';\n\nfunction namespaceEvents (events) {\n return $.map(events.split(' '), function (event) {\n return EVENT_PREFIX + event;\n }).join(' ');\n}\n\nSidebar.prototype.on = function () {\n var events = arguments[0];\n var args = Array.prototype.slice.call(arguments, 1);\n var namespacedEvents = namespaceEvents(events);\n this.$el.on.apply(this.$el, [namespacedEvents].concat(args));\n return this;\n};\n\nSidebar.prototype.off = function () {\n var events = arguments[0];\n var args = Array.prototype.slice.call(arguments, 1);\n var namespacedEvents = namespaceEvents(events);\n this.$el.off.apply(this.$el, [namespacedEvents].concat(args));\n return this;\n};\n\nSidebar.prototype.setHeight = function (scrollTop, viewportHeight, headerHeight) {\n var visibleHeaderHeight = Math.max(0, headerHeight - scrollTop);\n this.$wrapper.height(viewportHeight - visibleHeaderHeight);\n return this;\n};\n\nSidebar.prototype.setTopPosition = function (scrollTop = window.pageYOffset) {\n this.$wrapper.toggleClass('aui-is-docked', scrollTop > sidebarOffset(this.$el));\n return this;\n};\n\nSidebar.prototype.setPosition = deprecate.fn(Sidebar.prototype.setTopPosition, 'Sidebar.setPosition', {\n removeInVersion: '9.0.0',\n sinceVersion: '7.6.1',\n alternativeName: 'Sidebar.setTopPosition',\n});\n\nSidebar.prototype.setLeftPosition = function (scrollLeft = window.pageXOffset) {\n if (this.$wrapper.hasClass('aui-is-docked')) {\n this.$wrapper.css({ left: -scrollLeft });\n }\n return this;\n};\n\nSidebar.prototype.setCollapsedState = function (viewportWidth) {\n // Reflow behaviour is implemented as a state machine (hence all\n // state transitions are enumerated). The rest of the state machine,\n // e.g., entering the expanded narrow (fly-out) state, is implemented\n // by the toggle() method.\n var transition = {collapsed: {}, expanded: {}};\n transition.collapsed.narrow = {\n narrow: $.noop,\n wide: function (s) {\n s._expand(viewportWidth, true);\n }\n };\n transition.collapsed.wide = {\n narrow: $.noop, // Becomes collapsed narrow (no visual change).\n wide: $.noop\n };\n transition.expanded.narrow = {\n narrow: $.noop,\n wide: function (s) {\n s.$body.removeClass('aui-sidebar-collapsed');\n s.$el.removeClass('aui-sidebar-fly-out');\n }\n };\n transition.expanded.wide = {\n narrow: function (s) {\n s._collapse(true);\n },\n wide: $.noop\n };\n\n var collapseState = this.isCollapsed() ? 'collapsed' : 'expanded';\n var oldSize = this.isViewportNarrow(this._previousViewportWidth) ? 'narrow' : 'wide';\n var newSize = this.isViewportNarrow(viewportWidth) ? 'narrow' : 'wide';\n transition[collapseState][oldSize][newSize](this);\n return this;\n};\n\nSidebar.prototype._collapse = function (isResponsive) {\n if (this.isCollapsed()) {\n return this;\n }\n\n var startEvent = $.Event(EVENT_PREFIX + 'collapse-start', {isResponsive: isResponsive});\n this.$el.trigger(startEvent);\n if (startEvent.isDefaultPrevented()) {\n return this;\n }\n\n this.$body.addClass('aui-sidebar-collapsed');\n this.$el.attr('aria-expanded', 'false');\n this.$el.removeClass('aui-sidebar-fly-out');\n this.$el.find(this.submenuTriggersSelector).attr('tabindex', 0);\n $(this.inlineDialogSelector).attr('responds-to', 'hover');\n\n if (!this.isAnimated()) {\n this.$el.trigger($.Event(EVENT_PREFIX + 'collapse-end', {isResponsive: isResponsive}));\n }\n return this;\n};\n\nSidebar.prototype.collapse = function () {\n return this._collapse(false);\n};\n\nSidebar.prototype._expand = function (viewportWidth, isResponsive) {\n var startEvent = $.Event(EVENT_PREFIX + 'expand-start', {isResponsive: isResponsive});\n this.$el.trigger(startEvent);\n if (startEvent.isDefaultPrevented()) {\n return this;\n }\n\n var isViewportNarrow = this.isViewportNarrow(viewportWidth);\n this.$el.attr('aria-expanded', 'true');\n this.$body.toggleClass('aui-sidebar-collapsed', isViewportNarrow);\n this.$el.toggleClass('aui-sidebar-fly-out', isViewportNarrow);\n this.$el.find(this.submenuTriggersSelector).removeAttr('tabindex');\n $(this.inlineDialogSelector).removeAttr('responds-to');\n\n if (!this.isAnimated()) {\n this.$el.trigger($.Event(EVENT_PREFIX + 'expand-end', {isResponsive: isResponsive}));\n }\n return this;\n};\n\nSidebar.prototype.expand = function () {\n if (this.isCollapsed()) {\n this._expand(this._previousViewportWidth, false);\n }\n return this;\n};\n\nSidebar.prototype.isAnimated = function () {\n return this.$el.hasClass('aui-is-animated');\n};\n\nSidebar.prototype.isCollapsed = function () {\n return this.$el.attr('aria-expanded') === 'false';\n};\n\nSidebar.prototype.isViewportNarrow = function (viewportWidth) {\n viewportWidth = viewportWidth === undefined ? this._previousViewportWidth : viewportWidth;\n return viewportWidth < FORCE_COLLAPSE_WIDTH;\n};\n\nSidebar.prototype._removeAllTooltips = function () {\n // tooltips are orphaned when sidebar is expanded, so if there are any visible on the page we remove them all.\n // Can't scope it to the Sidebar (this) because the tooltip div is a direct child of <body>\n $(this.tooltipSelector).remove();\n};\n\nSidebar.prototype.responsiveReflow = function responsiveReflow(isInitialPageLoad, viewportWidth) {\n if (isInitialPageLoad) {\n if (!this.isCollapsed() && this.isViewportNarrow(viewportWidth)) {\n var isAnimated = this.isAnimated();\n if (isAnimated) {\n this.$el.removeClass('aui-is-animated');\n }\n // This will trigger the \"collapse\" event before non-sidebar\n // JS code has a chance to bind listeners; they'll need to\n // check isCollapsed() if they care about the value at that\n // time.\n this.collapse();\n if (isAnimated) {\n // We must trigger a CSS reflow (by accessing\n // offsetHeight) otherwise the transition still runs.\n // eslint-disable-next-line\n this.$el[0].offsetHeight;\n this.$el.addClass('aui-is-animated');\n }\n }\n } else if (viewportWidth !== this._previousViewportWidth) {\n this.setCollapsedState(viewportWidth);\n }\n};\n\nSidebar.prototype.reflow = function reflow(\n scrollTop = window.pageYOffset,\n viewportHeight = document.documentElement.clientHeight,\n viewportWidth = window.innerWidth,\n scrollHeight = document.documentElement.scrollHeight,\n scrollLeft = window.pageXOffset) {\n\n // Header height needs to be checked because in Stash it changes when the CSS \"transform: translate3d\" is changed.\n // If you called reflow() after this change then nothing happened because the scrollTop and viewportHeight hadn't changed.\n var offsetTop = sidebarOffset(this.$el);\n var isInitialPageLoad = this._previousViewportWidth === null;\n\n if (!(scrollTop === this._previousScrollTop && viewportHeight === this._previousViewportHeight && offsetTop === this._previousOffsetTop)) {\n if (this.isCollapsed() && !isInitialPageLoad && scrollTop !== this._previousScrollTop) {\n //hide tooltips on scroll\n this._removeAllTooltips();\n }\n\n var isTouch = this.$body.hasClass('aui-page-sidebar-touch');\n var isTrackpadBounce = scrollTop !== this._previousScrollTop && (scrollTop < 0 || scrollTop + viewportHeight > scrollHeight);\n if (!isTouch && (isInitialPageLoad || !isTrackpadBounce)) {\n this.setHeight(scrollTop, viewportHeight, offsetTop);\n this.setTopPosition(scrollTop);\n }\n }\n\n if (scrollLeft !== this._previousScrollLeft) {\n this.setLeftPosition(scrollLeft);\n }\n\n var isResponsive = this.$el.attr('data-aui-responsive') !== 'false';\n if (isResponsive) {\n this.responsiveReflow(isInitialPageLoad, viewportWidth);\n } else {\n var isFlyOut = !this.isCollapsed() && this.isViewportNarrow(viewportWidth);\n this.$el.toggleClass('aui-sidebar-fly-out', isFlyOut);\n }\n\n this._previousScrollTop = scrollTop;\n this._previousViewportHeight = viewportHeight;\n this._previousViewportWidth = viewportWidth;\n this._previousOffsetTop = offsetTop;\n this._previousScrollLeft = scrollLeft;\n return this;\n};\n\nSidebar.prototype.toggle = function () {\n if (this.isCollapsed()) {\n this.expand();\n this._removeAllTooltips();\n } else {\n this.collapse();\n }\n return this;\n};\n\n/**\n * Returns a jQuery selector string for the trigger elements when the\n * sidebar is in a collapsed state, useful for delegated event binding.\n *\n * When using this selector in event handlers, the element (\"this\") will\n * either be an <a> (when the trigger was a tier-one menu item) or an\n * element with class \"aui-sidebar-group\" (for non-tier-one items).\n *\n * For delegated event binding you should bind to $el and check the value\n * of isCollapsed(), e.g.,\n *\n * sidebar.$el.on('click', sidebar.collapsedTriggersSelector, function (e) {\n * if (!sidebar.isCollapsed()) {\n * return;\n * }\n * });\n *\n * @returns string\n */\nSidebar.prototype.submenuTriggersSelector = '.aui-sidebar-group:not(.aui-sidebar-group-tier-one)';\n\nSidebar.prototype.collapsedTriggersSelector = [\n Sidebar.prototype.submenuTriggersSelector,\n '.aui-sidebar-group.aui-sidebar-group-tier-one > .aui-nav > li > a',\n '.aui-sidebar-footer > .aui-sidebar-settings-button'\n].join(', ');\n\nSidebar.prototype.toggleSelector = '.aui-sidebar-footer > .aui-sidebar-toggle';\n\nSidebar.prototype.tooltipSelector = '.aui-sidebar-section-tooltip';\n\nSidebar.prototype.inlineDialogClass = 'aui-sidebar-submenu-dialog';\nSidebar.prototype.inlineDialogSelector = '.' + Sidebar.prototype.inlineDialogClass;\n\nfunction getAllSubmenuDialogs() {\n return document.querySelectorAll(Sidebar.prototype.inlineDialogSelector);\n}\n\nfunction SubmenuManager () {\n this.inlineDialog = null;\n}\n\nSubmenuManager.prototype.submenu = function ($trigger) {\n sidebarSubmenuDeprecationLogger();\n return getSubmenu($trigger);\n};\n\nSubmenuManager.prototype.hasSubmenu = function ($trigger) {\n sidebarSubmenuDeprecationLogger();\n return hasSubmenu($trigger);\n};\n\nSubmenuManager.prototype.submenuHeadingHeight = function () {\n sidebarSubmenuDeprecationLogger();\n return 34;\n};\n\nSubmenuManager.prototype.isShowing = function () {\n sidebarSubmenuDeprecationLogger();\n return Sidebar.prototype.isSubmenuVisible();\n};\n\nSubmenuManager.prototype.show = function (e, trigger) {\n sidebarSubmenuDeprecationLogger();\n showSubmenu(trigger);\n};\n\nSubmenuManager.prototype.hide = function () {\n sidebarSubmenuDeprecationLogger();\n hideAllSubmenus();\n};\n\nSubmenuManager.prototype.inlineDialogShowHandler = function () {\n sidebarSubmenuDeprecationLogger();\n};\nSubmenuManager.prototype.inlineDialogHideHandler = function () {\n sidebarSubmenuDeprecationLogger();\n};\nSubmenuManager.prototype.moveSubmenuToInlineDialog = function () {\n sidebarSubmenuDeprecationLogger();\n};\nSubmenuManager.prototype.restoreSubmenu = function () {\n sidebarSubmenuDeprecationLogger();\n};\n\nSidebar.prototype.getVisibleSubmenus = function () {\n return Array.prototype.filter.call(getAllSubmenuDialogs(), function (inlineDialog2) {\n return inlineDialog2.open;\n });\n};\n\nSidebar.prototype.isSubmenuVisible = function () {\n return this.getVisibleSubmenus().length > 0;\n};\n\nfunction getSubmenu($trigger) {\n return $trigger.is('a') ? $trigger.next('.aui-nav') : $trigger.children('.aui-nav, hr');\n}\n\nfunction getSubmenuInlineDialog(trigger) {\n var inlineDialogId = trigger.getAttribute('aria-controls');\n return document.getElementById(inlineDialogId);\n}\n\nfunction hasSubmenu($trigger) {\n return getSubmenu($trigger).length !== 0;\n}\n\nfunction hideAllSubmenus() {\n var allSubmenuDialogs = getAllSubmenuDialogs();\n Array.prototype.forEach.call(allSubmenuDialogs, function (inlineDialog2) {\n inlineDialog2.open = false;\n });\n}\n\nfunction showSubmenu(trigger) {\n getSubmenuInlineDialog(trigger).open = true;\n}\n\nfunction constructSubmenu(sidebar, $trigger) {\n if ($trigger.data('_aui-sidebar-submenu-constructed')) {\n return;\n } else {\n $trigger.data('_aui-sidebar-submenu-constructed', true)\n }\n\n if (!hasSubmenu($trigger)) {\n return;\n }\n\n var submenuInlineDialog = document.createElement('aui-inline-dialog');\n\n var uniqueId = uid('sidebar-submenu');\n\n $trigger.attr('aria-controls', uniqueId);\n $trigger.attr('data-aui-trigger', '');\n skate.init($trigger); //Trigger doesn't listen to attribute modification\n\n submenuInlineDialog.setAttribute('id', uniqueId);\n submenuInlineDialog.setAttribute('alignment', 'right top');\n submenuInlineDialog.setAttribute('aria-hidden', 'true');\n submenuInlineDialog.setAttribute('contained-by', 'viewport');\n if (sidebar.isCollapsed()) {\n submenuInlineDialog.setAttribute('responds-to', 'hover');\n }\n\n $(submenuInlineDialog).addClass(Sidebar.prototype.inlineDialogClass);\n\n document.body.appendChild(submenuInlineDialog);\n skate.init(submenuInlineDialog); //Needed so that sidebar.submenus.isShowing() will work on page load\n\n addHandlersToSubmenuInlineDialog(sidebar, $trigger, submenuInlineDialog);\n\n return submenuInlineDialog;\n}\n\nfunction didOtherLayerOpened(e) {\n return e.target.tagName !== 'AUI-INLINE-DIALOG';\n}\n\nfunction didNestedInlineDialogOpened(e) {\n return !e.target.classList.contains('aui-sidebar-submenu-dialog');\n}\n\nfunction addHandlersToSubmenuInlineDialog(sidebar, $trigger, submenuInlineDialog) {\n submenuInlineDialog.addEventListener('aui-layer-show', function (e) {\n if (!sidebar.isCollapsed()) {\n e.preventDefault();\n return;\n }\n\n // we only care if sidebars inline dialog is opening\n if (didOtherLayerOpened(e) || didNestedInlineDialogOpened(e)) {\n return;\n }\n\n /**\n * trigger an event on inline dialog trigger and pass a reference to the inline dialog.\n * this let's one perform actions and modify content before it is displayed, for example lazy load submenu content\n */\n var customEvent = $.Event('aui-sidebar-submenu-before-show');\n $trigger.trigger(customEvent, submenuInlineDialog);\n if (customEvent.isDefaultPrevented()) {\n e.preventDefault();\n return;\n }\n inlineDialogShowHandler($trigger, submenuInlineDialog);\n });\n\n submenuInlineDialog.addEventListener('aui-layer-hide', function () {\n inlineDialogHideHandler($trigger);\n });\n}\n\nfunction inlineDialogShowHandler($trigger, submenuInlineDialog) {\n $trigger.addClass('active');\n submenuInlineDialog.innerHTML = SUBMENU_INLINE_DIALOG_CONTENTS_HTML;\n var title = $trigger.is('a') ? $trigger.text() : $trigger.children('.aui-nav-heading').text();\n\n var $container = $(submenuInlineDialog).find('.aui-navgroup-inner');\n $container.children('.aui-nav-heading')\n .attr('title', title)\n .children('strong')\n .text(title);\n\n var $submenu = getSubmenu($trigger);\n cloneExpander($submenu).appendTo($container);\n\n /**\n * Workaround to show all contents in the expander.\n * This function should come from the expander component.\n */\n function cloneExpander(element) {\n const $clone = clone(element);\n deduplicateIDs($clone, uid);\n\n if ($clone.hasClass('aui-expander-content')) {\n $clone.find('.aui-expander-cutoff').remove();\n $clone.removeClass('aui-expander-content');\n }\n return $clone;\n }\n}\n\nconst SUBMENU_INLINE_DIALOG_CONTENTS_HTML =\n '<div class=\"aui-inline-dialog-contents\">' +\n '<div class=\"aui-sidebar-submenu\" >' +\n '<div class=\"aui-navgroup aui-navgroup-vertical\">' +\n '<div class=\"aui-navgroup-inner\">' +\n '<div class=\"aui-nav-heading\"><strong></strong></div>' +\n '</div>' +\n '</div>' +\n '</div>' +\n '</div>';\n\nfunction inlineDialogHideHandler($trigger) {\n $trigger.removeClass('active');\n}\n\nfunction constructAllSubmenus(sidebar) {\n $(sidebar.collapsedTriggersSelector).each(function () {\n var $trigger = $(this);\n constructSubmenu(sidebar, $trigger);\n });\n}\n\nvar tipsyOpts = {\n trigger: 'manual',\n gravity: 'w',\n className: 'aui-sidebar-section-tooltip',\n title: function () {\n var $item = $(this);\n if ($item.is('a')) {\n return $item.attr('title') || $item.find('.aui-nav-item-label').text() || $item.data('tooltip');\n } else {\n return $item.children('.aui-nav').attr('title') || $item.children('.aui-nav-heading').text();\n }\n }\n};\n\nfunction showTipsy($trigger) {\n $trigger.tooltip(tipsyOpts).tooltip('show');\n var $tip = $trigger.data('tipsy') && $trigger.data('tipsy').$tip;\n if ($tip) { // if .aui-sidebar-group does not have a title to display\n // Remove \"opacity\" inline style from Tipsy to allow the our own styles and transitions to be applied\n $tip.css({opacity: ''}).addClass('tooltip-shown');\n }\n}\n\nfunction hideTipsy($trigger) {\n var $tip = $trigger.data('tipsy') && $trigger.data('tipsy').$tip;\n if ($tip) {\n var durationStr = $tip.css('transition-duration');\n\n if (durationStr) {\n // can be denominated in either s or ms\n var timeoutMs = (durationStr.indexOf('ms') >= 0) ?\n parseInt(durationStr.substring(0, durationStr.length - 2), 10) :\n 1000 * parseInt(durationStr.substring(0, durationStr.length - 1), 10);\n\n // use a timeout because the transitionend event is not reliable (yet),\n // more details here: https://bitbucket.atlassian.net/browse/BB-11599\n // an example of this at http://labs.silverorange.com/files/webkit-bug/\n // further caveats here: https://developer.mozilla.org/en-US/docs/Web/Events/transitionend\n // \"In the case where a transition is removed before completion,\n // such as if the transition-property is removed, then the event will not fire.\"\n setTimeout(function () {\n if ($tip.hasClass('tooltip-shown')) {\n $trigger.tooltip('hide');\n $tip.removeClass('tooltip-shown');\n }\n }, timeoutMs);\n } else {\n $tip.removeClass('tooltip-shown');\n }\n }\n}\n\nfunction lazilyInitializeSubmenus (sidebar) {\n sidebar.$el.on('mouseenter mouseleave click focus', sidebar.collapsedTriggersSelector, function (e) {\n const $trigger = $(e.target);\n constructSubmenu(sidebar, $trigger);\n });\n}\n\nfunction initializeHandlers(sidebar) {\n var $sidebar = $('.aui-sidebar');\n if (!$sidebar.length) {\n return;\n }\n\n lazilyInitializeSubmenus(sidebar);\n\n // AUI-2542: only enter touch mode on small screen touchable devices\n if (hasTouch && mediaQuery('only screen and (max-device-width:1024px)')) {\n $('body').addClass('aui-page-sidebar-touch');\n }\n\n var pendingReflow = null;\n var onScrollResizeReflow = function () {\n if (pendingReflow === null) {\n pendingReflow = requestAnimationFrame(function () {\n sidebar.reflow();\n pendingReflow = null;\n });\n }\n };\n\n $(window).on('scroll resize', onScrollResizeReflow);\n onScrollResizeReflow();\n\n if (sidebar.isAnimated()) {\n sidebar.$el.on('transitionend webkitTransitionEnd', function () {\n sidebar.$el.trigger($.Event(EVENT_PREFIX + (sidebar.isCollapsed() ? 'collapse-end' : 'expand-end')));\n });\n }\n\n sidebar.$el.on('click', '.aui-sidebar-toggle', function (e) {\n e.preventDefault();\n sidebar.toggle();\n });\n\n $('.aui-page-panel').on('click', function () {\n if (!sidebar.isCollapsed() && sidebar.isViewportNarrow()) {\n sidebar.collapse();\n }\n });\n\n var toggleShortcutHandler = function (e) {\n if (isNormalSquareBracket(e)) {\n sidebar.toggle();\n }\n };\n\n //We use keypress because it captures the actual character that was typed and not the physical key that was pressed.\n //This accounts for other keyboard layouts\n\n $(document).on('keypress', toggleShortcutHandler);\n\n sidebar._remove = function () {\n this._removeAllTooltips();\n $(this.inlineDialogSelector).remove();\n this.$el.off();\n this.$el.remove();\n $(document).off('keypress', toggleShortcutHandler);\n $(window).off('scroll resize', onScrollResizeReflow);\n };\n\n sidebar.$el.on('touchend', function (e) {\n if (sidebar.isCollapsed()) {\n sidebar.expand();\n e.preventDefault();\n }\n });\n\n sidebar.$el.on('mouseenter focus', sidebar.collapsedTriggersSelector, function () {\n if (!sidebar.isCollapsed()) {\n return;\n }\n\n var $trigger = $(this);\n\n if (!hasSubmenu($trigger)) {\n showTipsy($trigger);\n }\n });\n\n sidebar.$el.on('click blur mouseleave', sidebar.collapsedTriggersSelector, function () {\n if (!sidebar.isCollapsed()) {\n return;\n }\n hideTipsy($(this));\n });\n\n sidebar.$el.on('mouseenter focus', sidebar.toggleSelector, function () {\n var $trigger = $(this);\n if (sidebar.isCollapsed()) {\n $trigger.data('tooltip', i18n.getText('aui.sidebar.expand.tooltip'));\n } else {\n $trigger.data('tooltip', i18n.getText('aui.sidebar.collapse.tooltip'));\n }\n showTipsy($trigger);\n });\n\n sidebar.$el.on('click blur mouseleave', sidebar.toggleSelector, function () {\n hideTipsy($(this));\n });\n\n function isNormalTab(e) {\n return e.keyCode === keyCode.TAB && !e.shiftKey && !e.altKey;\n }\n\n function isNormalSquareBracket(e) {\n return e.which === keyCode.LEFT_SQUARE_BRACKET && !e.shiftKey && !e.ctrlKey && !e.metaKey && !isInput(e.target);\n }\n\n function isShiftTab(e) {\n return e.keyCode === keyCode.TAB && e.shiftKey;\n }\n\n function isFirstSubmenuItem(item, $submenuDialog) {\n return item === $submenuDialog.find(':aui-tabbable')[0];\n }\n\n function isLastSubmenuItem(item, $submenuDialog) {\n return item === $submenuDialog.find(':aui-tabbable').last()[0];\n }\n\n /**\n * Force to focus on the first tabbable item in inline dialog.\n * Reason: inline dialog will be hidden as soon as the trigger is out of focus (onBlur event)\n * This function should come directly from inline dialog component.\n */\n function focusFirstItemOfInlineDialog($inlineDialog) {\n $inlineDialog.attr('persistent', '');\n // don't use :aui-tabbable:first as it will select the first tabbable item in EACH nav group\n $inlineDialog.find(':aui-tabbable').first().focus();\n // workaround on IE:\n // delay the persistence of inline dialog to make sure onBlur event was triggered first\n setTimeout(function () {\n $inlineDialog.removeAttr('persistent');\n }, 100);\n }\n\n sidebar.$el.on('keydown', sidebar.collapsedTriggersSelector, function (e) {\n if (sidebar.isCollapsed()) {\n var triggerEl = e.target;\n var submenuInlineDialog = getSubmenuInlineDialog(triggerEl);\n if (!submenuInlineDialog) {\n return;\n }\n\n var $submenuInlineDialog = $(submenuInlineDialog);\n\n if (isNormalTab(e) && submenuInlineDialog.open) {\n e.preventDefault();\n focusFirstItemOfInlineDialog($submenuInlineDialog);\n\n $submenuInlineDialog.on('keydown', function (e) {\n if (isShiftTab(e) && isFirstSubmenuItem(e.target, $submenuInlineDialog) || isNormalTab(e) && isLastSubmenuItem(e.target, $submenuInlineDialog)) {\n triggerEl.focus();\n // unbind event and close submenu as the focus is out of the submenu\n $(this).off('keydown');\n hideAllSubmenus();\n }\n });\n }\n }\n });\n}\n\nvar sidebar = widget('sidebar', Sidebar);\n\n$(function () {\n sidebar('.aui-sidebar');\n});\n\nvar sidebarSubmenuDeprecationLogger = deprecate.getMessageLogger('Sidebar.submenus', {\n removeInVersion: '9.0.0',\n sinceVersion: '5.8.0'\n});\n\nglobalize('sidebar', sidebar);\n\nexport default sidebar;\n","import $ from './jquery';\nimport globalize from './internal/globalize';\n\n/**\n * Clones the element specified by the selector and removes the id attribute.\n *\n * @param {String} selector A jQuery selector\n */\nfunction clone (selector) {\n return $(selector).clone().removeAttr('id');\n}\n\nglobalize('clone', clone);\n\nexport default clone;\n","\nvar DocumentTouch = window.DocumentTouch;\nvar hasTouch = ('ontouchstart' in window) || DocumentTouch && document instanceof DocumentTouch;\nexport default hasTouch;\n","export default function (el) {\n return 'value' in el || el.isContentEditable;\n}\n","/**\n * Inspired by matchMedia() polyfill\n * https://github.com/paulirish/matchMedia.js/blob/953faa1489284655ed9d6e03bf48d39df70612c4/matchMedia.js\n */\n\n\nexport default function mediaQuery (mq) {\n if (window.matchMedia) {\n return window.matchMedia(mq).matches;\n }\n\n // fallback support for <=IE9 (remove this code if we don't want to support IE9 anymore)\n var style = document.createElement('style');\n style.type = 'text/css';\n style.id = 'testMedia';\n style.innerText = `@media ${mq} { #testMedia { width: 1px; } }`;\n document.head.appendChild(style);\n var info = window.getComputedStyle(style, null);\n var testMediaQuery = info.width === '1px';\n style.parentNode.removeChild(style);\n return testMediaQuery;\n};\n","import $ from '../jquery';\n\nfunction replaceAttributeForID($clone, id, value, attribute) {\n $clone.find(`[${attribute}]`).attr(attribute, (i, oldValue) => id === oldValue ? value : undefined);\n}\n\nfunction setCorrespondingTriggersID($clone, id, uuid) {\n replaceAttributeForID($clone, id, uuid, 'aria-controls');\n replaceAttributeForID($clone, id, uuid, 'aria-owns');\n}\n\nexport default function deduplicateIDs($clone, uidFunction) {\n let wrapper = $('<div></div>');\n wrapper.append($clone);\n wrapper.find('[id]')\n .each((i, el) => {\n const uuid = uidFunction(`${el.id}-`);\n setCorrespondingTriggersID(wrapper, el.id, uuid);\n el.id = uuid;\n });\n}\n","export {default as whenIType} from '@atlassian/aui/src/js/aui/when-i-type';\n","import $ from './jquery';\nimport '../jquery/jquery.hotkeys';\nimport '../jquery/jquery.moveto';\nimport i18n from './i18n';\nimport * as logger from './internal/log';\nimport { popup } from './dialog';\nimport globalize from './internal/globalize';\nimport keyCode from './key-code';\nimport { isEqual } from 'underscore';\n\nconst EMPTY_SELECTOR = false;\n\nvar isMac = navigator.platform.indexOf('Mac') !== -1;\nvar isSafari = navigator.userAgent.indexOf('Safari') !== -1;\nvar multiCharRegex = /^(backspace|tab|r(ight|eturn)|s(hift|pace|croll)|c(trl|apslock)|alt|pa(use|ge(up|down))|e(sc|nd)|home|left|up|d(el|own)|insert|f\\d\\d?|numlock|meta)/i;\n\n/**\n * Trigger native click event.\n * @param $el\n */\nconst triggerClickEvent = ($el) => {\n const element = $el[0];\n\n if (element) {\n // Native event bubbles are compatible with Synthetic Event from React\n const bubbles = true;\n const cancelable = true;\n const event = document.createEvent('MouseEvent');\n event.initMouseEvent('click', bubbles, cancelable, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n element.dispatchEvent(event);\n }\n};\n\n\n/**\n * Keyboard commands with syntactic sugar.\n *\n * <strong>Usage:</strong>\n * <pre>\n * whenIType(\"gh\").or(\"gd\").goTo(\"/secure/Dashboard.jspa\");\n * whenIType(\"c\").click(\"#create_link\");\n * </pre>\n *\n * @param keys - Key combinations, modifier keys are \"+\" deliminated. e.g \"ctrl+b\"\n */\nfunction whenIType (keys) {\n var boundKeyCombos = [];\n var executor = $.Callbacks();\n\n function keypressHandler(e) {\n if (!popup.current && executor) {\n executor.fire(e);\n }\n }\n\n function defaultPreventionHandler(e) {\n e.preventDefault();\n }\n\n // Bind an arbitrary set of keys by calling bindKeyCombo on each triggering key combo.\n // A string like \"abc 123\" means (a then b then c) OR (1 then 2 then 3). abc is one key combo, 123 is another.\n function bindKeys(keys) {\n var keyCombos = keys && keys.split ? $.trim(keys).split(' ') : [keys];\n\n keyCombos.forEach(function (keyCombo) {\n bindKeyCombo(keyCombo);\n });\n }\n\n function hasUnprintables(keysArr) {\n // a bit of a heuristic, but works for everything we have. Only the unprintable characters are represented with > 1-character names.\n var i = keysArr.length;\n while (i--) {\n if (keysArr[i].length > 1 && keysArr[i] !== 'space') {\n return true;\n }\n }\n return false;\n }\n\n // bind a single key combo to this handler\n // A string like \"abc 123\" means (a then b then c) OR (1 then 2 then 3). abc is one key combo, 123 is another.\n function bindKeyCombo(keyCombo) {\n var keysArr = keyCombo instanceof Array ?\n keyCombo :\n keyComboArrayFromString(keyCombo.toString());\n var eventType = hasUnprintables(keysArr) ? 'keydown' : 'keypress';\n\n boundKeyCombos.push(keysArr);\n $(document).on(eventType, EMPTY_SELECTOR, keysArr, keypressHandler);\n\n // Override browser/plugins\n $(document).on(eventType + ' keyup', EMPTY_SELECTOR, keysArr, defaultPreventionHandler);\n }\n\n // parse out an array of (modifier+key) presses from a single string\n // e.g. \"12ctrl+3\" becomes [ \"1\", \"2\", \"ctrl+3\" ]\n function keyComboArrayFromString(keyString) {\n var keysArr = [];\n var currModifiers = '';\n\n while (keyString.length) {\n var modifierMatch = keyString.match(/^(ctrl|meta|shift|alt)\\+/i);\n var multiCharMatch = keyString.match(multiCharRegex);\n\n if (modifierMatch) {\n currModifiers += modifierMatch[0];\n keyString = keyString.substring(modifierMatch[0].length);\n\n } else if (multiCharMatch) {\n keysArr.push(currModifiers + multiCharMatch[0]);\n keyString = keyString.substring(multiCharMatch[0].length);\n currModifiers = '';\n\n } else {\n keysArr.push(currModifiers + keyString[0]);\n keyString = keyString.substring(1);\n currModifiers = '';\n }\n }\n\n return keysArr;\n }\n\n function addShortcutsToTitle(selector) {\n var elem = $(selector);\n var title = elem.attr('title') || '';\n var keyCombos = boundKeyCombos.slice();\n var existingCombos = elem.data('boundKeyCombos') || [];\n var shortcutInstructions = elem.data('kbShortcutAppended') || '';\n var isFirst = !shortcutInstructions;\n var originalTitle = isFirst ? title : title.substring(0, title.length - shortcutInstructions.length);\n\n while (keyCombos.length) {\n var keyCombo = keyCombos.shift();\n var comboAlreadyExists = existingCombos.some(function(existingCombo) {\n return isEqual(keyCombo, existingCombo);\n });\n if (!comboAlreadyExists) {\n shortcutInstructions = appendKeyComboInstructions(keyCombo.slice(), shortcutInstructions, isFirst);\n isFirst = false;\n }\n }\n\n if (isMac) {\n shortcutInstructions = shortcutInstructions\n .replace(/Meta/ig, '\\u2318') //Apple cmd key\n .replace(/Shift/ig, '\\u21E7'); //Apple Shift symbol\n }\n\n elem.attr('title', originalTitle + shortcutInstructions);\n elem.data('kbShortcutAppended', shortcutInstructions);\n elem.data('boundKeyCombos', existingCombos.concat(boundKeyCombos));\n }\n\n function removeShortcutsFromTitle(selector) {\n var elem = $(selector);\n var shortcuts = elem.data('kbShortcutAppended');\n\n if (!shortcuts) {\n return;\n }\n\n var title = elem.attr('title');\n elem.attr('title', title.replace(shortcuts, ''));\n elem.removeData('kbShortcutAppended');\n elem.removeData('boundKeyCombos');\n }\n\n //\n function appendKeyComboInstructions(keyCombo, title, isFirst) {\n if (isFirst) {\n title += ' (' + i18n.getText('aui.keyboard.shortcut.type.x', keyCombo.shift());\n } else {\n title = title.replace(/\\)$/, '');\n title += i18n.getText('aui.keyboard.shortcut.or.x', keyCombo.shift());\n }\n\n keyCombo.forEach(function (key) {\n title += ' ' + i18n.getText('aui.keyboard.shortcut.then.x', key);\n });\n title += ')';\n\n return title;\n }\n\n bindKeys(keys);\n\n return whenIType.makeShortcut({\n executor: executor,\n bindKeys: bindKeys,\n addShortcutsToTitle: addShortcutsToTitle,\n removeShortcutsFromTitle: removeShortcutsFromTitle,\n keypressHandler: keypressHandler,\n defaultPreventionHandler: defaultPreventionHandler\n });\n}\n\nwhenIType.makeShortcut = function (options) {\n var executor = options.executor;\n var bindKeys = options.bindKeys;\n var addShortcutsToTitle = options.addShortcutsToTitle;\n var removeShortcutsFromTitle = options.removeShortcutsFromTitle;\n var keypressHandler = options.keypressHandler;\n var defaultPreventionHandler = options.defaultPreventionHandler;\n\n var selectorsWithTitlesModified = [];\n\n function makeMoveToFunction(getNewFocus) {\n return function (selector, options) {\n options = options || {};\n var focusedClass = options.focusedClass || 'focused';\n var wrapAround = options.hasOwnProperty('wrapAround') ? options.wrapAround : true;\n var escToCancel = options.hasOwnProperty('escToCancel') ? options.escToCancel : true;\n\n executor.add(function () {\n\n const $items = $(selector);\n let $focusedElem = $items.filter('.' + focusedClass);\n const moveToOptions = $focusedElem.length === 0 ? undefined : {transition: true};\n\n if (escToCancel) {\n $(document).one('keydown', function (e) {\n if (e.keyCode === keyCode.ESCAPE && $focusedElem) {\n $focusedElem.removeClass(focusedClass);\n }\n });\n }\n\n if ($focusedElem.length) {\n $focusedElem.removeClass(focusedClass);\n }\n\n $focusedElem = getNewFocus($focusedElem, $items, wrapAround);\n\n if ($focusedElem && $focusedElem.length > 0) {\n $focusedElem.addClass(focusedClass);\n $focusedElem.moveTo(moveToOptions);\n if ($focusedElem.is('a')) {\n $focusedElem.focus();\n } else {\n $focusedElem.find('a:first').focus();\n }\n }\n });\n return this;\n };\n }\n\n return {\n\n /**\n * Scrolls to and adds <em>focused</em> class to the next item in the jQuery collection\n *\n * @method moveToNextItem\n * @param selector\n * @param options\n * @return {Object}\n */\n moveToNextItem: makeMoveToFunction(function ($focusedElem, $items, wrapAround) {\n var index;\n\n if (wrapAround && $focusedElem.length === 0) {\n return $items.eq(0);\n\n } else {\n index = $.inArray($focusedElem.get(0), $items);\n if (index < $items.length - 1) {\n index = index + 1;\n return $items.eq(index);\n } else if (wrapAround) {\n return $items.eq(0);\n }\n }\n\n return $focusedElem;\n }),\n /**\n * Scrolls to and adds <em>focused</em> class to the previous item in the jQuery collection\n *\n * @method moveToPrevItem\n * @param selector\n * @param focusedClass\n * @return {Object}\n */\n moveToPrevItem: makeMoveToFunction(function ($focusedElem, $items, wrapAround) {\n var index;\n if (wrapAround && $focusedElem.length === 0) {\n return $items.filter(':last');\n\n } else {\n index = $.inArray($focusedElem.get(0), $items);\n if (index > 0) {\n index = index - 1;\n return $items.eq(index);\n } else if (wrapAround) {\n return $items.filter(':last');\n }\n }\n\n return $focusedElem;\n }),\n\n /**\n * Clicks the element specified by the <em>selector</em> argument.\n *\n * @method click\n * @param selector - jQuery selector for element\n * @return {Object}\n */\n click: function (selector) {\n selectorsWithTitlesModified.push(selector);\n addShortcutsToTitle(selector);\n\n executor.add(function () {\n const $el = $(selector);\n triggerClickEvent($el);\n });\n return this;\n },\n\n /**\n * Navigates to specified <em>location</em>\n *\n * @method goTo\n * @param {String} location - http location\n * @return {Object}\n */\n goTo: function (location) {\n executor.add(function () {\n window.location.href = location;\n });\n return this;\n },\n\n /**\n * navigates browser window to link href\n *\n * @method followLink\n * @param selector - jQuery selector for element\n * @return {Object}\n */\n followLink: function (selector) {\n selectorsWithTitlesModified.push(selector);\n addShortcutsToTitle(selector);\n\n executor.add(function () {\n var elem = $(selector)[0];\n if (elem && {'a': true, 'link': true}[ elem.nodeName.toLowerCase() ]) {\n window.location.href = elem.href;\n }\n });\n return this;\n },\n\n /**\n * Executes function\n *\n * @method execute\n * @param {function} func\n * @return {Object}\n */\n execute: function (func) {\n var self = this;\n executor.add(function () {\n func.apply(self, arguments);\n });\n return this;\n },\n\n /**\n * @deprecated This implementation is uncool. Kept around to satisfy Confluence plugin devs in the short term.\n *\n * Executes the javascript provided by the shortcut plugin point _immediately_.\n *\n * @method evaluate\n * @param {Function} command - the function provided by the shortcut key plugin point\n */\n evaluate: function (command) {\n command.call(this);\n },\n\n /**\n * Scrolls to element if out of view, then clicks it.\n *\n * @method moveToAndClick\n * @param selector - jQuery selector for element\n * @return {Object}\n */\n moveToAndClick: function (selector) {\n selectorsWithTitlesModified.push(selector);\n addShortcutsToTitle(selector);\n\n executor.add(function () {\n const $el = $(selector);\n if ($el.length > 0) {\n triggerClickEvent($el);\n $el.moveTo();\n }\n });\n return this;\n },\n\n /**\n * Scrolls to element if out of view, then focuses it\n *\n * @method moveToAndFocus\n * @param selector - jQuery selector for element\n * @return {Object}\n */\n moveToAndFocus: function (selector) {\n selectorsWithTitlesModified.push(selector);\n addShortcutsToTitle(selector);\n\n executor.add(function (e) {\n var $elem = $(selector);\n if ($elem.length > 0) {\n $elem.focus();\n if ($elem.moveTo) {\n $elem.moveTo();\n }\n if ($elem.is(':input')) {\n e.preventDefault();\n }\n }\n });\n return this;\n },\n\n /**\n * Binds additional keyboard controls\n *\n * @method or\n * @param {String} keys - keys to bind\n * @return {Object}\n */\n or: function (keys) {\n bindKeys(keys);\n return this;\n },\n\n /**\n * Unbinds shortcut keys\n *\n * @method unbind\n */\n unbind: function () {\n $(document)\n .unbind('keydown keypress', keypressHandler)\n .unbind('keydown keypress keyup', defaultPreventionHandler);\n\n for (var i = 0, len = selectorsWithTitlesModified.length; i < len; i++) {\n removeShortcutsFromTitle(selectorsWithTitlesModified[i]);\n }\n selectorsWithTitlesModified = [];\n }\n };\n};\n\n/**\n * Creates keyboard commands and their actions from json data. Format looks like:\n *\n * <pre>\n * [\n * {\n * \"keys\":[[\"g\", \"d\"]],\n * \"context\":\"global\",\n * \"op\":\"followLink\",\n * \"param\":\"#home_link\"\n * },\n * {\n * \"keys\":[[\"g\", \"i\"]],\n * \"context\":\"global\",\n * \"op\":\"followLink\",\n * \"param\":\"#find_link\"\n * },\n * {\n * \"keys\":[[\"/\"]],\n * \"context\":\"global\",\n * \"op\":\"moveToAndFocus\",\n * \"param\":\"#quickSearchInput\"\n * },\n * {\n * \"keys\":[[\"c\"]],\n * \"context\":\"global\",\n * \"op\":\"moveToAndClick\",\n * \"param\":\"#create_link\"\n * }\n * ]\n * </pre>\n *\n * @method fromJSON\n * @static\n * @param json\n */\nwhenIType.fromJSON = function (json, switchCtrlToMetaOnMac) {\n var shortcuts = [];\n\n if (json) {\n $.each(json, function (i,item) {\n const operation = item.op;\n const param = item.param;\n let params;\n\n if (operation === 'execute' || operation === 'evaluate') {\n // need to turn function string into function object\n params = [new Function(param)];\n\n } else if (/^\\[[^\\]\\[]*,[^\\]\\[]*\\]$/.test(param)) {\n // pass in an array to send multiple params\n try {\n params = JSON.parse(param);\n } catch (e) {\n logger.error('When using a parameter array, array must be in strict JSON format: ' + param);\n }\n\n if (!$.isArray(params)) {\n logger.error('Badly formatted shortcut parameter. String or JSON Array of parameters required: ' + param);\n }\n\n } else {\n params = [param];\n }\n\n $.each(item.keys, function () {\n\n var shortcutList = this;\n if (switchCtrlToMetaOnMac && isMac) {\n shortcutList = $.map(shortcutList, function (shortcutString) {\n return shortcutString.replace(/ctrl/i, 'meta');\n });\n }\n\n var newShortcut = whenIType(shortcutList);\n newShortcut[operation].apply(newShortcut, params);\n shortcuts.push(newShortcut);\n });\n\n });\n }\n\n return shortcuts;\n};\n\n// Trigger this event on an iframe if you want its keypress events to be propagated (Events to work in iframes).\n$(document).on('iframeAppended', function (e, iframe) {\n $(iframe).load(function () {\n var $target = $(iframe).contents();\n\n $target.on('keyup keydown keypress', function (e) {\n // safari propagates keypress events from iframes\n if (isSafari && e.type === 'keypress') {\n return;\n }\n\n if (!$(e.target).is(':input')) {\n $.event.trigger(\n e,\n arguments, // Preserve original event data.\n document, // Bubble this event from the iframe's document to its parent document.\n true // Use the capturing phase to preserve original event.target.\n );\n }\n });\n });\n});\n\nglobalize('whenIType', whenIType);\n\nexport default whenIType;\n","/*\n * Modified by Atlassian to allow chaining of keys\n *\n * jQuery Hotkeys Plugin\n * Copyright 2010, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n *\n * Based upon the plugin by Tzury Bar Yochay:\n * http://github.com/tzuryby/hotkeys\n *\n * Original idea by:\n * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/\n*/\n\n(function(jQuery){\n\n jQuery.hotkeys = {\n version: \"0.8\",\n\n specialKeys: {\n 8: \"backspace\", 9: \"tab\", 13: \"return\", 16: \"shift\", 17: \"ctrl\", 18: \"alt\", 19: \"pause\",\n 20: \"capslock\", 27: \"esc\", 32: \"space\", 33: \"pageup\", 34: \"pagedown\", 35: \"end\", 36: \"home\",\n 37: \"left\", 38: \"up\", 39: \"right\", 40: \"down\", 45: \"insert\", 46: \"del\",\n 91 : \"meta\",\n 96: \"0\", 97: \"1\", 98: \"2\", 99: \"3\", 100: \"4\", 101: \"5\", 102: \"6\", 103: \"7\",\n 104: \"8\", 105: \"9\", 106: \"*\", 107: \"+\", 109: \"-\", 110: \".\", 111 : \"/\",\n 112: \"f1\", 113: \"f2\", 114: \"f3\", 115: \"f4\", 116: \"f5\", 117: \"f6\", 118: \"f7\", 119: \"f8\",\n 120: \"f9\", 121: \"f10\", 122: \"f11\", 123: \"f12\", 144: \"numlock\", 145: \"scroll\",\n 188: \",\", 190: \".\", 191: \"/\", 224: \"meta\", 219: '[', 221: ']'\n },\n\n // These only work under Mac Gecko when using keypress (see http://unixpapa.com/js/key.html).\n keypressKeys: [ \"<\", \">\", \"?\" ],\n\n shiftNums: {\n \"`\": \"~\", \"1\": \"!\", \"2\": \"@\", \"3\": \"#\", \"4\": \"$\", \"5\": \"%\", \"6\": \"^\", \"7\": \"&\",\n \"8\": \"*\", \"9\": \"(\", \"0\": \")\", \"-\": \"_\", \"=\": \"+\", \";\": \":\", \"'\": \"\\\"\", \",\": \"<\",\n \".\": \">\", \"/\": \"?\", \"\\\\\": \"|\"\n }\n };\n\n jQuery.each(jQuery.hotkeys.keypressKeys, function (_, key) {\n jQuery.hotkeys.shiftNums[ key ] = key;\n });\n\n function TimedNumber(timer) {\n this.num = 0;\n this.timer = timer > 0 ? timer : false;\n }\n TimedNumber.prototype.val = function () {\n return this.num;\n };\n TimedNumber.prototype.inc = function () {\n if (this.timer) {\n clearTimeout(this.timeout);\n this.timeout = setTimeout(jQuery.proxy(TimedNumber.prototype.reset, this), this.timer);\n }\n this.num++;\n };\n TimedNumber.prototype.reset = function () {\n if (this.timer) {\n clearTimeout(this.timeout);\n }\n this.num = 0;\n };\n\n function keyHandler( handleObj ) {\n // Only care when a possible input has been specified\n if ( !(jQuery.isPlainObject(handleObj.data) || jQuery.isArray(handleObj.data) || typeof handleObj.data === \"string\") ) {\n return;\n }\n\n var origHandler = handleObj.handler,\n options = {\n timer: 700,\n combo: []\n };\n\n (function (data) {\n if (typeof data === 'string') {\n options.combo = [ data ];\n } else if (jQuery.isArray(data)) {\n options.combo = data;\n } else {\n jQuery.extend(options, data);\n }\n options.combo = jQuery.map(options.combo, function (key) {\n return key.toLowerCase();\n });\n })(handleObj.data);\n\n handleObj.index = new TimedNumber(options.timer);\n handleObj.handler = function( event ) {\n // Don't fire in text-accepting inputs that we didn't directly bind to\n // important to note that jQuery.fn.prop is only available on jquery 1.6+\n if ( this !== event.target && (/textarea|select|input/i.test( event.target.nodeName ) ||\n jQuery(event.target).prop('contenteditable') === 'true' )) {\n return;\n }\n\n // Keypress represents characters, not special keys\n var special = event.type !== 'keypress' ? jQuery.hotkeys.specialKeys[ event.which ] : null,\n character = String.fromCharCode( event.which ).toLowerCase(),\n key, modif = \"\", possible = {};\n\n // check combinations (alt|ctrl|shift+anything)\n if ( event.altKey && special !== \"alt\" ) {\n modif += \"alt+\";\n }\n\n if ( event.ctrlKey && special !== \"ctrl\" ) {\n modif += \"ctrl+\";\n }\n\n // TODO: Need to make sure this works consistently across platforms\n if ( event.metaKey && !event.ctrlKey && special !== \"meta\" ) {\n modif += \"meta+\";\n }\n\n if ( event.shiftKey && special !== \"shift\" ) {\n modif += \"shift+\";\n }\n\n // Under Chrome and Safari, meta's keycode == '['s charcode\n // Even if they did type this key combo we could not use it because it is browser back in Chrome/Safari on OS X\n if (event.metaKey && character === '[') {\n character = null;\n }\n\n if (special) {\n possible[ modif + special ] = true;\n }\n if (character) {\n possible[ modif + character ] = true;\n }\n\n // \"$\" can be specified as \"shift+4\" or \"$\"\n if ( /shift+/.test(modif) ) {\n possible [ modif.replace('shift+', '') + jQuery.hotkeys.shiftNums[ (special || character) ] ] = true;\n }\n\n var index = handleObj.index,\n combo = options.combo;\n\n if ( pressed(combo[index.val()], possible) ) {\n if ( index.val() === combo.length - 1 ) {\n index.reset();\n return origHandler.apply(this, arguments);\n } else {\n index.inc();\n }\n } else {\n index.reset();\n // For mutli-key combinations, we might have restarted the key sequence.\n if ( pressed(combo[0], possible) ) {\n index.inc();\n }\n }\n };\n }\n\n function pressed(key, possible) {\n var keys = key.split(' ');\n for (var i = 0, len = keys.length; i < len; i++) {\n if ( possible[keys[i]] ) {\n return true;\n }\n }\n return false;\n }\n\n jQuery.each([ \"keydown\", \"keyup\", \"keypress\" ], function() {\n jQuery.event.special[ this ] = { add: keyHandler };\n });\n\n})( jQuery );\n","/**\n *\n * @module Controls\n * @requires AJS, jQuery\n */\n\n/**\n * If not visible, moves the scroll position of the screen to the element\n *\n * <pre>\n * <strong>Usage:</strong>\n * jQuery(\"li.item\").moveTo();\n * </pre>\n *\n * This plugin also supports options as an argument. The options\n * that can be defined are:\n * <ul>\n * <li>transition - if set to true will cause a smooth scrolling transition (false by default)</li>\n * <li>scrollOffset - defines an offset to scroll past the element to view in pixels such that\n * all of it can be viewed (35 pixels by default)</li>\n * </ul>\n *\n * @class moveTo\n * @constuctor moveTo\n * @namespace jQuery.fn\n * @param {Object} options\n */\njQuery.fn.moveTo = function (options) {\n var defaults = {\n transition: false,\n scrollOffset: 35\n };\n\n var opts = jQuery.extend(defaults, options);\n var instance = this;\n var topOffset = instance.offset().top;\n var scrollTarget;\n\n if ((jQuery(window).scrollTop() + jQuery(window).height() - this.outerHeight() < topOffset ||\n jQuery(window).scrollTop() + opts.scrollOffset > topOffset) &&\n jQuery(window).height() > opts.scrollOffset) {\n\n if (jQuery(window).scrollTop() + opts.scrollOffset > topOffset) {\n //move up\n scrollTarget = topOffset - (jQuery(window).height() - this.outerHeight()) + opts.scrollOffset;\n } else {\n //move down\n scrollTarget = topOffset - opts.scrollOffset;\n }\n\n if (!jQuery.fn.moveTo.animating && opts.transition) {\n jQuery(document).trigger('moveToStarted', this);\n jQuery.fn.moveTo.animating = true;\n jQuery('html,body').animate({\n scrollTop: scrollTarget\n }, 1000, function () {\n jQuery(document).trigger('moveToFinished', instance);\n delete jQuery.fn.moveTo.animating;\n });\n return this;\n } else {\n var jQueryCache = jQuery('html, body');\n if (jQueryCache.is(':animated')) {\n jQueryCache.stop();\n delete jQuery.fn.moveTo.animating;\n }\n\n jQuery(document).trigger('moveToStarted');\n jQuery(window).scrollTop(scrollTarget);\n //need to put a slight timeout for the moveToFinished event such that recipients of this event\n //have time to act on it.\n setTimeout(function () {\n jQuery(document).trigger('moveToFinished', instance);\n }, 100);\n return this;\n }\n }\n jQuery(document).trigger('moveToFinished', this);\n return this;\n};\n","import $ from './jquery';\nimport keyCode from './key-code';\nimport * as logger from './internal/log';\nimport * as deprecate from './internal/deprecation';\nimport { trigger } from './event';\nimport { dim, undim } from './blanket';\nimport { enable } from './forms';\nimport globalize from './internal/globalize';\n\n/* eslint complexity:off, eqeqeq:off, max-depth:off, no-unused-vars:off, strict:off */\n\n/**\n * Creates a generic popup that will be displayed in the center of the screen with a\n * grey blanket in the background.\n * Usage:\n * <pre>\n * createPopup({\n * width: 800,\n * height: 400,\n * id: \"my-dialog\"\n * });\n * </pre>\n * @param options {object} [optional] Permitted options and defaults are as follows:\n * width (800), height (600), keypressListener (closes dialog on ESC).\n*/\nfunction createPopup (options) {\n var defaults = {\n width: 800,\n height: 600,\n closeOnOutsideClick: false,\n keypressListener: function (e) {\n if (e.keyCode === keyCode.ESCAPE && popup.is(':visible')) {\n res.hide();\n }\n }\n };\n // for backwards-compatibility\n if (typeof options !== 'object') {\n options = {\n width: arguments[0],\n height: arguments[1],\n id: arguments[2]\n };\n options = $.extend({}, options, arguments[3]);\n }\n options = $.extend({}, defaults, options);\n var popup = $('<div></div>').addClass('aui-popup');\n\n if (options.id) {\n popup.attr('id', options.id);\n }\n //find the highest z-index on the page to ensure any new popup that is shown is shown on top\n var highestZIndex = 3000;\n $('.aui-dialog').each(function () {\n var currentPopup = $(this);\n highestZIndex = (currentPopup.css('z-index') > highestZIndex) ? currentPopup.css('z-index') : highestZIndex;\n });\n\n var applySize = (function _applySize (width, height) {\n options.width = (width = (width || options.width));\n options.height = (height = (height || options.height));\n\n popup.css({\n marginTop: -Math.round(height / 2) + 'px',\n marginLeft: -Math.round(width / 2) + 'px',\n width: width,\n height: height,\n 'z-index': parseInt(highestZIndex,10) + 2 //+ 2 so that the shadow can be shown on +1 (underneath the popup but above everything else)\n });\n return _applySize;\n }(options.width, options.height));\n\n $('body').append(popup);\n\n popup.hide();\n enable(popup);\n\n /**\n * Popup object\n * @class Popup\n * @static\n */\n\n //blanket for reference further down\n var blanket = $('.aui-blanket');\n var focusItem = function (selector, element) {\n var item = $(selector, element);\n if (item.length) {\n item.focus();\n return true;\n }\n return false;\n };\n // we try and place focus, in the configured element or by looking for the first input\n // in page body, then button panel and finally page menu.\n var focusDialog = function (element) {\n if ($('.dialog-page-body', element).find(':focus').length !== 0) {\n return;\n }\n if (options.focusSelector) {\n return focusItem(options.focusSelector, element);\n }\n var defaultFocusSelector = ':input:visible:enabled:first';\n if (focusItem(defaultFocusSelector, $('.dialog-page-body', element))) { return; }\n if (focusItem(defaultFocusSelector, $('.dialog-button-panel', element))) { return; }\n\n focusItem(defaultFocusSelector, $('.dialog-page-menu', element));\n };\n\n var res = {\n\n changeSize: function (w, h) {\n if ((w && w != options.width) || (h && h != options.height)) {\n applySize(w, h);\n }\n this.show();\n },\n\n /**\n * Shows the popup\n * @method show\n */\n show: function () {\n\n var show = function () {\n $(document)\n .off('keydown', options.keypressListener)\n .on('keydown', options.keypressListener);\n dim();\n blanket = $('.aui-blanket');\n if (blanket.length !== 0 && options.closeOnOutsideClick){\n blanket.on('click', function () {\n if (popup.is(':visible')){\n res.hide();\n }\n });\n }\n popup.show();\n\n createPopup.current = this;\n focusDialog(popup);\n $(document).trigger('showLayer', ['popup', this]);\n };\n show.call(this);\n this.show = show;\n },\n /**\n * Hides the popup.\n * @method hide\n */\n hide: function () {\n $(document).unbind('keydown', options.keypressListener);\n blanket.unbind();\n this.element.hide();\n\n //only undim if no other dialogs are visible\n if ($('.aui-dialog:visible').length === 0) {\n undim();\n }\n\n // AUI-1059: remove focus from the active element when dialog is hidden\n var activeElement = document.activeElement;\n if (this.element.has(activeElement).length) {\n activeElement.blur();\n }\n\n $(document).trigger('hideLayer', ['popup', this]);\n createPopup.current = null;\n this.enable();\n },\n /**\n * jQuery object, representing popup DOM element\n * @property element\n */\n element: popup,\n /**\n * Removes popup elements from the DOM\n * @method remove\n */\n remove: function () {\n popup.remove();\n this.element = null;\n },\n /**\n * disables the popup\n * @method disable\n */\n disable: function () {\n if (!this.disabled){\n this.popupBlanket = $(\"<div class='dialog-blanket'> </div>\").css({\n height: popup.height(),\n width: popup.width()\n });\n popup.append(this.popupBlanket);\n this.disabled = true;\n }\n },\n /**\n * enables the popup if it is disabled\n * @method enable\n */\n enable: function () {\n if (this.disabled) {\n this.disabled = false;\n this.popupBlanket.remove();\n this.popupBlanket = null;\n }\n }\n };\n\n return res;\n}\n\n// Scoping function\nvar Dialog = (function () {\n /**\n * @class Button\n * @constructor Button\n * @param page {number} page id\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @private\n */\n function Button(page, label, onclick, className) {\n if (!page.buttonpanel) {\n page.addButtonPanel();\n }\n this.page = page;\n this.onclick = onclick;\n this._onclick = function (e) {\n return onclick.call(this, page.dialog, page, e) === true;\n };\n this.item = $('<button></button>').html(label).addClass('button-panel-button');\n if (className) {\n this.item.addClass(className);\n }\n if (typeof onclick === 'function') {\n this.item.on('click', this._onclick);\n }\n page.buttonpanel.append(this.item);\n this.id = page.button.length;\n page.button[this.id] = this;\n }\n\n /**\n * @class Link\n * @constructor Link\n * @param page {number} page id\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @private\n */\n function Link(page, label, onclick, className, url) {\n if (!page.buttonpanel) {\n page.addButtonPanel();\n }\n\n //if no url is given use # as default\n if (!url){\n url = '#';\n }\n\n this.page = page;\n this.onclick = onclick;\n this._onclick = function (e) {\n return onclick.call(this, page.dialog, page, e) === true;\n };\n this.item = $('<a></a>').html(label).attr('href', url).addClass('button-panel-link');\n if (className) {\n this.item.addClass(className);\n }\n if (typeof onclick === 'function') {\n this.item.click(this._onclick);\n }\n page.buttonpanel.append(this.item);\n this.id = page.button.length;\n page.button[this.id] = this;\n }\n\n function itemMove (leftOrRight, target) {\n var dir = leftOrRight == 'left' ? -1 : 1;\n return function (step) {\n var dtarget = this.page[target];\n if (this.id != ((dir == 1) ? dtarget.length - 1 : 0)) {\n dir *= (step || 1);\n dtarget[this.id + dir].item[(dir < 0 ? 'before' : 'after')](this.item);\n dtarget.splice(this.id, 1);\n dtarget.splice(this.id + dir, 0, this);\n for (var i = 0, ii = dtarget.length; i < ii; i++) {\n if (target == 'panel' && this.page.curtab == dtarget[i].id) {\n this.page.curtab = i;\n }\n dtarget[i].id = i;\n }\n }\n return this;\n };\n }\n function itemRemove(target) {\n return function () {\n this.page[target].splice(this.id, 1);\n for (var i = 0, ii = this.page[target].length; i < ii; i++) {\n this.page[target][i].id = i;\n }\n this.item.remove();\n };\n }\n /**\n * Moves item left in the hierarchy\n * @method moveUp\n * @method moveLeft\n * @param step {number} how many items to move, default is 1\n * @return {object} button\n */\n Button.prototype.moveUp = Button.prototype.moveLeft = itemMove('left', 'button');\n /**\n * Moves item right in the hierarchy\n * @method moveDown\n * @method moveRight\n * @param step {number} how many items to move, default is 1\n * @return {object} button\n */\n Button.prototype.moveDown = Button.prototype.moveRight = itemMove('right', 'button');\n /**\n * Removes item\n * @method remove\n */\n Button.prototype.remove = itemRemove('button');\n\n /**\n * Getter and setter for label\n * @method label\n * @param label {string} [optional] label of the button\n * @return {string} label, if nothing is passed in\n * @return {object} jQuery button object, if label is passed in\n */\n Button.prototype.html = function (label) {\n return this.item.html(label);\n };\n /**\n * Getter and setter of onclick event handler\n * @method onclick\n * @param onclick {function} [optional] new event handler, that is going to replace the old one\n * @return {function} existing event handler if new one is undefined\n */\n Button.prototype.onclick = function (onclick) {\n let self = this;\n if (typeof onclick === 'undefined') {\n return this.onclick;\n } else {\n this.item.unbind('click', this._onclick);\n this._onclick = function (e) {\n return onclick.call(this, self.page.dialog, self.page, e) === true;\n };\n if (typeof onclick === 'function') {\n this.item.click(this._onclick);\n }\n }\n };\n\n var DEFAULT_PADDING = 20;\n\n /**\n * Class for panels\n * @class Panel\n * @constructor\n * @param page {number} page id\n * @param title {string} panel title\n * @param reference {string} or {object} jQuery object or selector for the contents of the Panel\n * @param className {string} [optional] HTML class name\n * @param panelButtonId {string} the unique id that will be put on the button element for this panel.\n * @private\n */\n var Panel = function (page, title, reference, className, panelButtonId) {\n if (!(reference instanceof $)) {\n reference = $(reference);\n }\n\n this.dialog = page.dialog;\n this.page = page;\n this.id = page.panel.length;\n this.button = $('<button></button>').html(title).addClass('item-button');\n\n if (panelButtonId) {\n this.button[0].id = panelButtonId;\n }\n\n this.item = $('<li></li>').append(this.button).addClass('page-menu-item');\n this.body = $('<div></div>').append(reference).addClass('dialog-panel-body').css('height', page.dialog.height + 'px');\n this.padding = DEFAULT_PADDING;\n if (className) {\n this.body.addClass(className);\n }\n var i = page.panel.length;\n var tab = this;\n page.menu.append(this.item);\n page.body.append(this.body);\n page.panel[i] = this;\n var onclick = function () {\n var cur;\n if (page.curtab + 1) {\n cur = page.panel[page.curtab];\n cur.body.hide();\n cur.item.removeClass('selected');\n (typeof cur.onblur === 'function') && cur.onblur();\n }\n page.curtab = tab.id;\n tab.body.show();\n tab.item.addClass('selected');\n (typeof tab.onselect === 'function') && tab.onselect();\n (typeof page.ontabchange === 'function') && page.ontabchange(tab, cur);\n };\n if (!this.button.click) {\n logger.log('atlassian-dialog:Panel:constructor - this.button.click false');\n this.button.onclick = onclick;\n } else {\n this.button.click(onclick);\n }\n onclick();\n if (i == 0) {\n page.menu.css('display', 'none'); // don't use jQuery hide()\n } else {\n page.menu.show();\n }\n };\n /**\n * Selects current panel\n * @method select\n */\n Panel.prototype.select = function () {\n this.button.click();\n };\n /**\n * Moves item left in the hierarchy\n * @method moveUp\n * @method moveLeft\n * @param step {number} how many items to move, default is 1\n * @return {object} panel\n */\n Panel.prototype.moveUp = Panel.prototype.moveLeft = itemMove('left', 'panel');\n /**\n * Moves item right in the hierarchy\n * @method moveDown\n * @method moveRight\n * @param step {number} how many items to move, default is 1\n * @return {object} panel\n */\n Panel.prototype.moveDown = Panel.prototype.moveRight = itemMove('right', 'panel');\n /**\n * Removes item\n * @method remove\n */\n Panel.prototype.remove = itemRemove('panel');\n /**\n * Getter and setter of inner HTML of the panel\n * @method html\n * @param html {string} HTML source to set up\n * @return {object} panel\n * @return {string} current HTML source\n */\n Panel.prototype.html = function (html) {\n if (html) {\n this.body.html(html);\n return this;\n } else {\n return this.body.html();\n }\n };\n /**\n * This method gives you ability to overwrite default padding value. Use it with caution.\n * @method setPadding\n * @param padding {number} padding in pixels\n * @return {object} panel\n * @see DEFAULT_PADDING\n */\n Panel.prototype.setPadding = function (padding) {\n if (!isNaN(+padding)) {\n this.body.css('padding', +padding);\n this.padding = +padding;\n this.page.recalcSize();\n }\n return this;\n };\n\n var HEADER_HEIGHT = 62;\n var BUTTONS_HEIGHT = 52;\n var MIN_DIALOG_VERTICAL_BUFFER = 50;\n\n /**\n * Class for pages\n * @class Page\n * @constructor\n * @param dialog {object} dialog object\n * @param className {string} [optional] HTML class name\n * @private\n */\n var Page = function (dialog, className) {\n this.dialog = dialog;\n this.id = dialog.page.length;\n this.element = $('<div></div>').addClass('dialog-components');\n this.body = $('<div></div>').addClass('dialog-page-body');\n this.menu = $('<ul></ul>').addClass('dialog-page-menu').css('height', dialog.height + 'px');\n this.body.append(this.menu);\n this.curtab;\n this.panel = [];\n this.button = [];\n if (className) {\n this.body.addClass(className);\n }\n dialog.popup.element.append(this.element.append(this.menu).append(this.body));\n dialog.page[dialog.page.length] = this;\n };\n\n /**\n * Size updater for contents of the page. For internal use\n * @method recalcSize\n */\n Page.prototype.recalcSize = function () {\n var headerHeight = this.header ? HEADER_HEIGHT : 0;\n var buttonHeight = this.buttonpanel ? BUTTONS_HEIGHT : 0;\n for (var i = this.panel.length; i--;) {\n var dialogComponentsHeight = this.dialog.height - headerHeight - buttonHeight;\n this.panel[i].body.css('height', dialogComponentsHeight);\n this.menu.css('height', dialogComponentsHeight);\n }\n };\n\n /**\n * Adds a button panel to the bottom of dialog\n * @method addButtonPanel\n */\n Page.prototype.addButtonPanel = function () {\n this.buttonpanel = $('<div></div>').addClass('dialog-button-panel');\n this.element.append(this.buttonpanel);\n };\n\n /**\n * Method for adding new panel to the page\n * @method addPanel\n * @param title {string} panel title\n * @param reference {string} or {object} jQuery object or selector for the contents of the Panel\n * @param className {string} [optional] HTML class name\n * @param panelButtonId {string} [optional] The unique id for the panel's button.\n * @return {object} the page\n */\n Page.prototype.addPanel = function (title, reference, className, panelButtonId) {\n new Panel(this, title, reference, className, panelButtonId);\n this.recalcSize();\n return this;\n };\n /**\n * Method for adding header to the page\n * @method addHeader\n * @param title {string} panel title\n * @param className {string} [optional] CSS class name\n * @return {object} the page\n */\n Page.prototype.addHeader = function (title, className) {\n if (this.header) {\n this.header.remove();\n }\n this.header = $('<h2></h2>').text(title || '').addClass('dialog-title');\n className && this.header.addClass(className);\n this.element.prepend(this.header);\n this.recalcSize();\n return this;\n };\n /**\n * Method for adding new button to the page\n * @method addButton\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @return {object} the page\n */\n Page.prototype.addButton = function (label, onclick, className) {\n new Button(this, label, onclick, className);\n this.recalcSize();\n return this;\n };\n /**\n * Method for adding new link to the page\n * @method addLink\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @return {object} the page\n */\n Page.prototype.addLink = function (label, onclick, className, url) {\n new Link(this, label, onclick, className, url);\n this.recalcSize();\n return this;\n };\n\n /**\n * Selects corresponding panel\n * @method gotoPanel\n * @param panel {object} panel object\n * @param panel {number} id of the panel\n */\n Page.prototype.gotoPanel = function (panel) {\n this.panel[panel.id || panel].select();\n };\n /**\n * Returns current panel on the page\n * @method getCurrentPanel\n * @return panel {object} the panel\n */\n Page.prototype.getCurrentPanel = function () {\n return this.panel[this.curtab];\n };\n /**\n * Hides the page\n * @method hide\n */\n Page.prototype.hide = function () {\n this.element.hide();\n };\n /**\n * Shows the page, if it was hidden\n * @method show\n */\n Page.prototype.show = function () {\n this.element.show();\n };\n /**\n * Removes the page\n * @method remove\n */\n Page.prototype.remove = function () {\n this.element.remove();\n };\n\n\n\n /**\n * Constructor for a Dialog. A Dialog is a popup which consists of Pages, where each Page can consist of Panels,\n * Buttons and a Header. The dialog must be constructed in page order as it has a current page state. For example,\n * calling addButton() will add a button to the 'current' page.\n * <p>\n * By default, a new Dialog will have one page. If there are multiple Panels on a Page, a\n * menu is displayed on the left side of the dialog.\n * </p>\n * Usage:\n * <pre>\n * var dialog = new Dialog(860, 530);\n * dialog.addHeader(\"Insert Macro\")\n * .addPanel(\"All\", \"&lt;p&gt;&lt;/p&gt;\")\n * .addPanel(\"Some\", \"&lt;p&gt;&lt;/p&gt;\")\n * .addButton(\"Next\", function (dialog) {dialog.nextPage();})\n * .addButton(\"Cancel\", function (dialog) {dialog.hide();});\n *\n * dialog.addPage()\n * .addButton(\"Cancel\", function (dialog) {dialog.hide();});\n *\n * somebutton.on('click', function () {dialog.show();});\n * </pre>\n * @class Dialog\n * @constructor\n * @param width {number} dialog width in pixels, or an object containing the Dialog parameters\n * @param height {number} dialog height in pixels\n * @param id {number} [optional] dialog id\n */\n function Dialog (width, height, id) {\n var options = {};\n if (!+width) {\n options = Object(width);\n width = options.width;\n height = options.height;\n id = options.id;\n }\n this.height = height || 480;\n this.width = width || 640;\n this.id = id;\n options = $.extend({}, options, {\n width: this.width,\n height: this.height,\n id: this.id\n });\n this.popup = createPopup(options);\n\n this.popup.element.addClass('aui-dialog');\n this.page = [];\n this.curpage = 0;\n\n new Page(this);\n };\n\n\n /**\n * Method for adding header to the current page\n * @method addHeader\n * @param title {string} panel title\n * @param className {string} [optional] HTML class name\n * @return {object} the dialog\n */\n Dialog.prototype.addHeader = function (title, className) {\n this.page[this.curpage].addHeader(title, className);\n return this;\n };\n /**\n * Method for adding new button to the current page\n * @method addButton\n * @param label {string} button label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @return {object} the dialog\n */\n Dialog.prototype.addButton = function (label, onclick, className) {\n this.page[this.curpage].addButton(label, onclick, className);\n return this;\n };\n\n /**\n * Method for adding new link to the current page\n * @method addButton\n * @param label {string} link label\n * @param onclick {function} [optional] click event handler\n * @param className {string} [optional] class name\n * @return {object} the dialog\n */\n Dialog.prototype.addLink = function (label, onclick, className, url) {\n this.page[this.curpage].addLink(label, onclick, className, url);\n return this;\n };\n\n /**\n * Method for adding a submit button to the current page\n * @method addSubmit\n * @param label {string} link label\n * @param onclick {function} [optional] click event handler\n * @return {object} the dialog\n */\n Dialog.prototype.addSubmit = function (label, onclick) {\n this.page[this.curpage].addButton(label, onclick, 'button-panel-submit-button');\n return this;\n };\n\n /**\n * Method for adding a cancel link to the current page\n * @method addCancel\n * @param label {string} link label\n * @param onclick {function} [optional] click event handler\n * @return {object} the dialog\n */\n Dialog.prototype.addCancel = function (label, onclick) {\n this.page[this.curpage].addLink(label, onclick, 'button-panel-cancel-link');\n return this;\n };\n\n\n /**\n * Method for adding new button panel to the current page\n * @return {object} the dialog\n */\n Dialog.prototype.addButtonPanel = function () {\n this.page[this.curpage].addButtonPanel();\n return this;\n };\n\n\n /**\n * Method for adding new panel to the current page.\n * @method addPanel\n * @param title {string} panel title\n * @param reference {string} or {object} jQuery object or selector for the contents of the Panel\n * @param className {string} [optional] HTML class name\n * @param panelButtonId {String} [optional] The unique id for the panel's button.\n * @return {object} the dialog\n */\n Dialog.prototype.addPanel = function (title, reference, className, panelButtonId) {\n this.page[this.curpage].addPanel(title, reference, className, panelButtonId);\n return this;\n };\n /**\n * Adds a new page to the dialog and sets the new page as the current page\n * @method addPage\n * @param className {string} [optional] HTML class name\n * @return {object} the dialog\n */\n Dialog.prototype.addPage = function (className) {\n new Page(this, className);\n this.page[this.curpage].hide();\n this.curpage = this.page.length - 1;\n return this;\n };\n /**\n * Making next page in hierarchy visible and active\n * @method nextPage\n * @return {object} the dialog\n */\n Dialog.prototype.nextPage = function () {\n this.page[this.curpage++].hide();\n if (this.curpage >= this.page.length) {\n this.curpage = 0;\n }\n this.page[this.curpage].show();\n return this;\n };\n /**\n * Making previous page in hierarchy visible and active\n * @method prevPage\n * @return {object} the dialog\n */\n Dialog.prototype.prevPage = function () {\n this.page[this.curpage--].hide();\n if (this.curpage < 0) {\n this.curpage = this.page.length - 1;\n }\n this.page[this.curpage].show();\n return this;\n };\n /**\n * Making specified page visible and active\n * @method gotoPage\n * @param num {number} page id\n * @return {object} the dialog\n */\n Dialog.prototype.gotoPage = function (num) {\n this.page[this.curpage].hide();\n this.curpage = num;\n if (this.curpage < 0) {\n this.curpage = this.page.length - 1;\n } else if (this.curpage >= this.page.length) {\n this.curpage = 0;\n }\n this.page[this.curpage].show();\n return this;\n };\n /**\n * Returns specified panel at the current page\n * @method getPanel\n * @param pageorpanelId {number} page id or panel id\n * @param panelId {number} panel id\n * @return {object} the internal Panel object\n */\n Dialog.prototype.getPanel = function (pageorpanelId, panelId) {\n var pageid = (panelId == null) ? this.curpage : pageorpanelId;\n if (panelId == null) {\n panelId = pageorpanelId;\n }\n return this.page[pageid].panel[panelId];\n };\n /**\n * Returns specified page\n * @method getPage\n * @param pageid {number} page id\n * @return {object} the internal Page Object\n */\n Dialog.prototype.getPage = function (pageid) {\n return this.page[pageid];\n };\n /**\n * Returns current panel at the current page\n * @method getCurrentPanel\n * @return {object} the internal Panel object\n */\n Dialog.prototype.getCurrentPanel = function () {\n return this.page[this.curpage].getCurrentPanel();\n };\n\n /**\n * Selects corresponding panel\n * @method gotoPanel\n * @param pageorpanel {object} panel object or page object\n * @param panel {object} panel object\n * @param panel {number} id of the panel\n */\n Dialog.prototype.gotoPanel = function (pageorpanel, panel) {\n if (panel != null) {\n var pageid = pageorpanel.id || pageorpanel;\n this.gotoPage(pageid);\n }\n this.page[this.curpage].gotoPanel(typeof panel === 'undefined' ? pageorpanel : panel);\n };\n\n /**\n * Shows the dialog, if it is not visible\n * @method show\n * @return {object} the dialog\n */\n Dialog.prototype.show = function () {\n this.popup.show();\n trigger('show.dialog', {dialog: this});\n return this;\n };\n /**\n * Hides the dialog, if it was visible\n * @method hide\n * @return {object} the dialog\n */\n Dialog.prototype.hide = function () {\n this.popup.hide();\n trigger('hide.dialog', {dialog: this});\n return this;\n };\n /**\n * Removes the dialog elements from the DOM\n * @method remove\n */\n Dialog.prototype.remove = function () {\n this.popup.hide();\n this.popup.remove();\n trigger('remove.dialog', {dialog: this});\n };\n /**\n * Disables the dialog if enabled\n * @method disable\n */\n Dialog.prototype.disable = function () {\n this.popup.disable();\n return this;\n };\n /**\n * Enables the dialog if disabled\n * @method disable\n */\n Dialog.prototype.enable = function () {\n this.popup.enable();\n return this;\n };\n /**\n * Gets set of items depending on query\n * @method get\n * @param query {string} query to search for panels, pages, headers or buttons\n * e.g.\n * '#Name' will find all dialog components with the given name such as panels and buttons, etc\n * 'panel#Name' will find only panels with the given name\n * 'panel#\"Foo bar\"' will find only panels with given name\n * 'panel:3' will find the third panel\n */\n Dialog.prototype.get = function (query) {\n var coll = [];\n var dialog = this;\n var nameExp = '#([^\"][^ ]*|\"[^\"]*\")'; // a name is a hash followed by either a bare word or quoted string\n var indexExp = ':(\\\\d+)'; // an index is a colon followed by some digits\n var typeExp = 'page|panel|button|header'; // one of the allowed types\n var selectorExp = '(?:' + // a selector is either ...\n '(' + typeExp + ')(?:' + nameExp + '|' + indexExp + ')?' + // a type optionally followed by either #name or :index\n '|' + nameExp + // or just a #name\n ')';\n var queryRE = new RegExp('(?:^|,)' + // a comma or at the start of the line\n '\\\\s*' + selectorExp + // optional space and a selector\n '(?:\\\\s+' + selectorExp + ')?' + // optionally, followed by some space and a second selector\n '\\\\s*(?=,|$)', 'ig'); // followed by, but not including, a comma or the end of the string\n (query + '').replace(queryRE, function (all, name, title, id, justtitle, name2, title2, id2, justtitle2) {\n name = name && name.toLowerCase();\n var pages = [];\n if (name == 'page' && dialog.page[id]) {\n pages.push(dialog.page[id]);\n name = name2;\n name = name && name.toLowerCase();\n title = title2;\n id = id2;\n justtitle = justtitle2;\n } else {\n pages = dialog.page;\n }\n title = title && (title + '').replace(/\"/g, '');\n title2 = title2 && (title2 + '').replace(/\"/g, '');\n justtitle = justtitle && (justtitle + '').replace(/\"/g, '');\n justtitle2 = justtitle2 && (justtitle2 + '').replace(/\"/g, '');\n if (name || justtitle) {\n for (var i = pages.length; i--;) {\n if (justtitle || (name == 'panel' && (title || (!title && id == null)))) {\n for (var j = pages[i].panel.length; j--;) {\n if (pages[i].panel[j].button.html() == justtitle || pages[i].panel[j].button.html() == title || (name == 'panel' && !title && id == null)) {\n coll.push(pages[i].panel[j]);\n }\n }\n }\n if (justtitle || (name == 'button' && (title || (!title && id == null)))) {\n for (var j = pages[i].button.length; j--;) {\n if (pages[i].button[j].item.html() == justtitle || pages[i].button[j].item.html() == title || (name == 'button' && !title && id == null)) {\n coll.push(pages[i].button[j]);\n }\n }\n }\n if (pages[i][name] && pages[i][name][id]) {\n coll.push(pages[i][name][id]);\n }\n if (name == 'header' && pages[i].header) {\n coll.push(pages[i].header);\n }\n }\n } else {\n coll = coll.concat(pages);\n }\n });\n var res = {\n length: coll.length\n };\n for (var i = coll.length; i--;) {\n res[i] = coll[i];\n for (var method in coll[i]) {\n if (!(method in res)) {\n (function (m) {\n res[m] = function () {\n for (var j = this.length; j--;) {\n if (typeof this[j][m] === 'function') {\n this[j][m].apply(this[j], arguments);\n }\n }\n };\n }(method));\n }\n }\n }\n return res;\n };\n\n /**\n * Updates height of panels, to contain content without the need for scroll bars.\n *\n * @method updateHeight\n */\n Dialog.prototype.updateHeight = function () {\n var height = 0;\n var maxDialogHeight = $(window).height() - HEADER_HEIGHT - BUTTONS_HEIGHT - (MIN_DIALOG_VERTICAL_BUFFER * 2);\n for (var i = 0; this.getPanel(i); i++) {\n if (this.getPanel(i).body.css({height: 'auto', display: 'block'}).outerHeight() > height) {\n height = Math.min(maxDialogHeight, this.getPanel(i).body.outerHeight());\n }\n if (i !== this.page[this.curpage].curtab) {\n this.getPanel(i).body.css({display: 'none'});\n }\n }\n for (i = 0; this.getPanel(i); i++) {\n this.getPanel(i).body.css({height: height || this.height});\n }\n this.page[0].menu.height(height);\n this.height = height + HEADER_HEIGHT + BUTTONS_HEIGHT + 1;\n this.popup.changeSize(undefined, this.height);\n };\n\n /**\n * Returns whether the dialog has been resized to it's maximum height (has been capped by the viewport height and vertical buffer).\n *\n * @method isMaximised\n */\n Dialog.prototype.isMaximised = function () {\n return this.popup.element.outerHeight() >= $(window).height() - (MIN_DIALOG_VERTICAL_BUFFER * 2);\n };\n\n /**\n * Returns the current panel.\n * @deprecated Since 3.0.1 Use getCurrentPanel() instead.\n */\n Dialog.prototype.getCurPanel = function () {\n return this.getPanel(this.page[this.curpage].curtab);\n };\n\n /**\n * Returns the current button panel.\n * @deprecated Since 3.0.1 Use get() instead.\n */\n Dialog.prototype.getCurPanelButton = function () {\n return this.getCurPanel().button;\n };\n\n return Dialog;\n\n}());\n\nDialog = deprecate.construct(Dialog, 'Dialog constructor', {\n alternativeName: 'Dialog2'\n});\n\ncreatePopup = deprecate.construct(createPopup, 'Dialog popup constructor', {\n alternatveName: 'Dialog2'\n});\n\nglobalize('Dialog', Dialog);\nglobalize('popup', createPopup);\n\nexport {\n Dialog,\n createPopup as popup\n};\n","import $ from './jquery';\nimport globalize from './internal/globalize';\nimport './forms/custom-checkbox';\nimport './forms/custom-radio';\n\n/**\n * Enables the specified form element.\n *\n * @param {Element} el The element to enable.\n * @param {Boolean} b The flag setting enabled / disabled.\n *\n * @returns {jQuery}\n */\nfunction enable (el, b) {\n var $el = $(el);\n\n if (typeof b === 'undefined') {\n b = true;\n }\n\n return $el.each(function () {\n this.disabled = !b;\n });\n}\n\n\n/**\n * Forms: Inline Help - toggles visibility of inline help content.\n *\n * @method inlineHelp\n * @namespace AJS\n * @for AJS\n */\nfunction inlineHelp () {\n $(document).on('click', '.icon-inline-help', function () {\n var $t = $(this).siblings('.field-help');\n if ($t.hasClass('hidden')){\n $t.removeClass('hidden');\n } else {\n $t.addClass('hidden');\n }\n });\n}\n\nglobalize('enable', enable);\nglobalize('inlineHelp', inlineHelp);\n\nexport {\n enable,\n inlineHelp\n};\n","import skate from 'skatejs';\nimport jQuery from 'jquery';\n\n/**\n * Allows us to add a new DOM element for rendering ADG styled checkbox glyphs,\n * so we can get our desired aesthetic without having to rely on a specific markup pattern.\n */\nskate('checkbox', {\n type: skate.type.CLASSNAME,\n attached: function(el) {\n jQuery('input[type=checkbox]', el).each(function(i, checkbox) {\n jQuery('<span class=\"aui-form-glyph\"></span>').insertAfter(checkbox);\n });\n },\n detached: function(el) {\n jQuery('.aui-form-glyph', el).remove();\n }\n});\n","import skate from 'skatejs';\nimport jQuery from 'jquery';\n\n/**\n * Allows us to add a new DOM element for rendering ADG styled radio glyphs,\n * so we can get our desired aesthetic without having to rely on a specific markup pattern.\n */\nskate('radio', {\n type: skate.type.CLASSNAME,\n attached: function(el) {\n jQuery('input[type=radio]', el).each(function(i, radio) {\n jQuery('<span class=\"aui-form-glyph\"></span>').insertAfter(radio);\n });\n },\n detached: function(el) {\n jQuery('.aui-form-glyph', el).remove();\n }\n});\n"],"sourceRoot":""}
\No newline at end of file