{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./app/frontend/src/components/modal_form.js","webpack:///./app/frontend/src/trips/scripts/trip_form_modal_view.js","webpack:///(webpack)/buildin/global.js","webpack:///./app/frontend/src/trip_entries/scripts/trip_entry_modal_view.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/rails-ujs/lib/assets/compiled/rails-ujs.js","webpack:///./app/frontend/src/site/scripts/site.js","webpack:///./app/frontend/src/trips/scripts/trip_form_view.js","webpack:///./app/frontend/src/trips/scripts/trip_view.js","webpack:///./app/frontend/src/trips/scripts/trip_modal_view.js","webpack:///./app/frontend/src/trip_attachments/scripts/trip_attachment_form_view.js","webpack:///./app/frontend/src/trip_entries/scripts/trip_entry_form_view.js","webpack:///./app/frontend/src/trips/scripts/trip_quick_open_view.js","webpack:///./app/frontend/src/users/scripts/user_form_view.js","webpack:///./app/frontend/packs/application.js","webpack:///./node_modules/code-prettify/src/prettify.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js","webpack:///./node_modules/blueimp-file-upload/js/jquery.fileupload.js","webpack:///./node_modules/blueimp-file-upload/js/vendor/jquery.ui.widget.js","webpack:///./node_modules/bootstrap-select/dist/js/bootstrap-select.js","webpack:///./node_modules/corejs-typeahead/dist/typeahead.jquery.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/process/browser.js","webpack:///./app/frontend/src/jquery/remote_typeahead.js","webpack:///./app/frontend/src/site/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","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","_typeof","iterator","obj","constructor","global","factory","document","w","Error","window","this","noGlobal","arr","getProto","getPrototypeOf","_slice","slice","flat","array","concat","apply","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","nodeType","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","jQuery","selector","context","fn","init","isArrayLike","length","jquery","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","guid","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","_dir","until","truncate","is","_siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","_","flag","createOptions","firing","memory","_fired","_locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","disable","lock","locked","fireWith","fired","Deferred","func","tuples","_state","_promise","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","_data","removeData","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","_on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","_handlers","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","on","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","_remove","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","cssPrefixes","emptyStyle","vendorProps","finalPropName","_final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","_statusCode","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","_callback","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","_callback2","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","_jQuery","_$","$","noConflict","ModalForm","title","submitButtonText","modalDidLoad","formSubmitDidClick","formDidReceiveKeydown","formDidSubmit","formDidSubmitSuccessfully","formDidNotSubmitSuccessfully","additionalHandlers","$modal","bindEvents","modal","dispatchEvent","enableSubmit","log","setTitle","setSubmitButtonText","loadRemoteContent","unbindEvents","modalShouldShow","modalDidHide","forEach","TripFormModalView","parentView","disableSubmit","setContent","form_html","g","Function","TripEntryModalView","expenseTypeChanged","focusOnElement","getExpenseType","category","getExpenseCategory","cost","getCost","alert","$shouldReimburse","$categorySelect","cashAdvanceId","Number","webpackPolyfill","deprecate","paths","isBrowser","navigator","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","called","scheduled","functionToCheck","getStyleComputedProperty","element","getParentNode","getScrollParent","_getStyleComputedProp","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","modifier","bottom","getBordersSize","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","classCallCheck","instance","Constructor","createClass","defineProperties","descriptor","protoProps","staticProps","_extends","assign","getClientRect","offsets","sizes","clientWidth","clientHeight","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","isFixed","getFixedPositionOffsetParent","parentElement","getBoundaries","popper","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","area","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","modifiers","ends","findIndex","enabled","update","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","willChange","disableEventListeners","removeOnDestroy","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","Popper","_this","Utils","PopperUtils","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","loadCSPNonce","ref","cspNonce","Element","setData","csrfParam","csrfToken","meta","CSRFProtection","refreshCSRFTokens","CustomEvent","createEvent","initCustomEvent","stopEverything","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","OPENED","accept","withCredentials","DONE","parser","isCrossDomain","serializeElement","additionalParam","inputs","formElements","form","allowAction","handleConfirm","answer","confirm","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","handleDisabledElement","enableElement","disableElement","replacement","originalText","handleMethod","formContent","action","isRemote","handleRemote","enctype","FormData","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","rails","_rails_loaded","Site","initPopovers","initTabHistorification","initDatePicker","initMultiSelect","initRemoteTypeahead","popover","substr","tab","datepicker","format","viewMode","autoclose","todayBtn","todayHighlight","selectpicker","remoteTypeahead","TripFormView","displayErrorsForLookupFields","observeLookupFields","observeCompanyCreateClick","observeDriverCreateClick","field","$idField","$lookupField","$lookupGroup","predicate","idSelector","displayKey","full_name","additionalParameters","company_id_eq","modalView","TripView","observeChangeStatusClicked","observeButtonPress","submitUrl","TripModalView","dataSubmitUrl","TripAttachmentFormView","initFileUpload","$uploader","fileUploadSelector","fileupload","paramName","dropZone","onFileAdd","onFileProgress","onFail","onStop","$row","actions","files","onSignedUrlSuccess","onSignedUrlFailure","trip_attachment","file_name","formData","onSuccess","row","pct","loaded","total","responseXML","onCreateSuccess","onCreateError","file_uid","observeDelete","$this","_method","TripEntryFormView","observeCreateClick","observeHoverEdit","$tr","editable","updateCompositeFields","composite_html","appendToTable","row_html","replaceTableRow","row_id","TripQuickOpenView","setRemoteTypeahead","onRemoteTypeaheadSuccess","entity","pathname","UserFormView","observeDriverLookup","driver","to_select_option","FLOW_CONTROL_KEYWORDS","COMMON_KEYWORDS","CPP_KEYWORDS","JAVA_KEYWORDS","CSHARP_KEYWORDS","JSCRIPT_KEYWORDS","PERL_KEYWORDS","PYTHON_KEYWORDS","RUBY_KEYWORDS","SH_KEYWORDS","C_TYPES","appendDecorations","sourceNode","basePos","sourceCode","langHandler","out","job","pre","langExtension","numberLines","spans","decorations","notWs","childContentWrapper","wrapper","createSimpleLexer","shortcutStylePatterns","fallthroughStylePatterns","tokenizer","shortcuts","allPatterns","allRegexs","regexKeys","patternParts","shortcutChars","regex","k","regexs","capturedGroupIndex","needToFoldCase","ignoreCase","escapeCharToCodeUnit","decodeEscape","charsetPart","cc0","c1","substring","encodeEscape","caseFoldCharset","charSet","charsetParts","ranges","inverse","consolidatedRanges","lastRange","allowAnywhereFoldCaseAndRenumberGroups","capturedGroups","groupIndex","decimalValue","ch0","cc","rewritten","multiline","combinePrefixPatterns","nPatterns","decorate","styleCache","ti","nTokens","isEmbedded","tokenStart","embeddedSource","embeddedSourceStart","embeddedSourceEnd","langHandlerForExtension","sourceDecorator","hc","regexLiterals","regexExcls","regexAny","REGEX_LITERAL","keywords","punctuation","decorateSource","startLineNum","isPreformatted","nocode","lineBreak","li","listItems","walk","firstLine","tail","breakAfter","child","lineEndNode","copiedListItem","breakLeftOf","limit","rightSide","parentClone","ol","langHandlerRegistry","registerLangHandler","fileExtensions","ext","extension","applyDecorator","chunks","opt_langExtension","sourceAndSpans","isIE8OrEarlier","decPos","newlineRe","sourceLength","nSpans","spanIndex","nDecorations","decorationIndex","startPos","startDec","oldDisplay","styledText","spanEnd","decEnd","textNode","span","recombineTagsAndDecorations","$prettyPrintOne","sourceCodeHtml","opt_numberLines","nl","$prettyPrint","opt_whenDone","opt_root","byTagName","tn","codeSegments","clock","langExtensionRe","prettyPrintRe","prettyPrintedRe","preformattedTagNameRe","codeRe","preCodeXmpRe","EMPTY","doWork","endTime","Infinity","cs","preceder","previousSibling","nt","nested","tagName","preformatted","currentStyle","lineNums","PR","define","_interopDefaultLegacy","$__default","Popper__default","_defineProperties","_createClass","transitionEndEmulator","Util","TRANSITION_END","triggerTransitionEnd","getUID","getSelectorFromElement","hrefAttr","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","jQueryDetection","emulateTransitionEnd","NAME","JQUERY_NO_CONFLICT","Alert","_element","_proto","close","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","$element","_handleDismiss","alertInstance","JQUERY_NO_CONFLICT$1","Button","shouldAvoidTriggerChange","triggerChangeEvent","addAriaPressed","classList","hasAttribute","avoidTriggerChange","initialButton","inputBtn","_len","_button","NAME$2","EVENT_KEY$2","JQUERY_NO_CONFLICT$2","Default","keyboard","slide","pause","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","clearInterval","setInterval","visibilityState","activeIndex","_getItemIndex","direction","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","move","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","defaultInterval","CLASS_NAME_ACTIVE$1","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$3","JQUERY_NO_CONFLICT$3","Default$1","DefaultType$1","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","startEvent","_getDimension","setTransitioning","scrollSize","CLASS_NAME_COLLAPSE","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","$trigger","$target","NAME$4","JQUERY_NO_CONFLICT$4","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","Default$2","boundary","popperConfig","DefaultType$2","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","_getPlacement","$parentDropdown","_getOffset","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","EVENT_CLICK_DATA_API$4","JQUERY_NO_CONFLICT$5","Default$3","backdrop","DefaultType$3","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","br","em","hr","h1","h2","h3","h4","h5","h6","img","small","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","regExp","attrRegex","allowedAttribute","NAME$6","JQUERY_NO_CONFLICT$6","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType$4","template","fallbackPlacement","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$4","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","CLASS_NAME_FADE$2","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","initConfigAnimation","NAME$7","JQUERY_NO_CONFLICT$7","BSCLS_PREFIX_REGEX$1","Default$5","DefaultType$5","Event$1","Popover","_Tooltip","subClass","superClass","__proto__","_getContent","CLASS_PREFIX$1","CLASS_NAME_FADE$3","NAME$8","JQUERY_NO_CONFLICT$8","Default$6","DefaultType$6","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","SELECTOR_NAV_LINKS","scrollSpys","$spy","JQUERY_NO_CONFLICT$9","Tab","previous","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","JQUERY_NO_CONFLICT$a","DefaultType$7","autohide","Default$7","Toast","_clearTimeout","_close","Scrollspy","UTCDate","UTC","UTCToday","today","getFullYear","getMonth","getDate","isUTCEquals","date1","date2","getUTCFullYear","getUTCMonth","getUTCDate","alias","deprecationMsg","deprecated","extras","DateArray","valueOf","new_array","clear","Datepicker","_events","_secondaryEvents","_process_options","dates","viewDate","defaultViewDate","focusDate","isInput","inputField","component","isInline","picker","DPGlobal","_check_template","templates","leftArrow","rightArrow","_buildEvents","_attachEvents","rtl","calendarWeeks","startDate","_o","endDate","daysOfWeekDisabled","daysOfWeekHighlighted","datesDisabled","_allow_update","setViewMode","startView","fillDow","fillMonths","_resolveViewName","viewModes","names","_resolveDaysOfWeek","daysOfWeek","language","defaults","minViewMode","maxViewMode","multidate","multidateSeparator","weekStart","weekEnd","parseFormat","_local_to_utc","_zero_time","parseDate","assumeNearbyYear","plc","orientation","_plc","word","year","month","day","_applyEvents","evs","ev","_unapplyEvents","keyup","keydown","paste","showOnFocus","_focused_from","immediateUpdates","date","navArrowsClick","dayCellClick","resize","place","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","altdate","local_date","_utc_to_local","ix","formatDate","enableOnReadonly","msMaxTouchPoints","disableTouchKeyboard","forceParse","setValue","dateString","clipboardData","setDate","utc","local","getTime","getTimezoneOffset","_zero_utc_time","getDates","getUTCDates","selected_date","clearDates","setDates","setUTCDates","setUTCDate","formatted","getFormattedDate","getStartDate","setStartDate","updateNavArrows","getEndDate","setEndDate","setDaysOfWeekDisabled","setDaysOfWeekHighlighted","setDatesDisabled","calendarWidth","outerWidth","calendarHeight","outerHeight","windowWidth","appendOffset","parentsZindex","itemZIndex","zIndex","zIndexOffset","yorient","oldDates","fromArgs","dateWithinRange","updateViewDate","change","fill","showWeekDays","dowCnt","daysMin","localDate","monthsShort","setRange","getClassNames","cls","dateIsDisabled","getUTCDay","_fill_yearsView","cssClass","factor","startYear","endYear","beforeFn","tooltip","startVal","endVal","focusedVal","currVal","startMonth","endMonth","todaytxt","cleartxt","titleFormat","todayDate","titleBtnVisible","weekOfDateIsDisabled","clearBtn","prevMonth","nextMonth","setUTCFullYear","weekDay","clsName","ws","yth","calWeek","beforeShowDay","monthsTitle","months","beforeShowMonth","moDate","beforeShowYear","beforeShowDecade","beforeShowCentury","prevIsDisabled","nextIsDisabled","_setDate","setUTCMonth","timestamp","navStep","moveMonth","_toggle_multidate","toggleActive","moveDay","newDate","moveWeek","new_month","new_date","mag","moveYear","moveAvailableDate","newViewDate","dateChanged","keyboardNavigation","DateRangePicker","keepEmptyValues","datepickerPlugin","dateUpdated","pickers","updateDates","opts_from_el","re_lower","opts_from_locale","locale_opts","updateRanges","updating","dp","keep_empty_values","internal_return","elopts","locopts","en","days","daysShort","validParts","nonpunctuation","toDisplay","separators","assumeNearby","part","fn_map","dateAliases","yesterday","tomorrow","filtered","setters_order","setters_map","yyyy","threshold","_d","fparts","match_part","cnt","_date","D","DD","M","MM","yy","dd","mm","seps","headTemplate","contTemplate","footTemplate","getDragHandler","isDragOver","dataTransfer","delegatedEvent","dropEffect","fileInput","xhrFileUpload","ProgressEvent","FileReader","xhrFormDataFileUpload","blobSlice","Blob","webkitSlice","mozSlice","widget","pasteZone","replaceFileInput","singleFileUploads","limitMultiFileUploads","limitMultiFileUploadSize","limitMultiFileUploadSizeOverhead","sequentialUploads","limitConcurrentUploads","forceIframeTransport","redirect","redirectParamName","postMessage","multipart","maxChunkSize","uploadedBytes","recalculateProgress","progressInterval","bitrateInterval","autoUpload","uniqueFilenames","messages","i18n","_specialOptions","_blobSlice","_BitrateTimer","bitrate","getBitrate","timeDiff","_isXHRUpload","_getFormData","_getTotal","size","_initProgressObject","_progress","_initResponseObject","_response","_onProgress","lengthComputable","_time","chunkSize","_bitrateTimer","_initProgressListener","upload","oe","_deinitProgressListener","_isInstanceOf","_getUniqueFilename","p1","p2","_initXHRData","contentRange","blob","encodeURI","uploadName","fileName","_initIframeSettings","targetHost","_initDataSettings","_chunkedUpload","_getParamName","_initFormSettings","formAcceptCharset","_getAJAXSettings","_getDeferredState","isResolved","isRejected","_enhancePromise","_getXHRPromise","resolveOrReject","dfd","_addConvenienceMethods","getPromise","resolveFunc","rejectFunc","_processQueue","errorThrown","_onSend","processing","_getUploadedBytes","upperBytesPos","testOnly","_upload","fs","ub","mcs","currentLoaded","textStatus","_beforeSend","_active","_onDone","_onFail","_onAlways","jqXHRorResult","jqXHRorError","aborted","slot","_sending","nextSlot","_slots","_sequence","_onAdd","paramNameSet","paramNameSlice","fileSet","filesLength","limitSize","overhead","batchSize","originalFiles","newData","_replaceFileInput","inputClone","restoreFocus","fileInputClone","_handleFileTreeEntry","entry","path","dirReader","entries","errorHandler","isFile","_file","relativePath","isDirectory","createReader","readEntries","_handleFileTreeEntries","successHandler","_getDroppedFiles","webkitGetAsEntry","getAsEntry","getAsFile","_getSingleFileInputFiles","fileSize","_getFileInputFiles","_onChange","_onPaste","_onDrop","_onDragOver","_onDragEnter","_onDragLeave","_initEventHandlers","dragover","drop","dragenter","dragleave","_destroyEventHandlers","_off","_destroy","_setOption","reinit","_super","_initSpecialOptions","_getRegExp","_isRegExpOption","_initDataAttributes","_create","ui","widgetUuid","widgetSlice","existingConstructor","basePrototype","proxiedPrototype","fullName","Widget","_createWidget","_childConstructors","_superApply","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","childPrototype","bridge","inputIndex","inputLength","isMethodCall","methodValue","_init","defaultElement","uuid","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_getCreateOptions","_setOptionDisabled","_getCreateEventData","_removeClass","curOption","_setOptions","_setOptionClasses","classKey","currentElements","_classes","_toggleClass","full","processClassString","checkOption","_untrackClassesElement","_addClass","suppressDisabledCheck","delegateElement","handlerProxy","eventName","_delay","_hoverable","_focusable","focusout","defaultEffect","hasOptions","effect","effectName","effects","a0","unsafeElements","len2","len3","elemCtrProto","objCtr","classListGetter","$elem","force","classListPropDesc","number","__defineGetter__","startsWith","testElement","_add","DOMTokenList","_toggle","getSelectedOptions","ignoreDisabled","selectedOptions","getSelectValues","multiple","$defineProperty","stringLength","searchString","searchLength","HTMLSelectElement","useDefault","_set","changedArguments","EventIsSupported","stringSearch","normalize","stringTypes","searchSuccess","stringType","normalizeToBase","toInteger","triggerNative","initEvent","fireEvent","createEventObject","deburredLetters","reLatin","reComboMark","deburrLetter","escaper","testRegexp","replaceRegexp","htmlEscape","keyCodeMap","32","48","49","50","51","52","53","54","55","56","57","59","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","keyCodes","major","dropdown","VERSION","selectId","DISABLED","DIVIDER","DROPUP","MENU","MENURIGHT","MENULEFT","BUTTONCLASS","POPOVERHEADER","ICONBASE","TICKICON","Selector","elementTemplates","subtext","noResults","checkMark","REGEXP_ARROW","REGEXP_TAB_OR_ESCAPE","generateOption","inline","insertAdjacentHTML","useFragment","subtextElement","iconElement","textElement","icon","iconBase","label","showNoResults","searchMatch","searchValue","noneResultsText","$menuInner","Selectpicker","$newElement","$button","$menu","main","isSearching","keyHistory","resetKeyHistory","sizeInfo","winPad","windowPadding","render","setStyle","selectAll","deselectAll","Plugin","_option","BootstrapVersion","toUpdate","DEFAULTS","tickIcon","chain","noneSelectedText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","selectedTextFormat","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","showTick","caret","maxOptions","mobile","selectOnTab","dropdownAlignRight","virtualScroll","autofocus","createDropdown","buildData","$searchbox","checkDisabled","clickListener","liveSearchListener","focusedParent","setWidth","selectPosition","isVirtual","menuInner","emptyMenu","validity","valid","buildList","multiselectable","inputGroup","searchbox","actionsbox","donebutton","setPositionData","canHighlight","firstHighlightIndex","dividerHeight","dropdownHeaderHeight","liHeight","posinset","createView","setSize","prevActive","liIndex","selectedData","menuInnerHeight","scroll","chunkCount","firstChunk","lastChunk","currentChunk","prevPositions","positionIsDifferent","previousElements","array1","array2","menuIsDifferent","endOfChunk","position0","position1","prevActiveIndex","defocusItem","visibleElements","setOptionStatus","every","menuFragment","toSanitize","visibleElementsLen","elText","elementData","sanitized","hasScrollBar","menuInnerInnerWidth","totalMenuWidth","selectWidth","actualMenuWidth","newActive","currentActive","focusItem","updateValue","noScroll","liData","noStyle","setPlaceholder","updateIndex","titleOption","selectTitleOption","titleNotAppended","selectedOption","navigation","performance","getEntriesByType","isNotBackForward","defaultSelected","displayedValue","optionSelector","mainData","optID","startIndex","selectOptions","addDivider","previousData","addOption","inlineStyle","optionClass","optgroupClass","addOptgroup","headerIndex","lastIndex","selectData","mainElements","widestOptionLength","buildElement","liElement","combinedLength","widestOption","findLis","showCount","countMax","placeholderSelected","selectedCount","buttonInner","titleFragment","thisData","titleOptions","totalCount","tr8nText","filterExpand","newStyle","buttonClass","newElement","previousElementSibling","menu","menuInnerInner","dropdownHeader","firstOption","scrollBarWidth","headerHeight","searchHeight","actionsHeight","doneButtonHeight","menuStyle","menuWidth","menuPadding","vert","paddingTop","paddingBottom","borderBottomWidth","horiz","borderRightWidth","menuExtras","selectHeight","getSelectPosition","containerPos","$window","$container","selectOffsetTop","selectOffsetBot","selectOffsetLeft","selectOffsetRight","setMenuSize","isAuto","menuHeight","minHeight","_minHeight","maxHeight","menuInnerMinHeight","estimate","isDropup","divHeight","divLength","dropup","$selectClone","btnWidth","$bsContainer","actualHeight","getPlacement","containerPosition","selectedOnly","setDisabled","setSelected","activeIndexIsSet","keepActive","$document","setFocus","checkPopperExists","hoverLi","hoverData","retainActive","clickedData","clickedIndex","prevValue","prevIndex","prevOption","triggerChange","$option","$optgroup","$optgroupOptions","maxOptionsGrp","maxReached","maxReachedGrp","maxOptionsArr","maxTxt","maxTxtGrp","$notify","isTrusted","previousValue","q","cacheArr","searchStyle","_searchStyle","normalizeSearch","cacheLen","liPrev","liSelectedIndex","changeAll","previousSelected","currentSelected","liActive","activeLi","isToggle","$items","updateScroll","downOnTab","isArrowKey","lastIndexOf","liActiveIndex","cancel","matchIndex","keydownHandler","bootstrapKeydown","$selectpicker","isMsie","isBlankString","escapeRegExChars","isString","isNumber","isObject","isUndefined","isJQuery","toStr","cb","mixin","identity","getIdGenerator","templatify","immediate","later","callNow","throttle","stringify","_p8","WWW","defaultClassNames","hint","dataset","suggestion","selectable","cursor","highlight","www","borderColor","boxShadow","verticalAlign","backgroundColor","inputWithNoHint","ltr","backgroundImage","buildSelectors","EventBus","deprecationMap","$el","cursorchange","autocomplete","$e","deprecatedType","EventEmitter","splitter","nextTick","setImmediate","onSync","onAsync","_callbacks","callbacks","syncFlush","asyncFlush","getFlush","sync","bindContext","cancelled","wordsOnly","caseSensitive","diacriticInsensitive","accented","A","B","C","E","F","G","H","I","J","K","L","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","patterns","regexStr","escapedPatterns","escapedWord","accent_replacer","getRegex","traverse","hightlightTextNode","childNode","patternNode","wrapperNode","splitText","chr","Input","specialKeyCodeMap","$input","$hint","role","query","queryWhenFocused","$overflowHelper","whiteSpace","fontFamily","fontSize","fontStyle","fontVariant","wordSpacing","textIndent","textRendering","textTransform","_checkLanguageDirection","setHint","getHint","clearHint","clearHintIfInvalid","_updateDescendent","9","27","37","39","13","38","40","normalizeQuery","_onBlur","resetInputValue","_onFocus","_onKeydown","keyName","_managePreventDefault","_shouldTrigger","_onInput","_setQuery","getInputValue","withModifier","silent","areEquivalent","hasDifferentWhitespace","onBlur","onFocus","onKeydown","onInput","getLangDir","getQuery","setQuery","setInputValue","hasQueryChangedSinceLastFocus","valIsPrefixOfHint","hasOverflow","constraint","isCursorAtEnd","valueLength","selectionStart","moveStart","setAriaExpanded","Dataset","nameGenerator","displayFn","notFound","pending","footer","__ttAdapter","_resetLastSuggestion","extractData","_overwrite","suggestions","_renderSuggestions","_renderPending","_renderNotFound","_empty","_append","$lastSuggestion","_appendSuggestions","$fragment","_getSuggestionsFragment","_getHeader","_getFooter","_injectQuery","_query","canceled","syncCalled","rendered","isEmpty","Menu","$node","datasets","oDataset","_onSelectableClick","_onRendered","_allDatasetsEmpty","_onCleared","_propagate","_getSelectables","_removeCursor","$selectable","getActiveSelectable","_ensureVisible","elTop","elBottom","nodeScrollTop","nodeHeight","onSelectableClick","setCursor","setLanguageDirection","selectableRelativeToCursor","$selectables","$oldCursor","newIndex","getSelectableData","getTopSelectable","isValidUpdate","Status","clip","cleared","words","DefaultMenu","_show","_hide","Typeahead","onFocused","onBlurred","onEnterKeyed","onTabKeyed","onEscKeyed","onUpKeyed","onDownKeyed","onLeftKeyed","onRightKeyed","onQueryChanged","onWhitespaceChanged","eventBus","minLength","autoselect","activate","_hacks","_onSelectableClicked","_onAsyncRequested","_onAsyncCanceled","_onAsyncReceived","_onDatasetRendered","_onDatasetCleared","_onLangDirChanged","hasActive","_updateHint","cursorClass","_onFocused","_minLengthMet","_onBlurred","_onEnterKeyed","_onTabKeyed","_onEscKeyed","_onUpKeyed","moveCursor","_onDownKeyed","_onLeftKeyed","_onRightKeyed","_onQueryChanged","_onWhitespaceChanged","_openIfActive","escapedQuery","isEnabled","deactivate","setVal","getVal","$candidate","datasetName","ctx","methods","ttEach","$els","typeahead","buildHintFromInput","backgroundAttachment","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","readonly","required","spellcheck","prepInput","$elOrNull","initialize","attach","$wrapper","defaultHint","defaultMenu","MenuConstructor","newVal","revert","Timeout","clearFn","_id","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","task","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","browser","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","$typeahead","$idInput","createTypeahead","onTypeaheadRequest","onTypeaheadSelect","onTypeaheadOpen","onAsyncResult","_idSelector","_url","_predicate","_displayKey","site"],"mappings":"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OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KAER,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,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","file":"js/application-d915a4e65e077ca5e21e.js","sourcesContent":[" \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 = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 16);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n(function (global, factory) {\n  \"use strict\";\n\n  if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n    // For CommonJS and CommonJS-like environments where a proper `window`\n    // is present, execute the factory and get jQuery.\n    // For environments that do not have a `window` with a `document`\n    // (such as Node.js), expose a factory as module.exports.\n    // This accentuates the need for the creation of a real `window`.\n    // e.g. var jQuery = require(\"jquery\")(window);\n    // See ticket #14549 for more info.\n    module.exports = global.document ? factory(global, true) : function (w) {\n      if (!w.document) {\n        throw new Error(\"jQuery requires a window with a document\");\n      }\n\n      return factory(w);\n    };\n  } else {\n    factory(global);\n  } // Pass this if window is not defined yet\n\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n  // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n  // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n  // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n  // enough that all such attempts are guarded in a try block.\n  \"use strict\";\n\n  var arr = [];\n  var getProto = Object.getPrototypeOf;\n  var _slice = arr.slice;\n  var flat = arr.flat ? function (array) {\n    return arr.flat.call(array);\n  } : function (array) {\n    return arr.concat.apply([], array);\n  };\n  var push = arr.push;\n  var indexOf = arr.indexOf;\n  var class2type = {};\n  var toString = class2type.toString;\n  var hasOwn = class2type.hasOwnProperty;\n  var fnToString = hasOwn.toString;\n  var ObjectFunctionString = fnToString.call(Object);\n  var support = {};\n\n  var isFunction = function isFunction(obj) {\n    // Support: Chrome <=57, Firefox <=52\n    // In some browsers, typeof returns \"function\" for HTML <object> elements\n    // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n    // We don't want to classify *any* DOM node as a function.\n    return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n  var isWindow = function isWindow(obj) {\n    return obj != null && obj === obj.window;\n  };\n\n  var document = window.document;\n  var preservedScriptAttributes = {\n    type: true,\n    src: true,\n    nonce: true,\n    noModule: true\n  };\n\n  function DOMEval(code, node, doc) {\n    doc = doc || document;\n    var i,\n        val,\n        script = doc.createElement(\"script\");\n    script.text = code;\n\n    if (node) {\n      for (i in preservedScriptAttributes) {\n        // Support: Firefox 64+, Edge 18+\n        // Some browsers don't support the \"nonce\" property on scripts.\n        // On the other hand, just using `getAttribute` is not enough as\n        // the `nonce` attribute is reset to an empty string whenever it\n        // becomes browsing-context connected.\n        // See https://github.com/whatwg/html/issues/2369\n        // See https://html.spec.whatwg.org/#nonce-attributes\n        // The `node.getAttribute` check was added for the sake of\n        // `jQuery.globalEval` so that it can fake a nonce-containing node\n        // via an object.\n        val = node[i] || node.getAttribute && node.getAttribute(i);\n\n        if (val) {\n          script.setAttribute(i, val);\n        }\n      }\n    }\n\n    doc.head.appendChild(script).parentNode.removeChild(script);\n  }\n\n  function toType(obj) {\n    if (obj == null) {\n      return obj + \"\";\n    } // Support: Android <=2.3 only (functionish RegExp)\n\n\n    return _typeof(obj) === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : _typeof(obj);\n  }\n  /* global Symbol */\n  // Defining this global in .eslintrc.json would create a danger of using the global\n  // unguarded in another place, it seems safer to define global only for this module\n\n\n  var version = \"3.5.1\",\n      // Define a local copy of jQuery\n  jQuery = function jQuery(selector, context) {\n    // The jQuery object is actually just the init constructor 'enhanced'\n    // Need init if jQuery is called (just allow error to be thrown if not included)\n    return new jQuery.fn.init(selector, context);\n  };\n\n  jQuery.fn = jQuery.prototype = {\n    // The current version of jQuery being used\n    jquery: version,\n    constructor: jQuery,\n    // The default length of a jQuery object is 0\n    length: 0,\n    toArray: function toArray() {\n      return _slice.call(this);\n    },\n    // Get the Nth element in the matched element set OR\n    // Get the whole matched element set as a clean array\n    get: function get(num) {\n      // Return all the elements in a clean array\n      if (num == null) {\n        return _slice.call(this);\n      } // Return just the one element from the set\n\n\n      return num < 0 ? this[num + this.length] : this[num];\n    },\n    // Take an array of elements and push it onto the stack\n    // (returning the new matched element set)\n    pushStack: function pushStack(elems) {\n      // Build a new jQuery matched element set\n      var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n      ret.prevObject = this; // Return the newly-formed element set\n\n      return ret;\n    },\n    // Execute a callback for every element in the matched set.\n    each: function each(callback) {\n      return jQuery.each(this, callback);\n    },\n    map: function map(callback) {\n      return this.pushStack(jQuery.map(this, function (elem, i) {\n        return callback.call(elem, i, elem);\n      }));\n    },\n    slice: function slice() {\n      return this.pushStack(_slice.apply(this, arguments));\n    },\n    first: function first() {\n      return this.eq(0);\n    },\n    last: function last() {\n      return this.eq(-1);\n    },\n    even: function even() {\n      return this.pushStack(jQuery.grep(this, function (_elem, i) {\n        return (i + 1) % 2;\n      }));\n    },\n    odd: function odd() {\n      return this.pushStack(jQuery.grep(this, function (_elem, i) {\n        return i % 2;\n      }));\n    },\n    eq: function eq(i) {\n      var len = this.length,\n          j = +i + (i < 0 ? len : 0);\n      return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n    },\n    end: function end() {\n      return this.prevObject || this.constructor();\n    },\n    // For internal use only.\n    // Behaves like an Array's method, not like a jQuery method.\n    push: push,\n    sort: arr.sort,\n    splice: arr.splice\n  };\n\n  jQuery.extend = jQuery.fn.extend = function () {\n    var options,\n        name,\n        src,\n        copy,\n        copyIsArray,\n        clone,\n        target = arguments[0] || {},\n        i = 1,\n        length = arguments.length,\n        deep = false; // Handle a deep copy situation\n\n    if (typeof target === \"boolean\") {\n      deep = target; // Skip the boolean and the target\n\n      target = arguments[i] || {};\n      i++;\n    } // Handle case when target is a string or something (possible in deep copy)\n\n\n    if (_typeof(target) !== \"object\" && !isFunction(target)) {\n      target = {};\n    } // Extend jQuery itself if only one argument is passed\n\n\n    if (i === length) {\n      target = this;\n      i--;\n    }\n\n    for (; i < length; i++) {\n      // Only deal with non-null/undefined values\n      if ((options = arguments[i]) != null) {\n        // Extend the base object\n        for (name in options) {\n          copy = options[name]; // Prevent Object.prototype pollution\n          // Prevent never-ending loop\n\n          if (name === \"__proto__\" || target === copy) {\n            continue;\n          } // Recurse if we're merging plain objects or arrays\n\n\n          if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n            src = target[name]; // Ensure proper type for the source value\n\n            if (copyIsArray && !Array.isArray(src)) {\n              clone = [];\n            } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n              clone = {};\n            } else {\n              clone = src;\n            }\n\n            copyIsArray = false; // Never move original objects, clone them\n\n            target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n          } else if (copy !== undefined) {\n            target[name] = copy;\n          }\n        }\n      }\n    } // Return the modified object\n\n\n    return target;\n  };\n\n  jQuery.extend({\n    // Unique for each copy of jQuery on the page\n    expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n    // Assume jQuery is ready without the ready module\n    isReady: true,\n    error: function error(msg) {\n      throw new Error(msg);\n    },\n    noop: function noop() {},\n    isPlainObject: function isPlainObject(obj) {\n      var proto, Ctor; // Detect obvious negatives\n      // Use toString instead of jQuery.type to catch host objects\n\n      if (!obj || toString.call(obj) !== \"[object Object]\") {\n        return false;\n      }\n\n      proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n      if (!proto) {\n        return true;\n      } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n      Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n      return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n    },\n    isEmptyObject: function isEmptyObject(obj) {\n      var name;\n\n      for (name in obj) {\n        return false;\n      }\n\n      return true;\n    },\n    // Evaluates a script in a provided context; falls back to the global one\n    // if not specified.\n    globalEval: function globalEval(code, options, doc) {\n      DOMEval(code, {\n        nonce: options && options.nonce\n      }, doc);\n    },\n    each: function each(obj, callback) {\n      var length,\n          i = 0;\n\n      if (isArrayLike(obj)) {\n        length = obj.length;\n\n        for (; i < length; i++) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      } else {\n        for (i in obj) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      }\n\n      return obj;\n    },\n    // results is for internal usage only\n    makeArray: function makeArray(arr, results) {\n      var ret = results || [];\n\n      if (arr != null) {\n        if (isArrayLike(Object(arr))) {\n          jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n        } else {\n          push.call(ret, arr);\n        }\n      }\n\n      return ret;\n    },\n    inArray: function inArray(elem, arr, i) {\n      return arr == null ? -1 : indexOf.call(arr, elem, i);\n    },\n    // Support: Android <=4.0 only, PhantomJS 1 only\n    // push.apply(_, arraylike) throws on ancient WebKit\n    merge: function merge(first, second) {\n      var len = +second.length,\n          j = 0,\n          i = first.length;\n\n      for (; j < len; j++) {\n        first[i++] = second[j];\n      }\n\n      first.length = i;\n      return first;\n    },\n    grep: function grep(elems, callback, invert) {\n      var callbackInverse,\n          matches = [],\n          i = 0,\n          length = elems.length,\n          callbackExpect = !invert; // Go through the array, only saving the items\n      // that pass the validator function\n\n      for (; i < length; i++) {\n        callbackInverse = !callback(elems[i], i);\n\n        if (callbackInverse !== callbackExpect) {\n          matches.push(elems[i]);\n        }\n      }\n\n      return matches;\n    },\n    // arg is for internal usage only\n    map: function map(elems, callback, arg) {\n      var length,\n          value,\n          i = 0,\n          ret = []; // Go through the array, translating each of the items to their new values\n\n      if (isArrayLike(elems)) {\n        length = elems.length;\n\n        for (; i < length; i++) {\n          value = callback(elems[i], i, arg);\n\n          if (value != null) {\n            ret.push(value);\n          }\n        } // Go through every key on the object,\n\n      } else {\n        for (i in elems) {\n          value = callback(elems[i], i, arg);\n\n          if (value != null) {\n            ret.push(value);\n          }\n        }\n      } // Flatten any nested arrays\n\n\n      return flat(ret);\n    },\n    // A global GUID counter for objects\n    guid: 1,\n    // jQuery.support is not used in Core but other projects attach their\n    // properties to it so it needs to exist.\n    support: support\n  });\n\n  if (typeof Symbol === \"function\") {\n    jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n  } // Populate the class2type map\n\n\n  jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (_i, name) {\n    class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n  });\n\n  function isArrayLike(obj) {\n    // Support: real iOS 8.2 only (not reproducible in simulator)\n    // `in` check used to prevent JIT error (gh-2145)\n    // hasOwn isn't used here due to false negatives\n    // regarding Nodelist length in IE\n    var length = !!obj && \"length\" in obj && obj.length,\n        type = toType(obj);\n\n    if (isFunction(obj) || isWindow(obj)) {\n      return false;\n    }\n\n    return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n  }\n\n  var Sizzle =\n  /*!\n   * Sizzle CSS Selector Engine v2.3.5\n   * https://sizzlejs.com/\n   *\n   * Copyright JS Foundation and other contributors\n   * Released under the MIT license\n   * https://js.foundation/\n   *\n   * Date: 2020-03-14\n   */\n  function (window) {\n    var i,\n        support,\n        Expr,\n        getText,\n        isXML,\n        tokenize,\n        compile,\n        select,\n        outermostContext,\n        sortInput,\n        hasDuplicate,\n        // Local document vars\n    setDocument,\n        document,\n        docElem,\n        documentIsHTML,\n        rbuggyQSA,\n        rbuggyMatches,\n        matches,\n        contains,\n        // Instance-specific data\n    expando = \"sizzle\" + 1 * new Date(),\n        preferredDoc = window.document,\n        dirruns = 0,\n        done = 0,\n        classCache = createCache(),\n        tokenCache = createCache(),\n        compilerCache = createCache(),\n        nonnativeSelectorCache = createCache(),\n        sortOrder = function sortOrder(a, b) {\n      if (a === b) {\n        hasDuplicate = true;\n      }\n\n      return 0;\n    },\n        // Instance methods\n    hasOwn = {}.hasOwnProperty,\n        arr = [],\n        pop = arr.pop,\n        pushNative = arr.push,\n        push = arr.push,\n        slice = arr.slice,\n        // Use a stripped-down indexOf as it's faster than native\n    // https://jsperf.com/thor-indexof-vs-for/5\n    indexOf = function indexOf(list, elem) {\n      var i = 0,\n          len = list.length;\n\n      for (; i < len; i++) {\n        if (list[i] === elem) {\n          return i;\n        }\n      }\n\n      return -1;\n    },\n        booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" + \"ismap|loop|multiple|open|readonly|required|scoped\",\n        // Regular expressions\n    // http://www.w3.org/TR/css3-selectors/#whitespace\n    whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n        // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n    identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n        // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n    attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n    \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5]\n    // or strings [capture 3 or capture 4]\"\n    \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n        pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n    // 1. quoted (capture 3; capture 4 or capture 5)\n    \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n    \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n    \".*\" + \")\\\\)|)\",\n        // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n    rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n        rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n        rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n        rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n        rdescend = new RegExp(whitespace + \"|>\"),\n        rpseudo = new RegExp(pseudos),\n        ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n        matchExpr = {\n      \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n      \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n      \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n      \"ATTR\": new RegExp(\"^\" + attributes),\n      \"PSEUDO\": new RegExp(\"^\" + pseudos),\n      \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n      \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n      // For use in libraries implementing .is()\n      // We use this for POS matching in `select`\n      \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n    },\n        rhtml = /HTML$/i,\n        rinputs = /^(?:input|select|textarea|button)$/i,\n        rheader = /^h\\d$/i,\n        rnative = /^[^{]+\\{\\s*\\[native \\w/,\n        // Easily-parseable/retrievable ID or TAG or CLASS selectors\n    rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n        rsibling = /[+~]/,\n        // CSS escapes\n    // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n    runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n        funescape = function funescape(escape, nonHex) {\n      var high = \"0x\" + escape.slice(1) - 0x10000;\n      return nonHex ? // Strip the backslash prefix from a non-hex escape sequence\n      nonHex : // Replace a hexadecimal escape sequence with the encoded Unicode code point\n      // Support: IE <=11+\n      // For values outside the Basic Multilingual Plane (BMP), manually construct a\n      // surrogate pair\n      high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n    },\n        // CSS string/identifier serialization\n    // https://drafts.csswg.org/cssom/#common-serializing-idioms\n    rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n        fcssescape = function fcssescape(ch, asCodePoint) {\n      if (asCodePoint) {\n        // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n        if (ch === \"\\0\") {\n          return \"\\uFFFD\";\n        } // Control characters and (dependent upon position) numbers get escaped as code points\n\n\n        return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n      } // Other potentially-special ASCII characters get backslash-escaped\n\n\n      return \"\\\\\" + ch;\n    },\n        // Used for iframes\n    // See setDocument()\n    // Removing the function wrapper causes a \"Permission Denied\"\n    // error in IE\n    unloadHandler = function unloadHandler() {\n      setDocument();\n    },\n        inDisabledFieldset = addCombinator(function (elem) {\n      return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n    }, {\n      dir: \"parentNode\",\n      next: \"legend\"\n    }); // Optimize for push.apply( _, NodeList )\n\n\n    try {\n      push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0\n      // Detect silently failing push.apply\n      // eslint-disable-next-line no-unused-expressions\n\n      arr[preferredDoc.childNodes.length].nodeType;\n    } catch (e) {\n      push = {\n        apply: arr.length ? // Leverage slice if possible\n        function (target, els) {\n          pushNative.apply(target, slice.call(els));\n        } : // Support: IE<9\n        // Otherwise append directly\n        function (target, els) {\n          var j = target.length,\n              i = 0; // Can't trust NodeList.length\n\n          while (target[j++] = els[i++]) {}\n\n          target.length = j - 1;\n        }\n      };\n    }\n\n    function Sizzle(selector, context, results, seed) {\n      var m,\n          i,\n          elem,\n          nid,\n          match,\n          groups,\n          newSelector,\n          newContext = context && context.ownerDocument,\n          // nodeType defaults to 9, since context defaults to document\n      nodeType = context ? context.nodeType : 9;\n      results = results || []; // Return early from calls with invalid selector or context\n\n      if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n        return results;\n      } // Try to shortcut find operations (as opposed to filters) in HTML documents\n\n\n      if (!seed) {\n        setDocument(context);\n        context = context || document;\n\n        if (documentIsHTML) {\n          // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n          // (excepting DocumentFragment context, where the methods don't exist)\n          if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n            // ID selector\n            if (m = match[1]) {\n              // Document context\n              if (nodeType === 9) {\n                if (elem = context.getElementById(m)) {\n                  // Support: IE, Opera, Webkit\n                  // TODO: identify versions\n                  // getElementById can match elements by name instead of ID\n                  if (elem.id === m) {\n                    results.push(elem);\n                    return results;\n                  }\n                } else {\n                  return results;\n                } // Element context\n\n              } else {\n                // Support: IE, Opera, Webkit\n                // TODO: identify versions\n                // getElementById can match elements by name instead of ID\n                if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n                  results.push(elem);\n                  return results;\n                }\n              } // Type selector\n\n            } else if (match[2]) {\n              push.apply(results, context.getElementsByTagName(selector));\n              return results; // Class selector\n            } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n              push.apply(results, context.getElementsByClassName(m));\n              return results;\n            }\n          } // Take advantage of querySelectorAll\n\n\n          if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && ( // Support: IE 8 only\n          // Exclude object elements\n          nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n            newSelector = selector;\n            newContext = context; // qSA considers elements outside a scoping root when evaluating child or\n            // descendant combinators, which is not what we want.\n            // In such cases, we work around the behavior by prefixing every selector in the\n            // list with an ID selector referencing the scope context.\n            // The technique has to be used as well when a leading combinator is used\n            // as such selectors are not recognized by querySelectorAll.\n            // Thanks to Andrew Dupont for this technique.\n\n            if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {\n              // Expand context for sibling selectors\n              newContext = rsibling.test(selector) && testContext(context.parentNode) || context; // We can use :scope instead of the ID hack if the browser\n              // supports it & if we're not changing the context.\n\n              if (newContext !== context || !support.scope) {\n                // Capture the context ID, setting it first if necessary\n                if (nid = context.getAttribute(\"id\")) {\n                  nid = nid.replace(rcssescape, fcssescape);\n                } else {\n                  context.setAttribute(\"id\", nid = expando);\n                }\n              } // Prefix every selector in the list\n\n\n              groups = tokenize(selector);\n              i = groups.length;\n\n              while (i--) {\n                groups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i]);\n              }\n\n              newSelector = groups.join(\",\");\n            }\n\n            try {\n              push.apply(results, newContext.querySelectorAll(newSelector));\n              return results;\n            } catch (qsaError) {\n              nonnativeSelectorCache(selector, true);\n            } finally {\n              if (nid === expando) {\n                context.removeAttribute(\"id\");\n              }\n            }\n          }\n        }\n      } // All others\n\n\n      return select(selector.replace(rtrim, \"$1\"), context, results, seed);\n    }\n    /**\n     * Create key-value caches of limited size\n     * @returns {function(string, object)} Returns the Object data after storing it on itself with\n     *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n     *\tdeleting the oldest entry\n     */\n\n\n    function createCache() {\n      var keys = [];\n\n      function cache(key, value) {\n        // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n        if (keys.push(key + \" \") > Expr.cacheLength) {\n          // Only keep the most recent entries\n          delete cache[keys.shift()];\n        }\n\n        return cache[key + \" \"] = value;\n      }\n\n      return cache;\n    }\n    /**\n     * Mark a function for special use by Sizzle\n     * @param {Function} fn The function to mark\n     */\n\n\n    function markFunction(fn) {\n      fn[expando] = true;\n      return fn;\n    }\n    /**\n     * Support testing using an element\n     * @param {Function} fn Passed the created element and returns a boolean result\n     */\n\n\n    function assert(fn) {\n      var el = document.createElement(\"fieldset\");\n\n      try {\n        return !!fn(el);\n      } catch (e) {\n        return false;\n      } finally {\n        // Remove from its parent by default\n        if (el.parentNode) {\n          el.parentNode.removeChild(el);\n        } // release memory in IE\n\n\n        el = null;\n      }\n    }\n    /**\n     * Adds the same handler for all of the specified attrs\n     * @param {String} attrs Pipe-separated list of attributes\n     * @param {Function} handler The method that will be applied\n     */\n\n\n    function addHandle(attrs, handler) {\n      var arr = attrs.split(\"|\"),\n          i = arr.length;\n\n      while (i--) {\n        Expr.attrHandle[arr[i]] = handler;\n      }\n    }\n    /**\n     * Checks document order of two siblings\n     * @param {Element} a\n     * @param {Element} b\n     * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n     */\n\n\n    function siblingCheck(a, b) {\n      var cur = b && a,\n          diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\n\n      if (diff) {\n        return diff;\n      } // Check if b follows a\n\n\n      if (cur) {\n        while (cur = cur.nextSibling) {\n          if (cur === b) {\n            return -1;\n          }\n        }\n      }\n\n      return a ? 1 : -1;\n    }\n    /**\n     * Returns a function to use in pseudos for input types\n     * @param {String} type\n     */\n\n\n    function createInputPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return name === \"input\" && elem.type === type;\n      };\n    }\n    /**\n     * Returns a function to use in pseudos for buttons\n     * @param {String} type\n     */\n\n\n    function createButtonPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return (name === \"input\" || name === \"button\") && elem.type === type;\n      };\n    }\n    /**\n     * Returns a function to use in pseudos for :enabled/:disabled\n     * @param {Boolean} disabled true for :disabled; false for :enabled\n     */\n\n\n    function createDisabledPseudo(disabled) {\n      // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n      return function (elem) {\n        // Only certain elements can match :enabled or :disabled\n        // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n        // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n        if (\"form\" in elem) {\n          // Check for inherited disabledness on relevant non-disabled elements:\n          // * listed form-associated elements in a disabled fieldset\n          //   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n          //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n          // * option elements in a disabled optgroup\n          //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n          // All such elements have a \"form\" property.\n          if (elem.parentNode && elem.disabled === false) {\n            // Option elements defer to a parent optgroup if present\n            if (\"label\" in elem) {\n              if (\"label\" in elem.parentNode) {\n                return elem.parentNode.disabled === disabled;\n              } else {\n                return elem.disabled === disabled;\n              }\n            } // Support: IE 6 - 11\n            // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\n\n            return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n\n            /* jshint -W018 */\n            elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n          }\n\n          return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n          // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n          // even exist on them, let alone have a boolean value.\n        } else if (\"label\" in elem) {\n          return elem.disabled === disabled;\n        } // Remaining elements are neither :enabled nor :disabled\n\n\n        return false;\n      };\n    }\n    /**\n     * Returns a function to use in pseudos for positionals\n     * @param {Function} fn\n     */\n\n\n    function createPositionalPseudo(fn) {\n      return markFunction(function (argument) {\n        argument = +argument;\n        return markFunction(function (seed, matches) {\n          var j,\n              matchIndexes = fn([], seed.length, argument),\n              i = matchIndexes.length; // Match elements found at the specified indexes\n\n          while (i--) {\n            if (seed[j = matchIndexes[i]]) {\n              seed[j] = !(matches[j] = seed[j]);\n            }\n          }\n        });\n      });\n    }\n    /**\n     * Checks a node for validity as a Sizzle context\n     * @param {Element|Object=} context\n     * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n     */\n\n\n    function testContext(context) {\n      return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n    } // Expose support vars for convenience\n\n\n    support = Sizzle.support = {};\n    /**\n     * Detects XML nodes\n     * @param {Element|Object} elem An element or a document\n     * @returns {Boolean} True iff elem is a non-HTML XML node\n     */\n\n    isXML = Sizzle.isXML = function (elem) {\n      var namespace = elem.namespaceURI,\n          docElem = (elem.ownerDocument || elem).documentElement; // Support: IE <=8\n      // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n      // https://bugs.jquery.com/ticket/4833\n\n      return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\n    };\n    /**\n     * Sets document-related variables once based on the current document\n     * @param {Element|Object} [doc] An element or document object to use to set the document\n     * @returns {Object} Returns the current document\n     */\n\n\n    setDocument = Sizzle.setDocument = function (node) {\n      var hasCompare,\n          subWindow,\n          doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n\n      if (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n        return document;\n      } // Update global variables\n\n\n      document = doc;\n      docElem = document.documentElement;\n      documentIsHTML = !isXML(document); // Support: IE 9 - 11+, Edge 12 - 18+\n      // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n\n      if (preferredDoc != document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n        // Support: IE 11, Edge\n        if (subWindow.addEventListener) {\n          subWindow.addEventListener(\"unload\", unloadHandler, false); // Support: IE 9 - 10 only\n        } else if (subWindow.attachEvent) {\n          subWindow.attachEvent(\"onunload\", unloadHandler);\n        }\n      } // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n      // Safari 4 - 5 only, Opera <=11.6 - 12.x only\n      // IE/Edge & older browsers don't support the :scope pseudo-class.\n      // Support: Safari 6.0 only\n      // Safari 6.0 supports :scope but it's an alias of :root there.\n\n\n      support.scope = assert(function (el) {\n        docElem.appendChild(el).appendChild(document.createElement(\"div\"));\n        return typeof el.querySelectorAll !== \"undefined\" && !el.querySelectorAll(\":scope fieldset div\").length;\n      });\n      /* Attributes\n      ---------------------------------------------------------------------- */\n      // Support: IE<8\n      // Verify that getAttribute really returns attributes and not properties\n      // (excepting IE8 booleans)\n\n      support.attributes = assert(function (el) {\n        el.className = \"i\";\n        return !el.getAttribute(\"className\");\n      });\n      /* getElement(s)By*\n      ---------------------------------------------------------------------- */\n      // Check if getElementsByTagName(\"*\") returns only elements\n\n      support.getElementsByTagName = assert(function (el) {\n        el.appendChild(document.createComment(\"\"));\n        return !el.getElementsByTagName(\"*\").length;\n      }); // Support: IE<9\n\n      support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n      // Check if getElementById returns elements by name\n      // The broken getElementById methods don't pick up programmatically-set names,\n      // so use a roundabout getElementsByName test\n\n      support.getById = assert(function (el) {\n        docElem.appendChild(el).id = expando;\n        return !document.getElementsByName || !document.getElementsByName(expando).length;\n      }); // ID filter and find\n\n      if (support.getById) {\n        Expr.filter[\"ID\"] = function (id) {\n          var attrId = id.replace(runescape, funescape);\n          return function (elem) {\n            return elem.getAttribute(\"id\") === attrId;\n          };\n        };\n\n        Expr.find[\"ID\"] = function (id, context) {\n          if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n            var elem = context.getElementById(id);\n            return elem ? [elem] : [];\n          }\n        };\n      } else {\n        Expr.filter[\"ID\"] = function (id) {\n          var attrId = id.replace(runescape, funescape);\n          return function (elem) {\n            var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n            return node && node.value === attrId;\n          };\n        }; // Support: IE 6 - 7 only\n        // getElementById is not reliable as a find shortcut\n\n\n        Expr.find[\"ID\"] = function (id, context) {\n          if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n            var node,\n                i,\n                elems,\n                elem = context.getElementById(id);\n\n            if (elem) {\n              // Verify the id attribute\n              node = elem.getAttributeNode(\"id\");\n\n              if (node && node.value === id) {\n                return [elem];\n              } // Fall back on getElementsByName\n\n\n              elems = context.getElementsByName(id);\n              i = 0;\n\n              while (elem = elems[i++]) {\n                node = elem.getAttributeNode(\"id\");\n\n                if (node && node.value === id) {\n                  return [elem];\n                }\n              }\n            }\n\n            return [];\n          }\n        };\n      } // Tag\n\n\n      Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n        if (typeof context.getElementsByTagName !== \"undefined\") {\n          return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n        } else if (support.qsa) {\n          return context.querySelectorAll(tag);\n        }\n      } : function (tag, context) {\n        var elem,\n            tmp = [],\n            i = 0,\n            // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n        results = context.getElementsByTagName(tag); // Filter out possible comments\n\n        if (tag === \"*\") {\n          while (elem = results[i++]) {\n            if (elem.nodeType === 1) {\n              tmp.push(elem);\n            }\n          }\n\n          return tmp;\n        }\n\n        return results;\n      }; // Class\n\n      Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n        if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n          return context.getElementsByClassName(className);\n        }\n      };\n      /* QSA/matchesSelector\n      ---------------------------------------------------------------------- */\n      // QSA and matchesSelector support\n      // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\n\n      rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n      // We allow this because of a bug in IE8/9 that throws an error\n      // whenever `document.activeElement` is accessed on an iframe\n      // So, we allow :focus to pass through QSA all the time to avoid the IE error\n      // See https://bugs.jquery.com/ticket/13378\n\n      rbuggyQSA = [];\n\n      if (support.qsa = rnative.test(document.querySelectorAll)) {\n        // Build QSA regex\n        // Regex strategy adopted from Diego Perini\n        assert(function (el) {\n          var input; // Select is set to empty string on purpose\n          // This is to test IE's treatment of not explicitly\n          // setting a boolean content attribute,\n          // since its presence should be enough\n          // https://bugs.jquery.com/ticket/12359\n\n          docElem.appendChild(el).innerHTML = \"<a id='\" + expando + \"'></a>\" + \"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" + \"<option selected=''></option></select>\"; // Support: IE8, Opera 11-12.16\n          // Nothing should be selected when empty strings follow ^= or $= or *=\n          // The test attribute must be unknown in Opera but \"safe\" for WinRT\n          // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\n          if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n            rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n          } // Support: IE8\n          // Boolean attributes and \"value\" are not treated correctly\n\n\n          if (!el.querySelectorAll(\"[selected]\").length) {\n            rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n          } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\n\n          if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n            rbuggyQSA.push(\"~=\");\n          } // Support: IE 11+, Edge 15 - 18+\n          // IE 11/Edge don't find elements on a `[name='']` query in some cases.\n          // Adding a temporary attribute to the document before the selection works\n          // around the issue.\n          // Interestingly, IE 10 & older don't seem to have the issue.\n\n\n          input = document.createElement(\"input\");\n          input.setAttribute(\"name\", \"\");\n          el.appendChild(input);\n\n          if (!el.querySelectorAll(\"[name='']\").length) {\n            rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + \"*(?:''|\\\"\\\")\");\n          } // Webkit/Opera - :checked should return selected option elements\n          // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n          // IE8 throws error here and will not see later tests\n\n\n          if (!el.querySelectorAll(\":checked\").length) {\n            rbuggyQSA.push(\":checked\");\n          } // Support: Safari 8+, iOS 8+\n          // https://bugs.webkit.org/show_bug.cgi?id=136851\n          // In-page `selector#id sibling-combinator selector` fails\n\n\n          if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n            rbuggyQSA.push(\".#.+[+~]\");\n          } // Support: Firefox <=3.6 - 5 only\n          // Old Firefox doesn't throw on a badly-escaped identifier.\n\n\n          el.querySelectorAll(\"\\\\\\f\");\n          rbuggyQSA.push(\"[\\\\r\\\\n\\\\f]\");\n        });\n        assert(function (el) {\n          el.innerHTML = \"<a href='' disabled='disabled'></a>\" + \"<select disabled='disabled'><option/></select>\"; // Support: Windows 8 Native Apps\n          // The type and name attributes are restricted during .innerHTML assignment\n\n          var input = document.createElement(\"input\");\n          input.setAttribute(\"type\", \"hidden\");\n          el.appendChild(input).setAttribute(\"name\", \"D\"); // Support: IE8\n          // Enforce case-sensitivity of name attribute\n\n          if (el.querySelectorAll(\"[name=d]\").length) {\n            rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n          } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n          // IE8 throws error here and will not see later tests\n\n\n          if (el.querySelectorAll(\":enabled\").length !== 2) {\n            rbuggyQSA.push(\":enabled\", \":disabled\");\n          } // Support: IE9-11+\n          // IE's :disabled selector does not pick up the children of disabled fieldsets\n\n\n          docElem.appendChild(el).disabled = true;\n\n          if (el.querySelectorAll(\":disabled\").length !== 2) {\n            rbuggyQSA.push(\":enabled\", \":disabled\");\n          } // Support: Opera 10 - 11 only\n          // Opera 10-11 does not throw on post-comma invalid pseudos\n\n\n          el.querySelectorAll(\"*,:x\");\n          rbuggyQSA.push(\",.*:\");\n        });\n      }\n\n      if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n        assert(function (el) {\n          // Check to see if it's possible to do matchesSelector\n          // on a disconnected node (IE 9)\n          support.disconnectedMatch = matches.call(el, \"*\"); // This should fail with an exception\n          // Gecko does not error, returns false instead\n\n          matches.call(el, \"[s!='']:x\");\n          rbuggyMatches.push(\"!=\", pseudos);\n        });\n      }\n\n      rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n      rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n      /* Contains\n      ---------------------------------------------------------------------- */\n\n      hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n      // Purposefully self-exclusive\n      // As in, an element does not contain itself\n\n      contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n        var adown = a.nodeType === 9 ? a.documentElement : a,\n            bup = b && b.parentNode;\n        return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n      } : function (a, b) {\n        if (b) {\n          while (b = b.parentNode) {\n            if (b === a) {\n              return true;\n            }\n          }\n        }\n\n        return false;\n      };\n      /* Sorting\n      ---------------------------------------------------------------------- */\n      // Document order sorting\n\n      sortOrder = hasCompare ? function (a, b) {\n        // Flag for duplicate removal\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        } // Sort on method existence if only one input has compareDocumentPosition\n\n\n        var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\n        if (compare) {\n          return compare;\n        } // Calculate position if both inputs belong to the same document\n        // Support: IE 11+, Edge 17 - 18+\n        // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n        // two documents; shallow comparisons work.\n        // eslint-disable-next-line eqeqeq\n\n\n        compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n        1; // Disconnected nodes\n\n        if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n          // Choose the first element that is related to our preferred document\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n          if (a == document || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {\n            return -1;\n          } // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n\n\n          if (b == document || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {\n            return 1;\n          } // Maintain original order\n\n\n          return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n        }\n\n        return compare & 4 ? -1 : 1;\n      } : function (a, b) {\n        // Exit early if the nodes are identical\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        }\n\n        var cur,\n            i = 0,\n            aup = a.parentNode,\n            bup = b.parentNode,\n            ap = [a],\n            bp = [b]; // Parentless nodes are either documents or disconnected\n\n        if (!aup || !bup) {\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n\n          /* eslint-disable eqeqeq */\n          return a == document ? -1 : b == document ? 1 :\n          /* eslint-enable eqeqeq */\n          aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check\n        } else if (aup === bup) {\n          return siblingCheck(a, b);\n        } // Otherwise we need full lists of their ancestors for comparison\n\n\n        cur = a;\n\n        while (cur = cur.parentNode) {\n          ap.unshift(cur);\n        }\n\n        cur = b;\n\n        while (cur = cur.parentNode) {\n          bp.unshift(cur);\n        } // Walk down the tree looking for a discrepancy\n\n\n        while (ap[i] === bp[i]) {\n          i++;\n        }\n\n        return i ? // Do a sibling check if the nodes have a common ancestor\n        siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first\n        // Support: IE 11+, Edge 17 - 18+\n        // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n        // two documents; shallow comparisons work.\n\n        /* eslint-disable eqeqeq */\n        ap[i] == preferredDoc ? -1 : bp[i] == preferredDoc ? 1 :\n        /* eslint-enable eqeqeq */\n        0;\n      };\n      return document;\n    };\n\n    Sizzle.matches = function (expr, elements) {\n      return Sizzle(expr, null, null, elements);\n    };\n\n    Sizzle.matchesSelector = function (elem, expr) {\n      setDocument(elem);\n\n      if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n        try {\n          var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes\n\n          if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n          // fragment in IE 9\n          elem.document && elem.document.nodeType !== 11) {\n            return ret;\n          }\n        } catch (e) {\n          nonnativeSelectorCache(expr, true);\n        }\n      }\n\n      return Sizzle(expr, document, null, [elem]).length > 0;\n    };\n\n    Sizzle.contains = function (context, elem) {\n      // Set document vars if needed\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n      if ((context.ownerDocument || context) != document) {\n        setDocument(context);\n      }\n\n      return contains(context, elem);\n    };\n\n    Sizzle.attr = function (elem, name) {\n      // Set document vars if needed\n      // Support: IE 11+, Edge 17 - 18+\n      // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n      // two documents; shallow comparisons work.\n      // eslint-disable-next-line eqeqeq\n      if ((elem.ownerDocument || elem) != document) {\n        setDocument(elem);\n      }\n\n      var fn = Expr.attrHandle[name.toLowerCase()],\n          // Don't get fooled by Object.prototype properties (jQuery #13807)\n      val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n      return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n    };\n\n    Sizzle.escape = function (sel) {\n      return (sel + \"\").replace(rcssescape, fcssescape);\n    };\n\n    Sizzle.error = function (msg) {\n      throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n    };\n    /**\n     * Document sorting and removing duplicates\n     * @param {ArrayLike} results\n     */\n\n\n    Sizzle.uniqueSort = function (results) {\n      var elem,\n          duplicates = [],\n          j = 0,\n          i = 0; // Unless we *know* we can detect duplicates, assume their presence\n\n      hasDuplicate = !support.detectDuplicates;\n      sortInput = !support.sortStable && results.slice(0);\n      results.sort(sortOrder);\n\n      if (hasDuplicate) {\n        while (elem = results[i++]) {\n          if (elem === results[i]) {\n            j = duplicates.push(i);\n          }\n        }\n\n        while (j--) {\n          results.splice(duplicates[j], 1);\n        }\n      } // Clear input after sorting to release objects\n      // See https://github.com/jquery/sizzle/pull/225\n\n\n      sortInput = null;\n      return results;\n    };\n    /**\n     * Utility function for retrieving the text value of an array of DOM nodes\n     * @param {Array|Element} elem\n     */\n\n\n    getText = Sizzle.getText = function (elem) {\n      var node,\n          ret = \"\",\n          i = 0,\n          nodeType = elem.nodeType;\n\n      if (!nodeType) {\n        // If no nodeType, this is expected to be an array\n        while (node = elem[i++]) {\n          // Do not traverse comment nodes\n          ret += getText(node);\n        }\n      } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n        // Use textContent for elements\n        // innerText usage removed for consistency of new lines (jQuery #11153)\n        if (typeof elem.textContent === \"string\") {\n          return elem.textContent;\n        } else {\n          // Traverse its children\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            ret += getText(elem);\n          }\n        }\n      } else if (nodeType === 3 || nodeType === 4) {\n        return elem.nodeValue;\n      } // Do not include comment or processing instruction nodes\n\n\n      return ret;\n    };\n\n    Expr = Sizzle.selectors = {\n      // Can be adjusted by the user\n      cacheLength: 50,\n      createPseudo: markFunction,\n      match: matchExpr,\n      attrHandle: {},\n      find: {},\n      relative: {\n        \">\": {\n          dir: \"parentNode\",\n          first: true\n        },\n        \" \": {\n          dir: \"parentNode\"\n        },\n        \"+\": {\n          dir: \"previousSibling\",\n          first: true\n        },\n        \"~\": {\n          dir: \"previousSibling\"\n        }\n      },\n      preFilter: {\n        \"ATTR\": function ATTR(match) {\n          match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted\n\n          match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n\n          if (match[2] === \"~=\") {\n            match[3] = \" \" + match[3] + \" \";\n          }\n\n          return match.slice(0, 4);\n        },\n        \"CHILD\": function CHILD(match) {\n          /* matches from matchExpr[\"CHILD\"]\n          \t1 type (only|nth|...)\n          \t2 what (child|of-type)\n          \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n          \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n          \t5 sign of xn-component\n          \t6 x of xn-component\n          \t7 sign of y-component\n          \t8 y of y-component\n          */\n          match[1] = match[1].toLowerCase();\n\n          if (match[1].slice(0, 3) === \"nth\") {\n            // nth-* requires argument\n            if (!match[3]) {\n              Sizzle.error(match[0]);\n            } // numeric x and y parameters for Expr.filter.CHILD\n            // remember that false/true cast respectively to 0/1\n\n\n            match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n            match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n          } else if (match[3]) {\n            Sizzle.error(match[0]);\n          }\n\n          return match;\n        },\n        \"PSEUDO\": function PSEUDO(match) {\n          var excess,\n              unquoted = !match[6] && match[2];\n\n          if (matchExpr[\"CHILD\"].test(match[0])) {\n            return null;\n          } // Accept quoted arguments as-is\n\n\n          if (match[3]) {\n            match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n          } else if (unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)\n          excess = tokenize(unquoted, true)) && ( // advance to the next closing parenthesis\n          excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n            // excess is a negative index\n            match[0] = match[0].slice(0, excess);\n            match[2] = unquoted.slice(0, excess);\n          } // Return only captures needed by the pseudo filter method (type and argument)\n\n\n          return match.slice(0, 3);\n        }\n      },\n      filter: {\n        \"TAG\": function TAG(nodeNameSelector) {\n          var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n          return nodeNameSelector === \"*\" ? function () {\n            return true;\n          } : function (elem) {\n            return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n          };\n        },\n        \"CLASS\": function CLASS(className) {\n          var pattern = classCache[className + \" \"];\n          return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n            return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n          });\n        },\n        \"ATTR\": function ATTR(name, operator, check) {\n          return function (elem) {\n            var result = Sizzle.attr(elem, name);\n\n            if (result == null) {\n              return operator === \"!=\";\n            }\n\n            if (!operator) {\n              return true;\n            }\n\n            result += \"\";\n            /* eslint-disable max-len */\n\n            return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n            /* eslint-enable max-len */\n          };\n        },\n        \"CHILD\": function CHILD(type, what, _argument, first, last) {\n          var simple = type.slice(0, 3) !== \"nth\",\n              forward = type.slice(-4) !== \"last\",\n              ofType = what === \"of-type\";\n          return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n          function (elem) {\n            return !!elem.parentNode;\n          } : function (elem, _context, xml) {\n            var cache,\n                uniqueCache,\n                outerCache,\n                node,\n                nodeIndex,\n                start,\n                dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n                parent = elem.parentNode,\n                name = ofType && elem.nodeName.toLowerCase(),\n                useCache = !xml && !ofType,\n                diff = false;\n\n            if (parent) {\n              // :(first|last|only)-(child|of-type)\n              if (simple) {\n                while (dir) {\n                  node = elem;\n\n                  while (node = node[dir]) {\n                    if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n                      return false;\n                    }\n                  } // Reverse direction for :only-* (if we haven't yet done so)\n\n\n                  start = dir = type === \"only\" && !start && \"nextSibling\";\n                }\n\n                return true;\n              }\n\n              start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\n\n              if (forward && useCache) {\n                // Seek `elem` from a previously-cached index\n                // ...in a gzip-friendly way\n                node = parent;\n                outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                // Defend against cloned attroperties (jQuery gh-1709)\n\n                uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                cache = uniqueCache[type] || [];\n                nodeIndex = cache[0] === dirruns && cache[1];\n                diff = nodeIndex && cache[2];\n                node = nodeIndex && parent.childNodes[nodeIndex];\n\n                while (node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start\n                diff = nodeIndex = 0) || start.pop()) {\n                  // When found, cache indexes on `parent` and break\n                  if (node.nodeType === 1 && ++diff && node === elem) {\n                    uniqueCache[type] = [dirruns, nodeIndex, diff];\n                    break;\n                  }\n                }\n              } else {\n                // Use previously-cached element index if available\n                if (useCache) {\n                  // ...in a gzip-friendly way\n                  node = elem;\n                  outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                  // Defend against cloned attroperties (jQuery gh-1709)\n\n                  uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                  cache = uniqueCache[type] || [];\n                  nodeIndex = cache[0] === dirruns && cache[1];\n                  diff = nodeIndex;\n                } // xml :nth-child(...)\n                // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\n\n                if (diff === false) {\n                  // Use the same loop as above to seek `elem` from the start\n                  while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                    if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n                      // Cache the index of each encountered element\n                      if (useCache) {\n                        outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                        // Defend against cloned attroperties (jQuery gh-1709)\n\n                        uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                        uniqueCache[type] = [dirruns, diff];\n                      }\n\n                      if (node === elem) {\n                        break;\n                      }\n                    }\n                  }\n                }\n              } // Incorporate the offset, then check against cycle size\n\n\n              diff -= last;\n              return diff === first || diff % first === 0 && diff / first >= 0;\n            }\n          };\n        },\n        \"PSEUDO\": function PSEUDO(pseudo, argument) {\n          // pseudo-class names are case-insensitive\n          // http://www.w3.org/TR/selectors/#pseudo-classes\n          // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n          // Remember that setFilters inherits from pseudos\n          var args,\n              fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n          // arguments are needed to create the filter function\n          // just as Sizzle does\n\n          if (fn[expando]) {\n            return fn(argument);\n          } // But maintain support for old signatures\n\n\n          if (fn.length > 1) {\n            args = [pseudo, pseudo, \"\", argument];\n            return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n              var idx,\n                  matched = fn(seed, argument),\n                  i = matched.length;\n\n              while (i--) {\n                idx = indexOf(seed, matched[i]);\n                seed[idx] = !(matches[idx] = matched[i]);\n              }\n            }) : function (elem) {\n              return fn(elem, 0, args);\n            };\n          }\n\n          return fn;\n        }\n      },\n      pseudos: {\n        // Potentially complex pseudos\n        \"not\": markFunction(function (selector) {\n          // Trim the selector passed to compile\n          // to avoid treating leading and trailing\n          // spaces as combinators\n          var input = [],\n              results = [],\n              matcher = compile(selector.replace(rtrim, \"$1\"));\n          return matcher[expando] ? markFunction(function (seed, matches, _context, xml) {\n            var elem,\n                unmatched = matcher(seed, null, xml, []),\n                i = seed.length; // Match elements unmatched by `matcher`\n\n            while (i--) {\n              if (elem = unmatched[i]) {\n                seed[i] = !(matches[i] = elem);\n              }\n            }\n          }) : function (elem, _context, xml) {\n            input[0] = elem;\n            matcher(input, null, xml, results); // Don't keep the element (issue #299)\n\n            input[0] = null;\n            return !results.pop();\n          };\n        }),\n        \"has\": markFunction(function (selector) {\n          return function (elem) {\n            return Sizzle(selector, elem).length > 0;\n          };\n        }),\n        \"contains\": markFunction(function (text) {\n          text = text.replace(runescape, funescape);\n          return function (elem) {\n            return (elem.textContent || getText(elem)).indexOf(text) > -1;\n          };\n        }),\n        // \"Whether an element is represented by a :lang() selector\n        // is based solely on the element's language value\n        // being equal to the identifier C,\n        // or beginning with the identifier C immediately followed by \"-\".\n        // The matching of C against the element's language value is performed case-insensitively.\n        // The identifier C does not have to be a valid language name.\"\n        // http://www.w3.org/TR/selectors/#lang-pseudo\n        \"lang\": markFunction(function (lang) {\n          // lang value must be a valid identifier\n          if (!ridentifier.test(lang || \"\")) {\n            Sizzle.error(\"unsupported lang: \" + lang);\n          }\n\n          lang = lang.replace(runescape, funescape).toLowerCase();\n          return function (elem) {\n            var elemLang;\n\n            do {\n              if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n                elemLang = elemLang.toLowerCase();\n                return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n              }\n            } while ((elem = elem.parentNode) && elem.nodeType === 1);\n\n            return false;\n          };\n        }),\n        // Miscellaneous\n        \"target\": function target(elem) {\n          var hash = window.location && window.location.hash;\n          return hash && hash.slice(1) === elem.id;\n        },\n        \"root\": function root(elem) {\n          return elem === docElem;\n        },\n        \"focus\": function focus(elem) {\n          return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n        },\n        // Boolean properties\n        \"enabled\": createDisabledPseudo(false),\n        \"disabled\": createDisabledPseudo(true),\n        \"checked\": function checked(elem) {\n          // In CSS3, :checked should return both checked and selected elements\n          // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n          var nodeName = elem.nodeName.toLowerCase();\n          return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;\n        },\n        \"selected\": function selected(elem) {\n          // Accessing this property makes selected-by-default\n          // options in Safari work properly\n          if (elem.parentNode) {\n            // eslint-disable-next-line no-unused-expressions\n            elem.parentNode.selectedIndex;\n          }\n\n          return elem.selected === true;\n        },\n        // Contents\n        \"empty\": function empty(elem) {\n          // http://www.w3.org/TR/selectors/#empty-pseudo\n          // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n          //   but not by others (comment: 8; processing instruction: 7; etc.)\n          // nodeType < 6 works because attributes (2) do not appear as children\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            if (elem.nodeType < 6) {\n              return false;\n            }\n          }\n\n          return true;\n        },\n        \"parent\": function parent(elem) {\n          return !Expr.pseudos[\"empty\"](elem);\n        },\n        // Element/input types\n        \"header\": function header(elem) {\n          return rheader.test(elem.nodeName);\n        },\n        \"input\": function input(elem) {\n          return rinputs.test(elem.nodeName);\n        },\n        \"button\": function button(elem) {\n          var name = elem.nodeName.toLowerCase();\n          return name === \"input\" && elem.type === \"button\" || name === \"button\";\n        },\n        \"text\": function text(elem) {\n          var attr;\n          return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ( // Support: IE<8\n          // New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n          (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n        },\n        // Position-in-collection\n        \"first\": createPositionalPseudo(function () {\n          return [0];\n        }),\n        \"last\": createPositionalPseudo(function (_matchIndexes, length) {\n          return [length - 1];\n        }),\n        \"eq\": createPositionalPseudo(function (_matchIndexes, length, argument) {\n          return [argument < 0 ? argument + length : argument];\n        }),\n        \"even\": createPositionalPseudo(function (matchIndexes, length) {\n          var i = 0;\n\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"odd\": createPositionalPseudo(function (matchIndexes, length) {\n          var i = 1;\n\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"lt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument > length ? length : argument;\n\n          for (; --i >= 0;) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"gt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument;\n\n          for (; ++i < length;) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        })\n      }\n    };\n    Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\n\n    for (i in {\n      radio: true,\n      checkbox: true,\n      file: true,\n      password: true,\n      image: true\n    }) {\n      Expr.pseudos[i] = createInputPseudo(i);\n    }\n\n    for (i in {\n      submit: true,\n      reset: true\n    }) {\n      Expr.pseudos[i] = createButtonPseudo(i);\n    } // Easy API for creating new setFilters\n\n\n    function setFilters() {}\n\n    setFilters.prototype = Expr.filters = Expr.pseudos;\n    Expr.setFilters = new setFilters();\n\n    tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n      var matched,\n          match,\n          tokens,\n          type,\n          soFar,\n          groups,\n          preFilters,\n          cached = tokenCache[selector + \" \"];\n\n      if (cached) {\n        return parseOnly ? 0 : cached.slice(0);\n      }\n\n      soFar = selector;\n      groups = [];\n      preFilters = Expr.preFilter;\n\n      while (soFar) {\n        // Comma and first run\n        if (!matched || (match = rcomma.exec(soFar))) {\n          if (match) {\n            // Don't consume trailing commas as valid\n            soFar = soFar.slice(match[0].length) || soFar;\n          }\n\n          groups.push(tokens = []);\n        }\n\n        matched = false; // Combinators\n\n        if (match = rcombinators.exec(soFar)) {\n          matched = match.shift();\n          tokens.push({\n            value: matched,\n            // Cast descendant combinators to space\n            type: match[0].replace(rtrim, \" \")\n          });\n          soFar = soFar.slice(matched.length);\n        } // Filters\n\n\n        for (type in Expr.filter) {\n          if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n            matched = match.shift();\n            tokens.push({\n              value: matched,\n              type: type,\n              matches: match\n            });\n            soFar = soFar.slice(matched.length);\n          }\n        }\n\n        if (!matched) {\n          break;\n        }\n      } // Return the length of the invalid excess\n      // if we're just parsing\n      // Otherwise, throw an error or return tokens\n\n\n      return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens\n      tokenCache(selector, groups).slice(0);\n    };\n\n    function toSelector(tokens) {\n      var i = 0,\n          len = tokens.length,\n          selector = \"\";\n\n      for (; i < len; i++) {\n        selector += tokens[i].value;\n      }\n\n      return selector;\n    }\n\n    function addCombinator(matcher, combinator, base) {\n      var dir = combinator.dir,\n          skip = combinator.next,\n          key = skip || dir,\n          checkNonElements = base && key === \"parentNode\",\n          doneName = done++;\n      return combinator.first ? // Check against closest ancestor/preceding element\n      function (elem, context, xml) {\n        while (elem = elem[dir]) {\n          if (elem.nodeType === 1 || checkNonElements) {\n            return matcher(elem, context, xml);\n          }\n        }\n\n        return false;\n      } : // Check against all ancestor/preceding elements\n      function (elem, context, xml) {\n        var oldCache,\n            uniqueCache,\n            outerCache,\n            newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\n        if (xml) {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              if (matcher(elem, context, xml)) {\n                return true;\n              }\n            }\n          }\n        } else {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n              // Defend against cloned attroperties (jQuery gh-1709)\n\n              uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n              if (skip && skip === elem.nodeName.toLowerCase()) {\n                elem = elem[dir] || elem;\n              } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n                // Assign to newCache so results back-propagate to previous elements\n                return newCache[2] = oldCache[2];\n              } else {\n                // Reuse newcache so results back-propagate to previous elements\n                uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\n\n                if (newCache[2] = matcher(elem, context, xml)) {\n                  return true;\n                }\n              }\n            }\n          }\n        }\n\n        return false;\n      };\n    }\n\n    function elementMatcher(matchers) {\n      return matchers.length > 1 ? function (elem, context, xml) {\n        var i = matchers.length;\n\n        while (i--) {\n          if (!matchers[i](elem, context, xml)) {\n            return false;\n          }\n        }\n\n        return true;\n      } : matchers[0];\n    }\n\n    function multipleContexts(selector, contexts, results) {\n      var i = 0,\n          len = contexts.length;\n\n      for (; i < len; i++) {\n        Sizzle(selector, contexts[i], results);\n      }\n\n      return results;\n    }\n\n    function condense(unmatched, map, filter, context, xml) {\n      var elem,\n          newUnmatched = [],\n          i = 0,\n          len = unmatched.length,\n          mapped = map != null;\n\n      for (; i < len; i++) {\n        if (elem = unmatched[i]) {\n          if (!filter || filter(elem, context, xml)) {\n            newUnmatched.push(elem);\n\n            if (mapped) {\n              map.push(i);\n            }\n          }\n        }\n      }\n\n      return newUnmatched;\n    }\n\n    function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n      if (postFilter && !postFilter[expando]) {\n        postFilter = setMatcher(postFilter);\n      }\n\n      if (postFinder && !postFinder[expando]) {\n        postFinder = setMatcher(postFinder, postSelector);\n      }\n\n      return markFunction(function (seed, results, context, xml) {\n        var temp,\n            i,\n            elem,\n            preMap = [],\n            postMap = [],\n            preexisting = results.length,\n            // Get initial elements from seed or context\n        elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n            // Prefilter to get matcher input, preserving a map for seed-results synchronization\n        matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,\n            matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n        postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n        [] : // ...otherwise use results directly\n        results : matcherIn; // Find primary matches\n\n        if (matcher) {\n          matcher(matcherIn, matcherOut, context, xml);\n        } // Apply postFilter\n\n\n        if (postFilter) {\n          temp = condense(matcherOut, postMap);\n          postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn\n\n          i = temp.length;\n\n          while (i--) {\n            if (elem = temp[i]) {\n              matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n            }\n          }\n        }\n\n        if (seed) {\n          if (postFinder || preFilter) {\n            if (postFinder) {\n              // Get the final matcherOut by condensing this intermediate into postFinder contexts\n              temp = [];\n              i = matcherOut.length;\n\n              while (i--) {\n                if (elem = matcherOut[i]) {\n                  // Restore matcherIn since elem is not yet a final match\n                  temp.push(matcherIn[i] = elem);\n                }\n              }\n\n              postFinder(null, matcherOut = [], temp, xml);\n            } // Move matched elements from seed to results to keep them synchronized\n\n\n            i = matcherOut.length;\n\n            while (i--) {\n              if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n                seed[temp] = !(results[temp] = elem);\n              }\n            }\n          } // Add elements to results, through postFinder if defined\n\n        } else {\n          matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n\n          if (postFinder) {\n            postFinder(null, results, matcherOut, xml);\n          } else {\n            push.apply(results, matcherOut);\n          }\n        }\n      });\n    }\n\n    function matcherFromTokens(tokens) {\n      var checkContext,\n          matcher,\n          j,\n          len = tokens.length,\n          leadingRelative = Expr.relative[tokens[0].type],\n          implicitRelative = leadingRelative || Expr.relative[\" \"],\n          i = leadingRelative ? 1 : 0,\n          // The foundational matcher ensures that elements are reachable from top-level context(s)\n      matchContext = addCombinator(function (elem) {\n        return elem === checkContext;\n      }, implicitRelative, true),\n          matchAnyContext = addCombinator(function (elem) {\n        return indexOf(checkContext, elem) > -1;\n      }, implicitRelative, true),\n          matchers = [function (elem, context, xml) {\n        var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)\n\n        checkContext = null;\n        return ret;\n      }];\n\n      for (; i < len; i++) {\n        if (matcher = Expr.relative[tokens[i].type]) {\n          matchers = [addCombinator(elementMatcher(matchers), matcher)];\n        } else {\n          matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher\n\n          if (matcher[expando]) {\n            // Find the next relative operator (if any) for proper handling\n            j = ++i;\n\n            for (; j < len; j++) {\n              if (Expr.relative[tokens[j].type]) {\n                break;\n              }\n            }\n\n            return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n            tokens.slice(0, i - 1).concat({\n              value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n            })).replace(rtrim, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n          }\n\n          matchers.push(matcher);\n        }\n      }\n\n      return elementMatcher(matchers);\n    }\n\n    function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n      var bySet = setMatchers.length > 0,\n          byElement = elementMatchers.length > 0,\n          superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n        var elem,\n            j,\n            matcher,\n            matchedCount = 0,\n            i = \"0\",\n            unmatched = seed && [],\n            setMatched = [],\n            contextBackup = outermostContext,\n            // We must always have either seed elements or outermost context\n        elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost),\n            // Use integer dirruns iff this is the outermost matcher\n        dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n            len = elems.length;\n\n        if (outermost) {\n          // Support: IE 11+, Edge 17 - 18+\n          // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n          // two documents; shallow comparisons work.\n          // eslint-disable-next-line eqeqeq\n          outermostContext = context == document || context || outermost;\n        } // Add elements passing elementMatchers directly to results\n        // Support: IE<9, Safari\n        // Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\n\n        for (; i !== len && (elem = elems[i]) != null; i++) {\n          if (byElement && elem) {\n            j = 0; // Support: IE 11+, Edge 17 - 18+\n            // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n            // two documents; shallow comparisons work.\n            // eslint-disable-next-line eqeqeq\n\n            if (!context && elem.ownerDocument != document) {\n              setDocument(elem);\n              xml = !documentIsHTML;\n            }\n\n            while (matcher = elementMatchers[j++]) {\n              if (matcher(elem, context || document, xml)) {\n                results.push(elem);\n                break;\n              }\n            }\n\n            if (outermost) {\n              dirruns = dirrunsUnique;\n            }\n          } // Track unmatched elements for set filters\n\n\n          if (bySet) {\n            // They will have gone through all possible matchers\n            if (elem = !matcher && elem) {\n              matchedCount--;\n            } // Lengthen the array for every element, matched or not\n\n\n            if (seed) {\n              unmatched.push(elem);\n            }\n          }\n        } // `i` is now the count of elements visited above, and adding it to `matchedCount`\n        // makes the latter nonnegative.\n\n\n        matchedCount += i; // Apply set filters to unmatched elements\n        // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n        // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n        // no element matchers and no seed.\n        // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n        // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n        // numerically zero.\n\n        if (bySet && i !== matchedCount) {\n          j = 0;\n\n          while (matcher = setMatchers[j++]) {\n            matcher(unmatched, setMatched, context, xml);\n          }\n\n          if (seed) {\n            // Reintegrate element matches to eliminate the need for sorting\n            if (matchedCount > 0) {\n              while (i--) {\n                if (!(unmatched[i] || setMatched[i])) {\n                  setMatched[i] = pop.call(results);\n                }\n              }\n            } // Discard index placeholder values to get only actual matches\n\n\n            setMatched = condense(setMatched);\n          } // Add matches to results\n\n\n          push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\n\n          if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n            Sizzle.uniqueSort(results);\n          }\n        } // Override manipulation of globals by nested matchers\n\n\n        if (outermost) {\n          dirruns = dirrunsUnique;\n          outermostContext = contextBackup;\n        }\n\n        return unmatched;\n      };\n\n      return bySet ? markFunction(superMatcher) : superMatcher;\n    }\n\n    compile = Sizzle.compile = function (selector, match\n    /* Internal Use Only */\n    ) {\n      var i,\n          setMatchers = [],\n          elementMatchers = [],\n          cached = compilerCache[selector + \" \"];\n\n      if (!cached) {\n        // Generate a function of recursive functions that can be used to check each element\n        if (!match) {\n          match = tokenize(selector);\n        }\n\n        i = match.length;\n\n        while (i--) {\n          cached = matcherFromTokens(match[i]);\n\n          if (cached[expando]) {\n            setMatchers.push(cached);\n          } else {\n            elementMatchers.push(cached);\n          }\n        } // Cache the compiled function\n\n\n        cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization\n\n        cached.selector = selector;\n      }\n\n      return cached;\n    };\n    /**\n     * A low-level selection function that works with Sizzle's compiled\n     *  selector functions\n     * @param {String|Function} selector A selector or a pre-compiled\n     *  selector function built with Sizzle.compile\n     * @param {Element} context\n     * @param {Array} [results]\n     * @param {Array} [seed] A set of elements to match against\n     */\n\n\n    select = Sizzle.select = function (selector, context, results, seed) {\n      var i,\n          tokens,\n          token,\n          type,\n          find,\n          compiled = typeof selector === \"function\" && selector,\n          match = !seed && tokenize(selector = compiled.selector || selector);\n      results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n      // (the latter of which guarantees us context)\n\n      if (match.length === 1) {\n        // Reduce context if the leading compound selector is an ID\n        tokens = match[0] = match[0].slice(0);\n\n        if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n          context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n\n          if (!context) {\n            return results; // Precompiled matchers will still verify ancestry, so step up a level\n          } else if (compiled) {\n            context = context.parentNode;\n          }\n\n          selector = selector.slice(tokens.shift().value.length);\n        } // Fetch a seed set for right-to-left matching\n\n\n        i = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n\n        while (i--) {\n          token = tokens[i]; // Abort if we hit a combinator\n\n          if (Expr.relative[type = token.type]) {\n            break;\n          }\n\n          if (find = Expr.find[type]) {\n            // Search, expanding context for leading sibling combinators\n            if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n              // If seed is empty or no tokens remain, we can return early\n              tokens.splice(i, 1);\n              selector = seed.length && toSelector(tokens);\n\n              if (!selector) {\n                push.apply(results, seed);\n                return results;\n              }\n\n              break;\n            }\n          }\n        }\n      } // Compile and execute a filtering function if one is not provided\n      // Provide `match` to avoid retokenization if we modified the selector above\n\n\n      (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n      return results;\n    }; // One-time assignments\n    // Sort stability\n\n\n    support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n    // Always assume duplicates if they aren't passed to the comparison function\n\n    support.detectDuplicates = !!hasDuplicate; // Initialize against the default document\n\n    setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n    // Detached nodes confoundingly follow *each other*\n\n    support.sortDetached = assert(function (el) {\n      // Should return 1, but returns 4 (following)\n      return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n    }); // Support: IE<8\n    // Prevent attribute/property \"interpolation\"\n    // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\n    if (!assert(function (el) {\n      el.innerHTML = \"<a href='#'></a>\";\n      return el.firstChild.getAttribute(\"href\") === \"#\";\n    })) {\n      addHandle(\"type|href|height|width\", function (elem, name, isXML) {\n        if (!isXML) {\n          return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n        }\n      });\n    } // Support: IE<9\n    // Use defaultValue in place of getAttribute(\"value\")\n\n\n    if (!support.attributes || !assert(function (el) {\n      el.innerHTML = \"<input/>\";\n      el.firstChild.setAttribute(\"value\", \"\");\n      return el.firstChild.getAttribute(\"value\") === \"\";\n    })) {\n      addHandle(\"value\", function (elem, _name, isXML) {\n        if (!isXML && elem.nodeName.toLowerCase() === \"input\") {\n          return elem.defaultValue;\n        }\n      });\n    } // Support: IE<9\n    // Use getAttributeNode to fetch booleans when getAttribute lies\n\n\n    if (!assert(function (el) {\n      return el.getAttribute(\"disabled\") == null;\n    })) {\n      addHandle(booleans, function (elem, name, isXML) {\n        var val;\n\n        if (!isXML) {\n          return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n        }\n      });\n    }\n\n    return Sizzle;\n  }(window);\n\n  jQuery.find = Sizzle;\n  jQuery.expr = Sizzle.selectors; // Deprecated\n\n  jQuery.expr[\":\"] = jQuery.expr.pseudos;\n  jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n  jQuery.text = Sizzle.getText;\n  jQuery.isXMLDoc = Sizzle.isXML;\n  jQuery.contains = Sizzle.contains;\n  jQuery.escapeSelector = Sizzle.escape;\n\n  var dir = function dir(elem, _dir, until) {\n    var matched = [],\n        truncate = until !== undefined;\n\n    while ((elem = elem[_dir]) && elem.nodeType !== 9) {\n      if (elem.nodeType === 1) {\n        if (truncate && jQuery(elem).is(until)) {\n          break;\n        }\n\n        matched.push(elem);\n      }\n    }\n\n    return matched;\n  };\n\n  var _siblings = function siblings(n, elem) {\n    var matched = [];\n\n    for (; n; n = n.nextSibling) {\n      if (n.nodeType === 1 && n !== elem) {\n        matched.push(n);\n      }\n    }\n\n    return matched;\n  };\n\n  var rneedsContext = jQuery.expr.match.needsContext;\n\n  function nodeName(elem, name) {\n    return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n  }\n\n  ;\n  var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i; // Implement the identical functionality for filter and not\n\n  function winnow(elements, qualifier, not) {\n    if (isFunction(qualifier)) {\n      return jQuery.grep(elements, function (elem, i) {\n        return !!qualifier.call(elem, i, elem) !== not;\n      });\n    } // Single element\n\n\n    if (qualifier.nodeType) {\n      return jQuery.grep(elements, function (elem) {\n        return elem === qualifier !== not;\n      });\n    } // Arraylike of elements (jQuery, arguments, Array)\n\n\n    if (typeof qualifier !== \"string\") {\n      return jQuery.grep(elements, function (elem) {\n        return indexOf.call(qualifier, elem) > -1 !== not;\n      });\n    } // Filtered directly for both simple and complex selectors\n\n\n    return jQuery.filter(qualifier, elements, not);\n  }\n\n  jQuery.filter = function (expr, elems, not) {\n    var elem = elems[0];\n\n    if (not) {\n      expr = \":not(\" + expr + \")\";\n    }\n\n    if (elems.length === 1 && elem.nodeType === 1) {\n      return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n    }\n\n    return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n      return elem.nodeType === 1;\n    }));\n  };\n\n  jQuery.fn.extend({\n    find: function find(selector) {\n      var i,\n          ret,\n          len = this.length,\n          self = this;\n\n      if (typeof selector !== \"string\") {\n        return this.pushStack(jQuery(selector).filter(function () {\n          for (i = 0; i < len; i++) {\n            if (jQuery.contains(self[i], this)) {\n              return true;\n            }\n          }\n        }));\n      }\n\n      ret = this.pushStack([]);\n\n      for (i = 0; i < len; i++) {\n        jQuery.find(selector, self[i], ret);\n      }\n\n      return len > 1 ? jQuery.uniqueSort(ret) : ret;\n    },\n    filter: function filter(selector) {\n      return this.pushStack(winnow(this, selector || [], false));\n    },\n    not: function not(selector) {\n      return this.pushStack(winnow(this, selector || [], true));\n    },\n    is: function is(selector) {\n      return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n      // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n      typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n    }\n  }); // Initialize a jQuery object\n  // A central reference to the root jQuery(document)\n\n  var rootjQuery,\n      // A simple way to check for HTML strings\n  // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n  // Strict HTML recognition (#11290: must start with <)\n  // Shortcut simple #id case for speed\n  rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n      init = jQuery.fn.init = function (selector, context, root) {\n    var match, elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\n    if (!selector) {\n      return this;\n    } // Method init() accepts an alternate rootjQuery\n    // so migrate can support jQuery.sub (gh-2101)\n\n\n    root = root || rootjQuery; // Handle HTML strings\n\n    if (typeof selector === \"string\") {\n      if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n        // Assume that strings that start and end with <> are HTML and skip the regex check\n        match = [null, selector, null];\n      } else {\n        match = rquickExpr.exec(selector);\n      } // Match html or make sure no context is specified for #id\n\n\n      if (match && (match[1] || !context)) {\n        // HANDLE: $(html) -> $(array)\n        if (match[1]) {\n          context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat\n          // Intentionally let the error be thrown if parseHTML is not present\n\n          jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)\n\n          if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n            for (match in context) {\n              // Properties of context are called as methods if possible\n              if (isFunction(this[match])) {\n                this[match](context[match]); // ...and otherwise set as attributes\n              } else {\n                this.attr(match, context[match]);\n              }\n            }\n          }\n\n          return this; // HANDLE: $(#id)\n        } else {\n          elem = document.getElementById(match[2]);\n\n          if (elem) {\n            // Inject the element directly into the jQuery object\n            this[0] = elem;\n            this.length = 1;\n          }\n\n          return this;\n        } // HANDLE: $(expr, $(...))\n\n      } else if (!context || context.jquery) {\n        return (context || root).find(selector); // HANDLE: $(expr, context)\n        // (which is just equivalent to: $(context).find(expr)\n      } else {\n        return this.constructor(context).find(selector);\n      } // HANDLE: $(DOMElement)\n\n    } else if (selector.nodeType) {\n      this[0] = selector;\n      this.length = 1;\n      return this; // HANDLE: $(function)\n      // Shortcut for document ready\n    } else if (isFunction(selector)) {\n      return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n      selector(jQuery);\n    }\n\n    return jQuery.makeArray(selector, this);\n  }; // Give the init function the jQuery prototype for later instantiation\n\n\n  init.prototype = jQuery.fn; // Initialize central reference\n\n  rootjQuery = jQuery(document);\n  var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n      // Methods guaranteed to produce a unique set when starting from a unique set\n  guaranteedUnique = {\n    children: true,\n    contents: true,\n    next: true,\n    prev: true\n  };\n  jQuery.fn.extend({\n    has: function has(target) {\n      var targets = jQuery(target, this),\n          l = targets.length;\n      return this.filter(function () {\n        var i = 0;\n\n        for (; i < l; i++) {\n          if (jQuery.contains(this, targets[i])) {\n            return true;\n          }\n        }\n      });\n    },\n    closest: function closest(selectors, context) {\n      var cur,\n          i = 0,\n          l = this.length,\n          matched = [],\n          targets = typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\n\n      if (!rneedsContext.test(selectors)) {\n        for (; i < l; i++) {\n          for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n            // Always skip document fragments\n            if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle\n            cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n              matched.push(cur);\n              break;\n            }\n          }\n        }\n      }\n\n      return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n    },\n    // Determine the position of an element within the set\n    index: function index(elem) {\n      // No argument, return index in parent\n      if (!elem) {\n        return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n      } // Index in selector\n\n\n      if (typeof elem === \"string\") {\n        return indexOf.call(jQuery(elem), this[0]);\n      } // Locate the position of the desired element\n\n\n      return indexOf.call(this, // If it receives a jQuery object, the first element is used\n      elem.jquery ? elem[0] : elem);\n    },\n    add: function add(selector, context) {\n      return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n    },\n    addBack: function addBack(selector) {\n      return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n    }\n  });\n\n  function sibling(cur, dir) {\n    while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n\n    return cur;\n  }\n\n  jQuery.each({\n    parent: function parent(elem) {\n      var parent = elem.parentNode;\n      return parent && parent.nodeType !== 11 ? parent : null;\n    },\n    parents: function parents(elem) {\n      return dir(elem, \"parentNode\");\n    },\n    parentsUntil: function parentsUntil(elem, _i, until) {\n      return dir(elem, \"parentNode\", until);\n    },\n    next: function next(elem) {\n      return sibling(elem, \"nextSibling\");\n    },\n    prev: function prev(elem) {\n      return sibling(elem, \"previousSibling\");\n    },\n    nextAll: function nextAll(elem) {\n      return dir(elem, \"nextSibling\");\n    },\n    prevAll: function prevAll(elem) {\n      return dir(elem, \"previousSibling\");\n    },\n    nextUntil: function nextUntil(elem, _i, until) {\n      return dir(elem, \"nextSibling\", until);\n    },\n    prevUntil: function prevUntil(elem, _i, until) {\n      return dir(elem, \"previousSibling\", until);\n    },\n    siblings: function siblings(elem) {\n      return _siblings((elem.parentNode || {}).firstChild, elem);\n    },\n    children: function children(elem) {\n      return _siblings(elem.firstChild);\n    },\n    contents: function contents(elem) {\n      if (elem.contentDocument != null && // Support: IE 11+\n      // <object> elements with no `data` attribute has an object\n      // `contentDocument` with a `null` prototype.\n      getProto(elem.contentDocument)) {\n        return elem.contentDocument;\n      } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n      // Treat the template element as a regular one in browsers that\n      // don't support it.\n\n\n      if (nodeName(elem, \"template\")) {\n        elem = elem.content || elem;\n      }\n\n      return jQuery.merge([], elem.childNodes);\n    }\n  }, function (name, fn) {\n    jQuery.fn[name] = function (until, selector) {\n      var matched = jQuery.map(this, fn, until);\n\n      if (name.slice(-5) !== \"Until\") {\n        selector = until;\n      }\n\n      if (selector && typeof selector === \"string\") {\n        matched = jQuery.filter(selector, matched);\n      }\n\n      if (this.length > 1) {\n        // Remove duplicates\n        if (!guaranteedUnique[name]) {\n          jQuery.uniqueSort(matched);\n        } // Reverse order for parents* and prev-derivatives\n\n\n        if (rparentsprev.test(name)) {\n          matched.reverse();\n        }\n      }\n\n      return this.pushStack(matched);\n    };\n  });\n  var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g; // Convert String-formatted options into Object-formatted ones\n\n  function createOptions(options) {\n    var object = {};\n    jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n      object[flag] = true;\n    });\n    return object;\n  }\n  /*\n   * Create a callback list using the following parameters:\n   *\n   *\toptions: an optional list of space-separated options that will change how\n   *\t\t\tthe callback list behaves or a more traditional option object\n   *\n   * By default a callback list will act like an event callback list and can be\n   * \"fired\" multiple times.\n   *\n   * Possible options:\n   *\n   *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n   *\n   *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n   *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n   *\t\t\t\t\tvalues (like a Deferred)\n   *\n   *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n   *\n   *\tstopOnFalse:\tinterrupt callings when a callback returns false\n   *\n   */\n\n\n  jQuery.Callbacks = function (options) {\n    // Convert options from String-formatted to Object-formatted if needed\n    // (we check in cache first)\n    options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n\n    var // Flag to know if list is currently firing\n    firing,\n        // Last fire value for non-forgettable lists\n    memory,\n        // Flag to know if list was already fired\n    _fired,\n        // Flag to prevent firing\n    _locked,\n        // Actual callback list\n    list = [],\n        // Queue of execution data for repeatable lists\n    queue = [],\n        // Index of currently firing callback (modified by add/remove as needed)\n    firingIndex = -1,\n        // Fire callbacks\n    fire = function fire() {\n      // Enforce single-firing\n      _locked = _locked || options.once; // Execute callbacks for all pending executions,\n      // respecting firingIndex overrides and runtime changes\n\n      _fired = firing = true;\n\n      for (; queue.length; firingIndex = -1) {\n        memory = queue.shift();\n\n        while (++firingIndex < list.length) {\n          // Run callback and check for early termination\n          if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n            // Jump to end and forget the data so .add doesn't re-fire\n            firingIndex = list.length;\n            memory = false;\n          }\n        }\n      } // Forget the data if we're done with it\n\n\n      if (!options.memory) {\n        memory = false;\n      }\n\n      firing = false; // Clean up if we're done firing for good\n\n      if (_locked) {\n        // Keep an empty list if we have data for future add calls\n        if (memory) {\n          list = []; // Otherwise, this object is spent\n        } else {\n          list = \"\";\n        }\n      }\n    },\n        // Actual Callbacks object\n    self = {\n      // Add a callback or a collection of callbacks to the list\n      add: function add() {\n        if (list) {\n          // If we have memory from a past run, we should fire after adding\n          if (memory && !firing) {\n            firingIndex = list.length - 1;\n            queue.push(memory);\n          }\n\n          (function add(args) {\n            jQuery.each(args, function (_, arg) {\n              if (isFunction(arg)) {\n                if (!options.unique || !self.has(arg)) {\n                  list.push(arg);\n                }\n              } else if (arg && arg.length && toType(arg) !== \"string\") {\n                // Inspect recursively\n                add(arg);\n              }\n            });\n          })(arguments);\n\n          if (memory && !firing) {\n            fire();\n          }\n        }\n\n        return this;\n      },\n      // Remove a callback from the list\n      remove: function remove() {\n        jQuery.each(arguments, function (_, arg) {\n          var index;\n\n          while ((index = jQuery.inArray(arg, list, index)) > -1) {\n            list.splice(index, 1); // Handle firing indexes\n\n            if (index <= firingIndex) {\n              firingIndex--;\n            }\n          }\n        });\n        return this;\n      },\n      // Check if a given callback is in the list.\n      // If no argument is given, return whether or not list has callbacks attached.\n      has: function has(fn) {\n        return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n      },\n      // Remove all callbacks from the list\n      empty: function empty() {\n        if (list) {\n          list = [];\n        }\n\n        return this;\n      },\n      // Disable .fire and .add\n      // Abort any current/pending executions\n      // Clear all callbacks and values\n      disable: function disable() {\n        _locked = queue = [];\n        list = memory = \"\";\n        return this;\n      },\n      disabled: function disabled() {\n        return !list;\n      },\n      // Disable .fire\n      // Also disable .add unless we have memory (since it would have no effect)\n      // Abort any pending executions\n      lock: function lock() {\n        _locked = queue = [];\n\n        if (!memory && !firing) {\n          list = memory = \"\";\n        }\n\n        return this;\n      },\n      locked: function locked() {\n        return !!_locked;\n      },\n      // Call all callbacks with the given context and arguments\n      fireWith: function fireWith(context, args) {\n        if (!_locked) {\n          args = args || [];\n          args = [context, args.slice ? args.slice() : args];\n          queue.push(args);\n\n          if (!firing) {\n            fire();\n          }\n        }\n\n        return this;\n      },\n      // Call all the callbacks with the given arguments\n      fire: function fire() {\n        self.fireWith(this, arguments);\n        return this;\n      },\n      // To know if the callbacks have already been called at least once\n      fired: function fired() {\n        return !!_fired;\n      }\n    };\n\n    return self;\n  };\n\n  function Identity(v) {\n    return v;\n  }\n\n  function Thrower(ex) {\n    throw ex;\n  }\n\n  function adoptValue(value, resolve, reject, noValue) {\n    var method;\n\n    try {\n      // Check for promise aspect first to privilege synchronous behavior\n      if (value && isFunction(method = value.promise)) {\n        method.call(value).done(resolve).fail(reject); // Other thenables\n      } else if (value && isFunction(method = value.then)) {\n        method.call(value, resolve, reject); // Other non-thenables\n      } else {\n        // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n        // * false: [ value ].slice( 0 ) => resolve( value )\n        // * true: [ value ].slice( 1 ) => resolve()\n        resolve.apply(undefined, [value].slice(noValue));\n      } // For Promises/A+, convert exceptions into rejections\n      // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n      // Deferred#then to conditionally suppress rejection.\n\n    } catch (value) {\n      // Support: Android 4.0 only\n      // Strict mode functions invoked without .call/.apply get global-object context\n      reject.apply(undefined, [value]);\n    }\n  }\n\n  jQuery.extend({\n    Deferred: function Deferred(func) {\n      var tuples = [// action, add listener, callbacks,\n      // ... .then handlers, argument index, [final state]\n      [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n          _state = \"pending\",\n          _promise = {\n        state: function state() {\n          return _state;\n        },\n        always: function always() {\n          deferred.done(arguments).fail(arguments);\n          return this;\n        },\n        \"catch\": function _catch(fn) {\n          return _promise.then(null, fn);\n        },\n        // Keep pipe for back-compat\n        pipe: function pipe()\n        /* fnDone, fnFail, fnProgress */\n        {\n          var fns = arguments;\n          return jQuery.Deferred(function (newDefer) {\n            jQuery.each(tuples, function (_i, tuple) {\n              // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n              var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n              // deferred.done(function() { bind to newDefer or newDefer.resolve })\n              // deferred.fail(function() { bind to newDefer or newDefer.reject })\n\n              deferred[tuple[1]](function () {\n                var returned = fn && fn.apply(this, arguments);\n\n                if (returned && isFunction(returned.promise)) {\n                  returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n                } else {\n                  newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n                }\n              });\n            });\n            fns = null;\n          }).promise();\n        },\n        then: function then(onFulfilled, onRejected, onProgress) {\n          var maxDepth = 0;\n\n          function resolve(depth, deferred, handler, special) {\n            return function () {\n              var that = this,\n                  args = arguments,\n                  mightThrow = function mightThrow() {\n                var returned, then; // Support: Promises/A+ section 2.3.3.3.3\n                // https://promisesaplus.com/#point-59\n                // Ignore double-resolution attempts\n\n                if (depth < maxDepth) {\n                  return;\n                }\n\n                returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1\n                // https://promisesaplus.com/#point-48\n\n                if (returned === deferred.promise()) {\n                  throw new TypeError(\"Thenable self-resolution\");\n                } // Support: Promises/A+ sections 2.3.3.1, 3.5\n                // https://promisesaplus.com/#point-54\n                // https://promisesaplus.com/#point-75\n                // Retrieve `then` only once\n\n\n                then = returned && ( // Support: Promises/A+ section 2.3.4\n                // https://promisesaplus.com/#point-64\n                // Only check objects and functions for thenability\n                _typeof(returned) === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\n\n                if (isFunction(then)) {\n                  // Special processors (notify) just wait for resolution\n                  if (special) {\n                    then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress\n                  } else {\n                    // ...and disregard older resolution values\n                    maxDepth++;\n                    then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n                  } // Handle all other returned values\n\n                } else {\n                  // Only substitute handlers pass on context\n                  // and multiple values (non-spec behavior)\n                  if (handler !== Identity) {\n                    that = undefined;\n                    args = [returned];\n                  } // Process the value(s)\n                  // Default process is resolve\n\n\n                  (special || deferred.resolveWith)(that, args);\n                }\n              },\n                  // Only normal processors (resolve) catch and reject exceptions\n              process = special ? mightThrow : function () {\n                try {\n                  mightThrow();\n                } catch (e) {\n                  if (jQuery.Deferred.exceptionHook) {\n                    jQuery.Deferred.exceptionHook(e, process.stackTrace);\n                  } // Support: Promises/A+ section 2.3.3.3.4.1\n                  // https://promisesaplus.com/#point-61\n                  // Ignore post-resolution exceptions\n\n\n                  if (depth + 1 >= maxDepth) {\n                    // Only substitute handlers pass on context\n                    // and multiple values (non-spec behavior)\n                    if (handler !== Thrower) {\n                      that = undefined;\n                      args = [e];\n                    }\n\n                    deferred.rejectWith(that, args);\n                  }\n                }\n              }; // Support: Promises/A+ section 2.3.3.3.1\n              // https://promisesaplus.com/#point-57\n              // Re-resolve promises immediately to dodge false rejection from\n              // subsequent errors\n\n\n              if (depth) {\n                process();\n              } else {\n                // Call an optional hook to record the stack, in case of exception\n                // since it's otherwise lost when execution goes async\n                if (jQuery.Deferred.getStackHook) {\n                  process.stackTrace = jQuery.Deferred.getStackHook();\n                }\n\n                window.setTimeout(process);\n              }\n            };\n          }\n\n          return jQuery.Deferred(function (newDefer) {\n            // progress_handlers.add( ... )\n            tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )\n\n            tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )\n\n            tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n          }).promise();\n        },\n        // Get a promise for this deferred\n        // If obj is provided, the promise aspect is added to the object\n        promise: function promise(obj) {\n          return obj != null ? jQuery.extend(obj, _promise) : _promise;\n        }\n      },\n          deferred = {}; // Add list-specific methods\n\n      jQuery.each(tuples, function (i, tuple) {\n        var list = tuple[2],\n            stateString = tuple[5]; // promise.progress = list.add\n        // promise.done = list.add\n        // promise.fail = list.add\n\n        _promise[tuple[1]] = list.add; // Handle state\n\n        if (stateString) {\n          list.add(function () {\n            // state = \"resolved\" (i.e., fulfilled)\n            // state = \"rejected\"\n            _state = stateString;\n          }, // rejected_callbacks.disable\n          // fulfilled_callbacks.disable\n          tuples[3 - i][2].disable, // rejected_handlers.disable\n          // fulfilled_handlers.disable\n          tuples[3 - i][3].disable, // progress_callbacks.lock\n          tuples[0][2].lock, // progress_handlers.lock\n          tuples[0][3].lock);\n        } // progress_handlers.fire\n        // fulfilled_handlers.fire\n        // rejected_handlers.fire\n\n\n        list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n        // deferred.resolve = function() { deferred.resolveWith(...) }\n        // deferred.reject = function() { deferred.rejectWith(...) }\n\n        deferred[tuple[0]] = function () {\n          deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n          return this;\n        }; // deferred.notifyWith = list.fireWith\n        // deferred.resolveWith = list.fireWith\n        // deferred.rejectWith = list.fireWith\n\n\n        deferred[tuple[0] + \"With\"] = list.fireWith;\n      }); // Make the deferred a promise\n\n      _promise.promise(deferred); // Call given func if any\n\n\n      if (func) {\n        func.call(deferred, deferred);\n      } // All done!\n\n\n      return deferred;\n    },\n    // Deferred helper\n    when: function when(singleValue) {\n      var // count of uncompleted subordinates\n      remaining = arguments.length,\n          // count of unprocessed arguments\n      i = remaining,\n          // subordinate fulfillment data\n      resolveContexts = Array(i),\n          resolveValues = _slice.call(arguments),\n          // the master Deferred\n      master = jQuery.Deferred(),\n          // subordinate callback factory\n      updateFunc = function updateFunc(i) {\n        return function (value) {\n          resolveContexts[i] = this;\n          resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;\n\n          if (! --remaining) {\n            master.resolveWith(resolveContexts, resolveValues);\n          }\n        };\n      }; // Single- and empty arguments are adopted like Promise.resolve\n\n\n      if (remaining <= 1) {\n        adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\n\n        if (master.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n          return master.then();\n        }\n      } // Multiple arguments are aggregated like Promise.all array elements\n\n\n      while (i--) {\n        adoptValue(resolveValues[i], updateFunc(i), master.reject);\n      }\n\n      return master.promise();\n    }\n  }); // These usually indicate a programmer mistake during development,\n  // warn about them ASAP rather than swallowing them by default.\n\n  var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n  jQuery.Deferred.exceptionHook = function (error, stack) {\n    // Support: IE 8 - 9 only\n    // Console exists when dev tools are open, which can happen at any time\n    if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n      window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n    }\n  };\n\n  jQuery.readyException = function (error) {\n    window.setTimeout(function () {\n      throw error;\n    });\n  }; // The deferred used on DOM ready\n\n\n  var readyList = jQuery.Deferred();\n\n  jQuery.fn.ready = function (fn) {\n    readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n    // happens at the time of error handling instead of callback\n    // registration.\n    [\"catch\"](function (error) {\n      jQuery.readyException(error);\n    });\n    return this;\n  };\n\n  jQuery.extend({\n    // Is the DOM ready to be used? Set to true once it occurs.\n    isReady: false,\n    // A counter to track how many items to wait for before\n    // the ready event fires. See #6781\n    readyWait: 1,\n    // Handle when the DOM is ready\n    ready: function ready(wait) {\n      // Abort if there are pending holds or we're already ready\n      if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n        return;\n      } // Remember that the DOM is ready\n\n\n      jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\n\n      if (wait !== true && --jQuery.readyWait > 0) {\n        return;\n      } // If there are functions bound, to execute\n\n\n      readyList.resolveWith(document, [jQuery]);\n    }\n  });\n  jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\n\n  function completed() {\n    document.removeEventListener(\"DOMContentLoaded\", completed);\n    window.removeEventListener(\"load\", completed);\n    jQuery.ready();\n  } // Catch cases where $(document).ready() is called\n  // after the browser event has already occurred.\n  // Support: IE <=9 - 10 only\n  // Older IE sometimes signals \"interactive\" too soon\n\n\n  if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n    // Handle it asynchronously to allow scripts the opportunity to delay ready\n    window.setTimeout(jQuery.ready);\n  } else {\n    // Use the handy event callback\n    document.addEventListener(\"DOMContentLoaded\", completed); // A fallback to window.onload, that will always work\n\n    window.addEventListener(\"load\", completed);\n  } // Multifunctional method to get and set values of a collection\n  // The value/s can optionally be executed if it's a function\n\n\n  var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n    var i = 0,\n        len = elems.length,\n        bulk = key == null; // Sets many values\n\n    if (toType(key) === \"object\") {\n      chainable = true;\n\n      for (i in key) {\n        access(elems, fn, i, key[i], true, emptyGet, raw);\n      } // Sets one value\n\n    } else if (value !== undefined) {\n      chainable = true;\n\n      if (!isFunction(value)) {\n        raw = true;\n      }\n\n      if (bulk) {\n        // Bulk operations run against the entire set\n        if (raw) {\n          fn.call(elems, value);\n          fn = null; // ...except when executing function values\n        } else {\n          bulk = fn;\n\n          fn = function fn(elem, _key, value) {\n            return bulk.call(jQuery(elem), value);\n          };\n        }\n      }\n\n      if (fn) {\n        for (; i < len; i++) {\n          fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n        }\n      }\n    }\n\n    if (chainable) {\n      return elems;\n    } // Gets\n\n\n    if (bulk) {\n      return fn.call(elems);\n    }\n\n    return len ? fn(elems[0], key) : emptyGet;\n  }; // Matches dashed string for camelizing\n\n\n  var rmsPrefix = /^-ms-/,\n      rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()\n\n  function fcamelCase(_all, letter) {\n    return letter.toUpperCase();\n  } // Convert dashed to camelCase; used by the css and data modules\n  // Support: IE <=9 - 11, Edge 12 - 15\n  // Microsoft forgot to hump their vendor prefix (#9572)\n\n\n  function camelCase(string) {\n    return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n  }\n\n  var acceptData = function acceptData(owner) {\n    // Accepts only:\n    //  - Node\n    //    - Node.ELEMENT_NODE\n    //    - Node.DOCUMENT_NODE\n    //  - Object\n    //    - Any\n    return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n  };\n\n  function Data() {\n    this.expando = jQuery.expando + Data.uid++;\n  }\n\n  Data.uid = 1;\n  Data.prototype = {\n    cache: function cache(owner) {\n      // Check if the owner object already has a cache\n      var value = owner[this.expando]; // If not, create one\n\n      if (!value) {\n        value = {}; // We can accept data for non-element nodes in modern browsers,\n        // but we should not, see #8335.\n        // Always return an empty object.\n\n        if (acceptData(owner)) {\n          // If it is a node unlikely to be stringify-ed or looped over\n          // use plain assignment\n          if (owner.nodeType) {\n            owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n            // configurable must be true to allow the property to be\n            // deleted when data is removed\n          } else {\n            Object.defineProperty(owner, this.expando, {\n              value: value,\n              configurable: true\n            });\n          }\n        }\n      }\n\n      return value;\n    },\n    set: function set(owner, data, value) {\n      var prop,\n          cache = this.cache(owner); // Handle: [ owner, key, value ] args\n      // Always use camelCase key (gh-2257)\n\n      if (typeof data === \"string\") {\n        cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n      } else {\n        // Copy the properties one-by-one to the cache object\n        for (prop in data) {\n          cache[camelCase(prop)] = data[prop];\n        }\n      }\n\n      return cache;\n    },\n    get: function get(owner, key) {\n      return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n      owner[this.expando] && owner[this.expando][camelCase(key)];\n    },\n    access: function access(owner, key, value) {\n      // In cases where either:\n      //\n      //   1. No key was specified\n      //   2. A string key was specified, but no value provided\n      //\n      // Take the \"read\" path and allow the get method to determine\n      // which value to return, respectively either:\n      //\n      //   1. The entire cache object\n      //   2. The data stored at the key\n      //\n      if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n        return this.get(owner, key);\n      } // When the key is not a string, or both a key and value\n      // are specified, set or extend (existing objects) with either:\n      //\n      //   1. An object of properties\n      //   2. A key and value\n      //\n\n\n      this.set(owner, key, value); // Since the \"set\" path can have two possible entry points\n      // return the expected data based on which path was taken[*]\n\n      return value !== undefined ? value : key;\n    },\n    remove: function remove(owner, key) {\n      var i,\n          cache = owner[this.expando];\n\n      if (cache === undefined) {\n        return;\n      }\n\n      if (key !== undefined) {\n        // Support array or space separated string of keys\n        if (Array.isArray(key)) {\n          // If key is an array of keys...\n          // We always set camelCase keys, so remove that.\n          key = key.map(camelCase);\n        } else {\n          key = camelCase(key); // If a key with the spaces exists, use it.\n          // Otherwise, create an array by matching non-whitespace\n\n          key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n        }\n\n        i = key.length;\n\n        while (i--) {\n          delete cache[key[i]];\n        }\n      } // Remove the expando if there's no more data\n\n\n      if (key === undefined || jQuery.isEmptyObject(cache)) {\n        // Support: Chrome <=35 - 45\n        // Webkit & Blink performance suffers when deleting properties\n        // from DOM nodes, so set to undefined instead\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n        if (owner.nodeType) {\n          owner[this.expando] = undefined;\n        } else {\n          delete owner[this.expando];\n        }\n      }\n    },\n    hasData: function hasData(owner) {\n      var cache = owner[this.expando];\n      return cache !== undefined && !jQuery.isEmptyObject(cache);\n    }\n  };\n  var dataPriv = new Data();\n  var dataUser = new Data(); //\tImplementation Summary\n  //\n  //\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n  //\t2. Improve the module's maintainability by reducing the storage\n  //\t\tpaths to a single mechanism.\n  //\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n  //\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n  //\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n  //\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n  var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n      rmultiDash = /[A-Z]/g;\n\n  function getData(data) {\n    if (data === \"true\") {\n      return true;\n    }\n\n    if (data === \"false\") {\n      return false;\n    }\n\n    if (data === \"null\") {\n      return null;\n    } // Only convert to a number if it doesn't change the string\n\n\n    if (data === +data + \"\") {\n      return +data;\n    }\n\n    if (rbrace.test(data)) {\n      return JSON.parse(data);\n    }\n\n    return data;\n  }\n\n  function dataAttr(elem, key, data) {\n    var name; // If nothing was found internally, try to fetch any\n    // data from the HTML5 data-* attribute\n\n    if (data === undefined && elem.nodeType === 1) {\n      name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n      data = elem.getAttribute(name);\n\n      if (typeof data === \"string\") {\n        try {\n          data = getData(data);\n        } catch (e) {} // Make sure we set the data so it isn't changed later\n\n\n        dataUser.set(elem, key, data);\n      } else {\n        data = undefined;\n      }\n    }\n\n    return data;\n  }\n\n  jQuery.extend({\n    hasData: function hasData(elem) {\n      return dataUser.hasData(elem) || dataPriv.hasData(elem);\n    },\n    data: function data(elem, name, _data) {\n      return dataUser.access(elem, name, _data);\n    },\n    removeData: function removeData(elem, name) {\n      dataUser.remove(elem, name);\n    },\n    // TODO: Now that all calls to _data and _removeData have been replaced\n    // with direct calls to dataPriv methods, these can be deprecated.\n    _data: function _data(elem, name, data) {\n      return dataPriv.access(elem, name, data);\n    },\n    _removeData: function _removeData(elem, name) {\n      dataPriv.remove(elem, name);\n    }\n  });\n  jQuery.fn.extend({\n    data: function data(key, value) {\n      var i,\n          name,\n          data,\n          elem = this[0],\n          attrs = elem && elem.attributes; // Gets all values\n\n      if (key === undefined) {\n        if (this.length) {\n          data = dataUser.get(elem);\n\n          if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n            i = attrs.length;\n\n            while (i--) {\n              // Support: IE 11 only\n              // The attrs elements can be null (#14894)\n              if (attrs[i]) {\n                name = attrs[i].name;\n\n                if (name.indexOf(\"data-\") === 0) {\n                  name = camelCase(name.slice(5));\n                  dataAttr(elem, name, data[name]);\n                }\n              }\n            }\n\n            dataPriv.set(elem, \"hasDataAttrs\", true);\n          }\n        }\n\n        return data;\n      } // Sets multiple values\n\n\n      if (_typeof(key) === \"object\") {\n        return this.each(function () {\n          dataUser.set(this, key);\n        });\n      }\n\n      return access(this, function (value) {\n        var data; // The calling jQuery object (element matches) is not empty\n        // (and therefore has an element appears at this[ 0 ]) and the\n        // `value` parameter was not undefined. An empty jQuery object\n        // will result in `undefined` for elem = this[ 0 ] which will\n        // throw an exception if an attempt to read a data cache is made.\n\n        if (elem && value === undefined) {\n          // Attempt to get data from the cache\n          // The key will always be camelCased in Data\n          data = dataUser.get(elem, key);\n\n          if (data !== undefined) {\n            return data;\n          } // Attempt to \"discover\" the data in\n          // HTML5 custom data-* attrs\n\n\n          data = dataAttr(elem, key);\n\n          if (data !== undefined) {\n            return data;\n          } // We tried really hard, but the data doesn't exist.\n\n\n          return;\n        } // Set the data...\n\n\n        this.each(function () {\n          // We always store the camelCased key\n          dataUser.set(this, key, value);\n        });\n      }, null, value, arguments.length > 1, null, true);\n    },\n    removeData: function removeData(key) {\n      return this.each(function () {\n        dataUser.remove(this, key);\n      });\n    }\n  });\n  jQuery.extend({\n    queue: function queue(elem, type, data) {\n      var queue;\n\n      if (elem) {\n        type = (type || \"fx\") + \"queue\";\n        queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup\n\n        if (data) {\n          if (!queue || Array.isArray(data)) {\n            queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n          } else {\n            queue.push(data);\n          }\n        }\n\n        return queue || [];\n      }\n    },\n    dequeue: function dequeue(elem, type) {\n      type = type || \"fx\";\n\n      var queue = jQuery.queue(elem, type),\n          startLength = queue.length,\n          fn = queue.shift(),\n          hooks = jQuery._queueHooks(elem, type),\n          next = function next() {\n        jQuery.dequeue(elem, type);\n      }; // If the fx queue is dequeued, always remove the progress sentinel\n\n\n      if (fn === \"inprogress\") {\n        fn = queue.shift();\n        startLength--;\n      }\n\n      if (fn) {\n        // Add a progress sentinel to prevent the fx queue from being\n        // automatically dequeued\n        if (type === \"fx\") {\n          queue.unshift(\"inprogress\");\n        } // Clear up the last queue stop function\n\n\n        delete hooks.stop;\n        fn.call(elem, next, hooks);\n      }\n\n      if (!startLength && hooks) {\n        hooks.empty.fire();\n      }\n    },\n    // Not public - generate a queueHooks object, or return the current one\n    _queueHooks: function _queueHooks(elem, type) {\n      var key = type + \"queueHooks\";\n      return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n        empty: jQuery.Callbacks(\"once memory\").add(function () {\n          dataPriv.remove(elem, [type + \"queue\", key]);\n        })\n      });\n    }\n  });\n  jQuery.fn.extend({\n    queue: function queue(type, data) {\n      var setter = 2;\n\n      if (typeof type !== \"string\") {\n        data = type;\n        type = \"fx\";\n        setter--;\n      }\n\n      if (arguments.length < setter) {\n        return jQuery.queue(this[0], type);\n      }\n\n      return data === undefined ? this : this.each(function () {\n        var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue\n\n        jQuery._queueHooks(this, type);\n\n        if (type === \"fx\" && queue[0] !== \"inprogress\") {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    dequeue: function dequeue(type) {\n      return this.each(function () {\n        jQuery.dequeue(this, type);\n      });\n    },\n    clearQueue: function clearQueue(type) {\n      return this.queue(type || \"fx\", []);\n    },\n    // Get a promise resolved when queues of a certain type\n    // are emptied (fx is the type by default)\n    promise: function promise(type, obj) {\n      var tmp,\n          count = 1,\n          defer = jQuery.Deferred(),\n          elements = this,\n          i = this.length,\n          resolve = function resolve() {\n        if (! --count) {\n          defer.resolveWith(elements, [elements]);\n        }\n      };\n\n      if (typeof type !== \"string\") {\n        obj = type;\n        type = undefined;\n      }\n\n      type = type || \"fx\";\n\n      while (i--) {\n        tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\n        if (tmp && tmp.empty) {\n          count++;\n          tmp.empty.add(resolve);\n        }\n      }\n\n      resolve();\n      return defer.promise(obj);\n    }\n  });\n  var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n  var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n  var cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n  var documentElement = document.documentElement;\n\n  var isAttached = function isAttached(elem) {\n    return jQuery.contains(elem.ownerDocument, elem);\n  },\n      composed = {\n    composed: true\n  }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n  // Check attachment across shadow DOM boundaries when possible (gh-3504)\n  // Support: iOS 10.0-10.2 only\n  // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n  // leading to errors. We need to check for `getRootNode`.\n\n\n  if (documentElement.getRootNode) {\n    isAttached = function isAttached(elem) {\n      return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n    };\n  }\n\n  var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {\n    // isHiddenWithinTree might be called from jQuery#filter function;\n    // in that case, element will be second argument\n    elem = el || elem; // Inline style trumps all\n\n    return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n    // Support: Firefox <=43 - 45\n    // Disconnected elements can have computed display: none, so first confirm that elem is\n    // in the document.\n    isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n  };\n\n  function adjustCSS(elem, prop, valueParts, tween) {\n    var adjusted,\n        scale,\n        maxIterations = 20,\n        currentValue = tween ? function () {\n      return tween.cur();\n    } : function () {\n      return jQuery.css(elem, prop, \"\");\n    },\n        initial = currentValue(),\n        unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n        // Starting value computation is required for potential unit mismatches\n    initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n\n    if (initialInUnit && initialInUnit[3] !== unit) {\n      // Support: Firefox <=54\n      // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n      initial = initial / 2; // Trust units reported by jQuery.css\n\n      unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point\n\n      initialInUnit = +initial || 1;\n\n      while (maxIterations--) {\n        // Evaluate and update our best guess (doubling guesses that zero out).\n        // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n        jQuery.style(elem, prop, initialInUnit + unit);\n\n        if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n          maxIterations = 0;\n        }\n\n        initialInUnit = initialInUnit / scale;\n      }\n\n      initialInUnit = initialInUnit * 2;\n      jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on\n\n      valueParts = valueParts || [];\n    }\n\n    if (valueParts) {\n      initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\n\n      adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n\n      if (tween) {\n        tween.unit = unit;\n        tween.start = initialInUnit;\n        tween.end = adjusted;\n      }\n    }\n\n    return adjusted;\n  }\n\n  var defaultDisplayMap = {};\n\n  function getDefaultDisplay(elem) {\n    var temp,\n        doc = elem.ownerDocument,\n        nodeName = elem.nodeName,\n        display = defaultDisplayMap[nodeName];\n\n    if (display) {\n      return display;\n    }\n\n    temp = doc.body.appendChild(doc.createElement(nodeName));\n    display = jQuery.css(temp, \"display\");\n    temp.parentNode.removeChild(temp);\n\n    if (display === \"none\") {\n      display = \"block\";\n    }\n\n    defaultDisplayMap[nodeName] = display;\n    return display;\n  }\n\n  function showHide(elements, show) {\n    var display,\n        elem,\n        values = [],\n        index = 0,\n        length = elements.length; // Determine new display value for elements that need to change\n\n    for (; index < length; index++) {\n      elem = elements[index];\n\n      if (!elem.style) {\n        continue;\n      }\n\n      display = elem.style.display;\n\n      if (show) {\n        // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n        // check is required in this first loop unless we have a nonempty display value (either\n        // inline or about-to-be-restored)\n        if (display === \"none\") {\n          values[index] = dataPriv.get(elem, \"display\") || null;\n\n          if (!values[index]) {\n            elem.style.display = \"\";\n          }\n        }\n\n        if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n          values[index] = getDefaultDisplay(elem);\n        }\n      } else {\n        if (display !== \"none\") {\n          values[index] = \"none\"; // Remember what we're overwriting\n\n          dataPriv.set(elem, \"display\", display);\n        }\n      }\n    } // Set the display of the elements in a second loop to avoid constant reflow\n\n\n    for (index = 0; index < length; index++) {\n      if (values[index] != null) {\n        elements[index].style.display = values[index];\n      }\n    }\n\n    return elements;\n  }\n\n  jQuery.fn.extend({\n    show: function show() {\n      return showHide(this, true);\n    },\n    hide: function hide() {\n      return showHide(this);\n    },\n    toggle: function toggle(state) {\n      if (typeof state === \"boolean\") {\n        return state ? this.show() : this.hide();\n      }\n\n      return this.each(function () {\n        if (isHiddenWithinTree(this)) {\n          jQuery(this).show();\n        } else {\n          jQuery(this).hide();\n        }\n      });\n    }\n  });\n  var rcheckableType = /^(?:checkbox|radio)$/i;\n  var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n  var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n  (function () {\n    var fragment = document.createDocumentFragment(),\n        div = fragment.appendChild(document.createElement(\"div\")),\n        input = document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n    // Check state lost if the name is set (#11217)\n    // Support: Windows Web Apps (WWA)\n    // `name` and `type` must use .setAttribute for WWA (#14901)\n\n    input.setAttribute(\"type\", \"radio\");\n    input.setAttribute(\"checked\", \"checked\");\n    input.setAttribute(\"name\", \"t\");\n    div.appendChild(input); // Support: Android <=4.1 only\n    // Older WebKit doesn't clone checked state correctly in fragments\n\n    support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n    // Make sure textarea (and checkbox) defaultValue is properly cloned\n\n    div.innerHTML = \"<textarea>x</textarea>\";\n    support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue; // Support: IE <=9 only\n    // IE <=9 replaces <option> tags with their contents when inserted outside of\n    // the select element.\n\n    div.innerHTML = \"<option></option>\";\n    support.option = !!div.lastChild;\n  })(); // We have to close these tags to support XHTML (#13200)\n\n\n  var wrapMap = {\n    // XHTML parsers do not magically insert elements in the\n    // same way that tag soup parsers do. So we cannot shorten\n    // this by omitting <tbody> or other required elements.\n    thead: [1, \"<table>\", \"</table>\"],\n    col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n    tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n    td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n    _default: [0, \"\", \"\"]\n  };\n  wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n  wrapMap.th = wrapMap.td; // Support: IE <=9 only\n\n  if (!support.option) {\n    wrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n  }\n\n  function getAll(context, tag) {\n    // Support: IE <=9 - 11 only\n    // Use typeof to avoid zero-argument method invocation on host objects (#15151)\n    var ret;\n\n    if (typeof context.getElementsByTagName !== \"undefined\") {\n      ret = context.getElementsByTagName(tag || \"*\");\n    } else if (typeof context.querySelectorAll !== \"undefined\") {\n      ret = context.querySelectorAll(tag || \"*\");\n    } else {\n      ret = [];\n    }\n\n    if (tag === undefined || tag && nodeName(context, tag)) {\n      return jQuery.merge([context], ret);\n    }\n\n    return ret;\n  } // Mark scripts as having already been evaluated\n\n\n  function setGlobalEval(elems, refElements) {\n    var i = 0,\n        l = elems.length;\n\n    for (; i < l; i++) {\n      dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n    }\n  }\n\n  var rhtml = /<|&#?\\w+;/;\n\n  function buildFragment(elems, context, scripts, selection, ignored) {\n    var elem,\n        tmp,\n        tag,\n        wrap,\n        attached,\n        j,\n        fragment = context.createDocumentFragment(),\n        nodes = [],\n        i = 0,\n        l = elems.length;\n\n    for (; i < l; i++) {\n      elem = elems[i];\n\n      if (elem || elem === 0) {\n        // Add nodes directly\n        if (toType(elem) === \"object\") {\n          // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n          jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node\n        } else if (!rhtml.test(elem)) {\n          nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n        } else {\n          tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\n\n          tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n          wrap = wrapMap[tag] || wrapMap._default;\n          tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\n\n          j = wrap[0];\n\n          while (j--) {\n            tmp = tmp.lastChild;\n          } // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n\n\n          jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container\n\n          tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)\n\n          tmp.textContent = \"\";\n        }\n      }\n    } // Remove wrapper from fragment\n\n\n    fragment.textContent = \"\";\n    i = 0;\n\n    while (elem = nodes[i++]) {\n      // Skip elements already in the context collection (trac-4087)\n      if (selection && jQuery.inArray(elem, selection) > -1) {\n        if (ignored) {\n          ignored.push(elem);\n        }\n\n        continue;\n      }\n\n      attached = isAttached(elem); // Append to fragment\n\n      tmp = getAll(fragment.appendChild(elem), \"script\"); // Preserve script evaluation history\n\n      if (attached) {\n        setGlobalEval(tmp);\n      } // Capture executables\n\n\n      if (scripts) {\n        j = 0;\n\n        while (elem = tmp[j++]) {\n          if (rscriptType.test(elem.type || \"\")) {\n            scripts.push(elem);\n          }\n        }\n      }\n    }\n\n    return fragment;\n  }\n\n  var rkeyEvent = /^key/,\n      rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n      rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n  function returnTrue() {\n    return true;\n  }\n\n  function returnFalse() {\n    return false;\n  } // Support: IE <=9 - 11+\n  // focus() and blur() are asynchronous, except when they are no-op.\n  // So expect focus to be synchronous when the element is already active,\n  // and blur to be synchronous when the element is not already active.\n  // (focus and blur are always synchronous in other supported browsers,\n  // this just defines when we can count on it).\n\n\n  function expectSync(elem, type) {\n    return elem === safeActiveElement() === (type === \"focus\");\n  } // Support: IE <=9 only\n  // Accessing document.activeElement can throw unexpectedly\n  // https://bugs.jquery.com/ticket/13393\n\n\n  function safeActiveElement() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n  }\n\n  function _on(elem, types, selector, data, fn, one) {\n    var origFn, type; // Types can be a map of types/handlers\n\n    if (_typeof(types) === \"object\") {\n      // ( types-Object, selector, data )\n      if (typeof selector !== \"string\") {\n        // ( types-Object, data )\n        data = data || selector;\n        selector = undefined;\n      }\n\n      for (type in types) {\n        _on(elem, type, selector, data, types[type], one);\n      }\n\n      return elem;\n    }\n\n    if (data == null && fn == null) {\n      // ( types, fn )\n      fn = selector;\n      data = selector = undefined;\n    } else if (fn == null) {\n      if (typeof selector === \"string\") {\n        // ( types, selector, fn )\n        fn = data;\n        data = undefined;\n      } else {\n        // ( types, data, fn )\n        fn = data;\n        data = selector;\n        selector = undefined;\n      }\n    }\n\n    if (fn === false) {\n      fn = returnFalse;\n    } else if (!fn) {\n      return elem;\n    }\n\n    if (one === 1) {\n      origFn = fn;\n\n      fn = function fn(event) {\n        // Can use an empty set, since event contains the info\n        jQuery().off(event);\n        return origFn.apply(this, arguments);\n      }; // Use same guid so caller can remove using origFn\n\n\n      fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n    }\n\n    return elem.each(function () {\n      jQuery.event.add(this, types, fn, data, selector);\n    });\n  }\n  /*\n   * Helper functions for managing events -- not part of the public interface.\n   * Props to Dean Edwards' addEvent library for many of the ideas.\n   */\n\n\n  jQuery.event = {\n    global: {},\n    add: function add(elem, types, handler, data, selector) {\n      var handleObjIn,\n          eventHandle,\n          tmp,\n          events,\n          t,\n          handleObj,\n          special,\n          handlers,\n          type,\n          namespaces,\n          origType,\n          elemData = dataPriv.get(elem); // Only attach events to objects that accept data\n\n      if (!acceptData(elem)) {\n        return;\n      } // Caller can pass in an object of custom data in lieu of the handler\n\n\n      if (handler.handler) {\n        handleObjIn = handler;\n        handler = handleObjIn.handler;\n        selector = handleObjIn.selector;\n      } // Ensure that invalid selectors throw exceptions at attach time\n      // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\n\n      if (selector) {\n        jQuery.find.matchesSelector(documentElement, selector);\n      } // Make sure that the handler has a unique ID, used to find/remove it later\n\n\n      if (!handler.guid) {\n        handler.guid = jQuery.guid++;\n      } // Init the element's event structure and main handler, if this is the first\n\n\n      if (!(events = elemData.events)) {\n        events = elemData.events = Object.create(null);\n      }\n\n      if (!(eventHandle = elemData.handle)) {\n        eventHandle = elemData.handle = function (e) {\n          // Discard the second event of a jQuery.event.trigger() and\n          // when an event is called after a page has unloaded\n          return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n        };\n      } // Handle multiple events separated by a space\n\n\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\n\n        if (!type) {\n          continue;\n        } // If event changes its type, use the special event handlers for the changed type\n\n\n        special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\n\n        type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type\n\n        special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\n\n        handleObj = jQuery.extend({\n          type: type,\n          origType: origType,\n          data: data,\n          handler: handler,\n          guid: handler.guid,\n          selector: selector,\n          needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n          namespace: namespaces.join(\".\")\n        }, handleObjIn); // Init the event handler queue if we're the first\n\n        if (!(handlers = events[type])) {\n          handlers = events[type] = [];\n          handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\n\n          if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n            if (elem.addEventListener) {\n              elem.addEventListener(type, eventHandle);\n            }\n          }\n        }\n\n        if (special.add) {\n          special.add.call(elem, handleObj);\n\n          if (!handleObj.handler.guid) {\n            handleObj.handler.guid = handler.guid;\n          }\n        } // Add to the element's handler list, delegates in front\n\n\n        if (selector) {\n          handlers.splice(handlers.delegateCount++, 0, handleObj);\n        } else {\n          handlers.push(handleObj);\n        } // Keep track of which events have ever been used, for event optimization\n\n\n        jQuery.event.global[type] = true;\n      }\n    },\n    // Detach an event or set of events from an element\n    remove: function remove(elem, types, handler, selector, mappedTypes) {\n      var j,\n          origCount,\n          tmp,\n          events,\n          t,\n          handleObj,\n          special,\n          handlers,\n          type,\n          namespaces,\n          origType,\n          elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n      if (!elemData || !(events = elemData.events)) {\n        return;\n      } // Once for each type.namespace in types; type may be omitted\n\n\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\n\n        if (!type) {\n          for (type in events) {\n            jQuery.event.remove(elem, type + types[t], handler, selector, true);\n          }\n\n          continue;\n        }\n\n        special = jQuery.event.special[type] || {};\n        type = (selector ? special.delegateType : special.bindType) || type;\n        handlers = events[type] || [];\n        tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\n\n        origCount = j = handlers.length;\n\n        while (j--) {\n          handleObj = handlers[j];\n\n          if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n            handlers.splice(j, 1);\n\n            if (handleObj.selector) {\n              handlers.delegateCount--;\n            }\n\n            if (special.remove) {\n              special.remove.call(elem, handleObj);\n            }\n          }\n        } // Remove generic event handler if we removed something and no more handlers exist\n        // (avoids potential for endless recursion during removal of special event handlers)\n\n\n        if (origCount && !handlers.length) {\n          if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n            jQuery.removeEvent(elem, type, elemData.handle);\n          }\n\n          delete events[type];\n        }\n      } // Remove data and the expando if it's no longer used\n\n\n      if (jQuery.isEmptyObject(events)) {\n        dataPriv.remove(elem, \"handle events\");\n      }\n    },\n    dispatch: function dispatch(nativeEvent) {\n      var i,\n          j,\n          ret,\n          matched,\n          handleObj,\n          handlerQueue,\n          args = new Array(arguments.length),\n          // Make a writable jQuery.Event from the native event object\n      event = jQuery.event.fix(nativeEvent),\n          handlers = (dataPriv.get(this, \"events\") || Object.create(null))[event.type] || [],\n          special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\n\n      args[0] = event;\n\n      for (i = 1; i < arguments.length; i++) {\n        args[i] = arguments[i];\n      }\n\n      event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\n\n      if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n        return;\n      } // Determine handlers\n\n\n      handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us\n\n      i = 0;\n\n      while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n        event.currentTarget = matched.elem;\n        j = 0;\n\n        while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n          // If the event is namespaced, then each handler is only invoked if it is\n          // specially universal or its namespaces are a superset of the event's.\n          if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n            event.handleObj = handleObj;\n            event.data = handleObj.data;\n            ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n            if (ret !== undefined) {\n              if ((event.result = ret) === false) {\n                event.preventDefault();\n                event.stopPropagation();\n              }\n            }\n          }\n        }\n      } // Call the postDispatch hook for the mapped type\n\n\n      if (special.postDispatch) {\n        special.postDispatch.call(this, event);\n      }\n\n      return event.result;\n    },\n    handlers: function handlers(event, _handlers) {\n      var i,\n          handleObj,\n          sel,\n          matchedHandlers,\n          matchedSelectors,\n          handlerQueue = [],\n          delegateCount = _handlers.delegateCount,\n          cur = event.target; // Find delegate handlers\n\n      if (delegateCount && // Support: IE <=9\n      // Black-hole SVG <use> instance trees (trac-13180)\n      cur.nodeType && // Support: Firefox <=42\n      // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n      // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n      // Support: IE 11 only\n      // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n      !(event.type === \"click\" && event.button >= 1)) {\n        for (; cur !== this; cur = cur.parentNode || this) {\n          // Don't check non-elements (#13208)\n          // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n          if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n            matchedHandlers = [];\n            matchedSelectors = {};\n\n            for (i = 0; i < delegateCount; i++) {\n              handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)\n\n              sel = handleObj.selector + \" \";\n\n              if (matchedSelectors[sel] === undefined) {\n                matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n              }\n\n              if (matchedSelectors[sel]) {\n                matchedHandlers.push(handleObj);\n              }\n            }\n\n            if (matchedHandlers.length) {\n              handlerQueue.push({\n                elem: cur,\n                handlers: matchedHandlers\n              });\n            }\n          }\n        }\n      } // Add the remaining (directly-bound) handlers\n\n\n      cur = this;\n\n      if (delegateCount < _handlers.length) {\n        handlerQueue.push({\n          elem: cur,\n          handlers: _handlers.slice(delegateCount)\n        });\n      }\n\n      return handlerQueue;\n    },\n    addProp: function addProp(name, hook) {\n      Object.defineProperty(jQuery.Event.prototype, name, {\n        enumerable: true,\n        configurable: true,\n        get: isFunction(hook) ? function () {\n          if (this.originalEvent) {\n            return hook(this.originalEvent);\n          }\n        } : function () {\n          if (this.originalEvent) {\n            return this.originalEvent[name];\n          }\n        },\n        set: function set(value) {\n          Object.defineProperty(this, name, {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n        }\n      });\n    },\n    fix: function fix(originalEvent) {\n      return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n    },\n    special: {\n      load: {\n        // Prevent triggered image.load events from bubbling to window.load\n        noBubble: true\n      },\n      click: {\n        // Utilize native event to ensure correct state for checkable inputs\n        setup: function setup(data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data; // Claim the first handler\n\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            // dataPriv.set( el, \"click\", ... )\n            leverageNative(el, \"click\", returnTrue);\n          } // Return false to allow normal processing in the caller\n\n\n          return false;\n        },\n        trigger: function trigger(data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data; // Force setup before triggering a click\n\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            leverageNative(el, \"click\");\n          } // Return non-false to allow normal event-path propagation\n\n\n          return true;\n        },\n        // For cross-browser consistency, suppress native .click() on links\n        // Also prevent it if we're currently inside a leveraged native-event stack\n        _default: function _default(event) {\n          var target = event.target;\n          return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n        }\n      },\n      beforeunload: {\n        postDispatch: function postDispatch(event) {\n          // Support: Firefox 20+\n          // Firefox doesn't alert if the returnValue field is not set.\n          if (event.result !== undefined && event.originalEvent) {\n            event.originalEvent.returnValue = event.result;\n          }\n        }\n      }\n    }\n  }; // Ensure the presence of an event listener that handles manually-triggered\n  // synthetic events by interrupting progress until reinvoked in response to\n  // *native* events that it fires directly, ensuring that state changes have\n  // already occurred before other listeners are invoked.\n\n  function leverageNative(el, type, expectSync) {\n    // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n    if (!expectSync) {\n      if (dataPriv.get(el, type) === undefined) {\n        jQuery.event.add(el, type, returnTrue);\n      }\n\n      return;\n    } // Register the controller as a special universal handler for all event namespaces\n\n\n    dataPriv.set(el, type, false);\n    jQuery.event.add(el, type, {\n      namespace: false,\n      handler: function handler(event) {\n        var notAsync,\n            result,\n            saved = dataPriv.get(this, type);\n\n        if (event.isTrigger & 1 && this[type]) {\n          // Interrupt processing of the outer synthetic .trigger()ed event\n          // Saved data should be false in such cases, but might be a leftover capture object\n          // from an async native handler (gh-4350)\n          if (!saved.length) {\n            // Store arguments for use when handling the inner native event\n            // There will always be at least one argument (an event object), so this array\n            // will not be confused with a leftover capture object.\n            saved = _slice.call(arguments);\n            dataPriv.set(this, type, saved); // Trigger the native event and capture its result\n            // Support: IE <=9 - 11+\n            // focus() and blur() are asynchronous\n\n            notAsync = expectSync(this, type);\n            this[type]();\n            result = dataPriv.get(this, type);\n\n            if (saved !== result || notAsync) {\n              dataPriv.set(this, type, false);\n            } else {\n              result = {};\n            }\n\n            if (saved !== result) {\n              // Cancel the outer synthetic event\n              event.stopImmediatePropagation();\n              event.preventDefault();\n              return result.value;\n            } // If this is an inner synthetic event for an event with a bubbling surrogate\n            // (focus or blur), assume that the surrogate already propagated from triggering the\n            // native event and prevent that from happening again here.\n            // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n            // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n            // less bad than duplication.\n\n          } else if ((jQuery.event.special[type] || {}).delegateType) {\n            event.stopPropagation();\n          } // If this is a native event triggered above, everything is now in order\n          // Fire an inner synthetic event with the original arguments\n\n        } else if (saved.length) {\n          // ...and capture the result\n          dataPriv.set(this, type, {\n            value: jQuery.event.trigger( // Support: IE <=9 - 11+\n            // Extend with the prototype to reset the above stopImmediatePropagation()\n            jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)\n          }); // Abort handling of the native event\n\n          event.stopImmediatePropagation();\n        }\n      }\n    });\n  }\n\n  jQuery.removeEvent = function (elem, type, handle) {\n    // This \"if\" is needed for plain objects\n    if (elem.removeEventListener) {\n      elem.removeEventListener(type, handle);\n    }\n  };\n\n  jQuery.Event = function (src, props) {\n    // Allow instantiation without the 'new' keyword\n    if (!(this instanceof jQuery.Event)) {\n      return new jQuery.Event(src, props);\n    } // Event object\n\n\n    if (src && src.type) {\n      this.originalEvent = src;\n      this.type = src.type; // Events bubbling up the document may have been marked as prevented\n      // by a handler lower down the tree; reflect the correct value.\n\n      this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n      src.returnValue === false ? returnTrue : returnFalse; // Create target properties\n      // Support: Safari <=6 - 7 only\n      // Target should not be a text node (#504, #13143)\n\n      this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n      this.currentTarget = src.currentTarget;\n      this.relatedTarget = src.relatedTarget; // Event type\n    } else {\n      this.type = src;\n    } // Put explicitly provided properties onto the event object\n\n\n    if (props) {\n      jQuery.extend(this, props);\n    } // Create a timestamp if incoming event doesn't have one\n\n\n    this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed\n\n    this[jQuery.expando] = true;\n  }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n  // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\n\n  jQuery.Event.prototype = {\n    constructor: jQuery.Event,\n    isDefaultPrevented: returnFalse,\n    isPropagationStopped: returnFalse,\n    isImmediatePropagationStopped: returnFalse,\n    isSimulated: false,\n    preventDefault: function preventDefault() {\n      var e = this.originalEvent;\n      this.isDefaultPrevented = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.preventDefault();\n      }\n    },\n    stopPropagation: function stopPropagation() {\n      var e = this.originalEvent;\n      this.isPropagationStopped = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.stopPropagation();\n      }\n    },\n    stopImmediatePropagation: function stopImmediatePropagation() {\n      var e = this.originalEvent;\n      this.isImmediatePropagationStopped = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.stopImmediatePropagation();\n      }\n\n      this.stopPropagation();\n    }\n  }; // Includes all common event props including KeyEvent and MouseEvent specific props\n\n  jQuery.each({\n    altKey: true,\n    bubbles: true,\n    cancelable: true,\n    changedTouches: true,\n    ctrlKey: true,\n    detail: true,\n    eventPhase: true,\n    metaKey: true,\n    pageX: true,\n    pageY: true,\n    shiftKey: true,\n    view: true,\n    \"char\": true,\n    code: true,\n    charCode: true,\n    key: true,\n    keyCode: true,\n    button: true,\n    buttons: true,\n    clientX: true,\n    clientY: true,\n    offsetX: true,\n    offsetY: true,\n    pointerId: true,\n    pointerType: true,\n    screenX: true,\n    screenY: true,\n    targetTouches: true,\n    toElement: true,\n    touches: true,\n    which: function which(event) {\n      var button = event.button; // Add which for key events\n\n      if (event.which == null && rkeyEvent.test(event.type)) {\n        return event.charCode != null ? event.charCode : event.keyCode;\n      } // Add which for click: 1 === left; 2 === middle; 3 === right\n\n\n      if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {\n        if (button & 1) {\n          return 1;\n        }\n\n        if (button & 2) {\n          return 3;\n        }\n\n        if (button & 4) {\n          return 2;\n        }\n\n        return 0;\n      }\n\n      return event.which;\n    }\n  }, jQuery.event.addProp);\n  jQuery.each({\n    focus: \"focusin\",\n    blur: \"focusout\"\n  }, function (type, delegateType) {\n    jQuery.event.special[type] = {\n      // Utilize native event if possible so blur/focus sequence is correct\n      setup: function setup() {\n        // Claim the first handler\n        // dataPriv.set( this, \"focus\", ... )\n        // dataPriv.set( this, \"blur\", ... )\n        leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller\n\n        return false;\n      },\n      trigger: function trigger() {\n        // Force setup before trigger\n        leverageNative(this, type); // Return non-false to allow normal event-path propagation\n\n        return true;\n      },\n      delegateType: delegateType\n    };\n  }); // Create mouseenter/leave events using mouseover/out and event-time checks\n  // so that event delegation works in jQuery.\n  // Do the same for pointerenter/pointerleave and pointerover/pointerout\n  //\n  // Support: Safari 7 only\n  // Safari sends mouseenter too often; see:\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n  // for the description of the bug (it existed in older Chrome versions as well).\n\n  jQuery.each({\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\",\n    pointerenter: \"pointerover\",\n    pointerleave: \"pointerout\"\n  }, function (orig, fix) {\n    jQuery.event.special[orig] = {\n      delegateType: fix,\n      bindType: fix,\n      handle: function handle(event) {\n        var ret,\n            target = this,\n            related = event.relatedTarget,\n            handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n        // NB: No relatedTarget if the mouse left/entered the browser window\n\n        if (!related || related !== target && !jQuery.contains(target, related)) {\n          event.type = handleObj.origType;\n          ret = handleObj.handler.apply(this, arguments);\n          event.type = fix;\n        }\n\n        return ret;\n      }\n    };\n  });\n  jQuery.fn.extend({\n    on: function on(types, selector, data, fn) {\n      return _on(this, types, selector, data, fn);\n    },\n    one: function one(types, selector, data, fn) {\n      return _on(this, types, selector, data, fn, 1);\n    },\n    off: function off(types, selector, fn) {\n      var handleObj, type;\n\n      if (types && types.preventDefault && types.handleObj) {\n        // ( event )  dispatched jQuery.Event\n        handleObj = types.handleObj;\n        jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n        return this;\n      }\n\n      if (_typeof(types) === \"object\") {\n        // ( types-object [, selector] )\n        for (type in types) {\n          this.off(type, selector, types[type]);\n        }\n\n        return this;\n      }\n\n      if (selector === false || typeof selector === \"function\") {\n        // ( types [, fn] )\n        fn = selector;\n        selector = undefined;\n      }\n\n      if (fn === false) {\n        fn = returnFalse;\n      }\n\n      return this.each(function () {\n        jQuery.event.remove(this, types, fn, selector);\n      });\n    }\n  });\n  var // Support: IE <=10 - 11, Edge 12 - 13 only\n  // In IE/Edge using regex groups here causes severe slowdowns.\n  // See https://connect.microsoft.com/IE/feedback/details/1736512/\n  rnoInnerhtml = /<script|<style|<link/i,\n      // checked=\"checked\" or checked\n  rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n      rcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g; // Prefer a tbody over its parent table for containing new rows\n\n  function manipulationTarget(elem, content) {\n    if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n      return jQuery(elem).children(\"tbody\")[0] || elem;\n    }\n\n    return elem;\n  } // Replace/restore the type attribute of script elements for safe DOM manipulation\n\n\n  function disableScript(elem) {\n    elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n    return elem;\n  }\n\n  function restoreScript(elem) {\n    if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n      elem.type = elem.type.slice(5);\n    } else {\n      elem.removeAttribute(\"type\");\n    }\n\n    return elem;\n  }\n\n  function cloneCopyEvent(src, dest) {\n    var i, l, type, pdataOld, udataOld, udataCur, events;\n\n    if (dest.nodeType !== 1) {\n      return;\n    } // 1. Copy private data: events, handlers, etc.\n\n\n    if (dataPriv.hasData(src)) {\n      pdataOld = dataPriv.get(src);\n      events = pdataOld.events;\n\n      if (events) {\n        dataPriv.remove(dest, \"handle events\");\n\n        for (type in events) {\n          for (i = 0, l = events[type].length; i < l; i++) {\n            jQuery.event.add(dest, type, events[type][i]);\n          }\n        }\n      }\n    } // 2. Copy user data\n\n\n    if (dataUser.hasData(src)) {\n      udataOld = dataUser.access(src);\n      udataCur = jQuery.extend({}, udataOld);\n      dataUser.set(dest, udataCur);\n    }\n  } // Fix IE bugs, see support tests\n\n\n  function fixInput(src, dest) {\n    var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\n\n    if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n      dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n    } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n      dest.defaultValue = src.defaultValue;\n    }\n  }\n\n  function domManip(collection, args, callback, ignored) {\n    // Flatten any nested arrays\n    args = flat(args);\n    var fragment,\n        first,\n        scripts,\n        hasScripts,\n        node,\n        doc,\n        i = 0,\n        l = collection.length,\n        iNoClone = l - 1,\n        value = args[0],\n        valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\n\n    if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n      return collection.each(function (index) {\n        var self = collection.eq(index);\n\n        if (valueIsFunction) {\n          args[0] = value.call(this, index, self.html());\n        }\n\n        domManip(self, args, callback, ignored);\n      });\n    }\n\n    if (l) {\n      fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n      first = fragment.firstChild;\n\n      if (fragment.childNodes.length === 1) {\n        fragment = first;\n      } // Require either new content or an interest in ignored elements to invoke the callback\n\n\n      if (first || ignored) {\n        scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n        hasScripts = scripts.length; // Use the original fragment for the last item\n        // instead of the first because it can end up\n        // being emptied incorrectly in certain situations (#8070).\n\n        for (; i < l; i++) {\n          node = fragment;\n\n          if (i !== iNoClone) {\n            node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration\n\n            if (hasScripts) {\n              // Support: Android <=4.0 only, PhantomJS 1 only\n              // push.apply(_, arraylike) throws on ancient WebKit\n              jQuery.merge(scripts, getAll(node, \"script\"));\n            }\n          }\n\n          callback.call(collection[i], node, i);\n        }\n\n        if (hasScripts) {\n          doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\n\n          jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion\n\n          for (i = 0; i < hasScripts; i++) {\n            node = scripts[i];\n\n            if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n              if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n                // Optional AJAX dependency, but won't run scripts if not present\n                if (jQuery._evalUrl && !node.noModule) {\n                  jQuery._evalUrl(node.src, {\n                    nonce: node.nonce || node.getAttribute(\"nonce\")\n                  }, doc);\n                }\n              } else {\n                DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return collection;\n  }\n\n  function _remove(elem, selector, keepData) {\n    var node,\n        nodes = selector ? jQuery.filter(selector, elem) : elem,\n        i = 0;\n\n    for (; (node = nodes[i]) != null; i++) {\n      if (!keepData && node.nodeType === 1) {\n        jQuery.cleanData(getAll(node));\n      }\n\n      if (node.parentNode) {\n        if (keepData && isAttached(node)) {\n          setGlobalEval(getAll(node, \"script\"));\n        }\n\n        node.parentNode.removeChild(node);\n      }\n    }\n\n    return elem;\n  }\n\n  jQuery.extend({\n    htmlPrefilter: function htmlPrefilter(html) {\n      return html;\n    },\n    clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n      var i,\n          l,\n          srcElements,\n          destElements,\n          clone = elem.cloneNode(true),\n          inPage = isAttached(elem); // Fix IE cloning issues\n\n      if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n        // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n        destElements = getAll(clone);\n        srcElements = getAll(elem);\n\n        for (i = 0, l = srcElements.length; i < l; i++) {\n          fixInput(srcElements[i], destElements[i]);\n        }\n      } // Copy the events from the original to the clone\n\n\n      if (dataAndEvents) {\n        if (deepDataAndEvents) {\n          srcElements = srcElements || getAll(elem);\n          destElements = destElements || getAll(clone);\n\n          for (i = 0, l = srcElements.length; i < l; i++) {\n            cloneCopyEvent(srcElements[i], destElements[i]);\n          }\n        } else {\n          cloneCopyEvent(elem, clone);\n        }\n      } // Preserve script evaluation history\n\n\n      destElements = getAll(clone, \"script\");\n\n      if (destElements.length > 0) {\n        setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n      } // Return the cloned set\n\n\n      return clone;\n    },\n    cleanData: function cleanData(elems) {\n      var data,\n          elem,\n          type,\n          special = jQuery.event.special,\n          i = 0;\n\n      for (; (elem = elems[i]) !== undefined; i++) {\n        if (acceptData(elem)) {\n          if (data = elem[dataPriv.expando]) {\n            if (data.events) {\n              for (type in data.events) {\n                if (special[type]) {\n                  jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead\n                } else {\n                  jQuery.removeEvent(elem, type, data.handle);\n                }\n              }\n            } // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n\n\n            elem[dataPriv.expando] = undefined;\n          }\n\n          if (elem[dataUser.expando]) {\n            // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n            elem[dataUser.expando] = undefined;\n          }\n        }\n      }\n    }\n  });\n  jQuery.fn.extend({\n    detach: function detach(selector) {\n      return _remove(this, selector, true);\n    },\n    remove: function remove(selector) {\n      return _remove(this, selector);\n    },\n    text: function text(value) {\n      return access(this, function (value) {\n        return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n          if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n            this.textContent = value;\n          }\n        });\n      }, null, value, arguments.length);\n    },\n    append: function append() {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.appendChild(elem);\n        }\n      });\n    },\n    prepend: function prepend() {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.insertBefore(elem, target.firstChild);\n        }\n      });\n    },\n    before: function before() {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this);\n        }\n      });\n    },\n    after: function after() {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this.nextSibling);\n        }\n      });\n    },\n    empty: function empty() {\n      var elem,\n          i = 0;\n\n      for (; (elem = this[i]) != null; i++) {\n        if (elem.nodeType === 1) {\n          // Prevent memory leaks\n          jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes\n\n          elem.textContent = \"\";\n        }\n      }\n\n      return this;\n    },\n    clone: function clone(dataAndEvents, deepDataAndEvents) {\n      dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n      deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n      return this.map(function () {\n        return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n      });\n    },\n    html: function html(value) {\n      return access(this, function (value) {\n        var elem = this[0] || {},\n            i = 0,\n            l = this.length;\n\n        if (value === undefined && elem.nodeType === 1) {\n          return elem.innerHTML;\n        } // See if we can take a shortcut and just use innerHTML\n\n\n        if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n          value = jQuery.htmlPrefilter(value);\n\n          try {\n            for (; i < l; i++) {\n              elem = this[i] || {}; // Remove element nodes and prevent memory leaks\n\n              if (elem.nodeType === 1) {\n                jQuery.cleanData(getAll(elem, false));\n                elem.innerHTML = value;\n              }\n            }\n\n            elem = 0; // If using innerHTML throws an exception, use the fallback method\n          } catch (e) {}\n        }\n\n        if (elem) {\n          this.empty().append(value);\n        }\n      }, null, value, arguments.length);\n    },\n    replaceWith: function replaceWith() {\n      var ignored = []; // Make the changes, replacing each non-ignored context element with the new content\n\n      return domManip(this, arguments, function (elem) {\n        var parent = this.parentNode;\n\n        if (jQuery.inArray(this, ignored) < 0) {\n          jQuery.cleanData(getAll(this));\n\n          if (parent) {\n            parent.replaceChild(elem, this);\n          }\n        } // Force callback invocation\n\n      }, ignored);\n    }\n  });\n  jQuery.each({\n    appendTo: \"append\",\n    prependTo: \"prepend\",\n    insertBefore: \"before\",\n    insertAfter: \"after\",\n    replaceAll: \"replaceWith\"\n  }, function (name, original) {\n    jQuery.fn[name] = function (selector) {\n      var elems,\n          ret = [],\n          insert = jQuery(selector),\n          last = insert.length - 1,\n          i = 0;\n\n      for (; i <= last; i++) {\n        elems = i === last ? this : this.clone(true);\n        jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n        // .get() because push.apply(_, arraylike) throws on ancient WebKit\n\n        push.apply(ret, elems.get());\n      }\n\n      return this.pushStack(ret);\n    };\n  });\n  var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n  var getStyles = function getStyles(elem) {\n    // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n    // IE throws on elements created in popups\n    // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n    var view = elem.ownerDocument.defaultView;\n\n    if (!view || !view.opener) {\n      view = window;\n    }\n\n    return view.getComputedStyle(elem);\n  };\n\n  var swap = function swap(elem, options, callback) {\n    var ret,\n        name,\n        old = {}; // Remember the old values, and insert the new ones\n\n    for (name in options) {\n      old[name] = elem.style[name];\n      elem.style[name] = options[name];\n    }\n\n    ret = callback.call(elem); // Revert the old values\n\n    for (name in options) {\n      elem.style[name] = old[name];\n    }\n\n    return ret;\n  };\n\n  var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n  (function () {\n    // Executing both pixelPosition & boxSizingReliable tests require only one layout\n    // so they're executed at the same time to save the second computation.\n    function computeStyleTests() {\n      // This is a singleton, we need to execute it only once\n      if (!div) {\n        return;\n      }\n\n      container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n      div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n      documentElement.appendChild(container).appendChild(div);\n      var divStyle = window.getComputedStyle(div);\n      pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\n      reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n      // Some styles come back with percentage values, even though they shouldn't\n\n      div.style.right = \"60%\";\n      pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only\n      // Detect misreporting of content dimensions for box-sizing:border-box elements\n\n      boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only\n      // Detect overflow:scroll screwiness (gh-3699)\n      // Support: Chrome <=64\n      // Don't get tricked when zoom affects offsetWidth (gh-4029)\n\n      div.style.position = \"absolute\";\n      scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n      documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n      // it will also be a sign that checks already performed\n\n      div = null;\n    }\n\n    function roundPixelMeasures(measure) {\n      return Math.round(parseFloat(measure));\n    }\n\n    var pixelPositionVal,\n        boxSizingReliableVal,\n        scrollboxSizeVal,\n        pixelBoxStylesVal,\n        reliableTrDimensionsVal,\n        reliableMarginLeftVal,\n        container = document.createElement(\"div\"),\n        div = document.createElement(\"div\"); // Finish early in limited (non-browser) environments\n\n    if (!div.style) {\n      return;\n    } // Support: IE <=9 - 11 only\n    // Style of cloned element affects source element cloned (#8908)\n\n\n    div.style.backgroundClip = \"content-box\";\n    div.cloneNode(true).style.backgroundClip = \"\";\n    support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n    jQuery.extend(support, {\n      boxSizingReliable: function boxSizingReliable() {\n        computeStyleTests();\n        return boxSizingReliableVal;\n      },\n      pixelBoxStyles: function pixelBoxStyles() {\n        computeStyleTests();\n        return pixelBoxStylesVal;\n      },\n      pixelPosition: function pixelPosition() {\n        computeStyleTests();\n        return pixelPositionVal;\n      },\n      reliableMarginLeft: function reliableMarginLeft() {\n        computeStyleTests();\n        return reliableMarginLeftVal;\n      },\n      scrollboxSize: function scrollboxSize() {\n        computeStyleTests();\n        return scrollboxSizeVal;\n      },\n      // Support: IE 9 - 11+, Edge 15 - 18+\n      // IE/Edge misreport `getComputedStyle` of table rows with width/height\n      // set in CSS while `offset*` properties report correct values.\n      // Behavior in IE 9 is more subtle than in newer versions & it passes\n      // some versions of this test; make sure not to make it pass there!\n      reliableTrDimensions: function reliableTrDimensions() {\n        var table, tr, trChild, trStyle;\n\n        if (reliableTrDimensionsVal == null) {\n          table = document.createElement(\"table\");\n          tr = document.createElement(\"tr\");\n          trChild = document.createElement(\"div\");\n          table.style.cssText = \"position:absolute;left:-11111px\";\n          tr.style.height = \"1px\";\n          trChild.style.height = \"9px\";\n          documentElement.appendChild(table).appendChild(tr).appendChild(trChild);\n          trStyle = window.getComputedStyle(tr);\n          reliableTrDimensionsVal = parseInt(trStyle.height) > 3;\n          documentElement.removeChild(table);\n        }\n\n        return reliableTrDimensionsVal;\n      }\n    });\n  })();\n\n  function curCSS(elem, name, computed) {\n    var width,\n        minWidth,\n        maxWidth,\n        ret,\n        // Support: Firefox 51+\n    // Retrieving style before computed somehow\n    // fixes an issue with getting wrong values\n    // on detached elements\n    style = elem.style;\n    computed = computed || getStyles(elem); // getPropertyValue is needed for:\n    //   .css('filter') (IE 9 only, #12537)\n    //   .css('--customProperty) (#3144)\n\n    if (computed) {\n      ret = computed.getPropertyValue(name) || computed[name];\n\n      if (ret === \"\" && !isAttached(elem)) {\n        ret = jQuery.style(elem, name);\n      } // A tribute to the \"awesome hack by Dean Edwards\"\n      // Android Browser returns percentage for some values,\n      // but width seems to be reliably pixels.\n      // This is against the CSSOM draft spec:\n      // https://drafts.csswg.org/cssom/#resolved-values\n\n\n      if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n        // Remember the original values\n        width = style.width;\n        minWidth = style.minWidth;\n        maxWidth = style.maxWidth; // Put in the new values to get a computed value out\n\n        style.minWidth = style.maxWidth = style.width = ret;\n        ret = computed.width; // Revert the changed values\n\n        style.width = width;\n        style.minWidth = minWidth;\n        style.maxWidth = maxWidth;\n      }\n    }\n\n    return ret !== undefined ? // Support: IE <=9 - 11 only\n    // IE returns zIndex value as an integer.\n    ret + \"\" : ret;\n  }\n\n  function addGetHookIf(conditionFn, hookFn) {\n    // Define the hook, we'll check on the first run if it's really needed.\n    return {\n      get: function get() {\n        if (conditionFn()) {\n          // Hook not needed (or it's not possible to use it due\n          // to missing dependency), remove it.\n          delete this.get;\n          return;\n        } // Hook needed; redefine it so that the support test is not executed again.\n\n\n        return (this.get = hookFn).apply(this, arguments);\n      }\n    };\n  }\n\n  var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n      emptyStyle = document.createElement(\"div\").style,\n      vendorProps = {}; // Return a vendor-prefixed property or undefined\n\n  function vendorPropName(name) {\n    // Check for vendor prefixed names\n    var capName = name[0].toUpperCase() + name.slice(1),\n        i = cssPrefixes.length;\n\n    while (i--) {\n      name = cssPrefixes[i] + capName;\n\n      if (name in emptyStyle) {\n        return name;\n      }\n    }\n  } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\n\n  function finalPropName(name) {\n    var _final = jQuery.cssProps[name] || vendorProps[name];\n\n    if (_final) {\n      return _final;\n    }\n\n    if (name in emptyStyle) {\n      return name;\n    }\n\n    return vendorProps[name] = vendorPropName(name) || name;\n  }\n\n  var // Swappable if display is none or starts with table\n  // except \"table\", \"table-cell\", or \"table-caption\"\n  // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n  rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n      rcustomProp = /^--/,\n      cssShow = {\n    position: \"absolute\",\n    visibility: \"hidden\",\n    display: \"block\"\n  },\n      cssNormalTransform = {\n    letterSpacing: \"0\",\n    fontWeight: \"400\"\n  };\n\n  function setPositiveNumber(_elem, value, subtract) {\n    // Any relative (+/-) values have already been\n    // normalized at this point\n    var matches = rcssNum.exec(value);\n    return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n    Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n  }\n\n  function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n    var i = dimension === \"width\" ? 1 : 0,\n        extra = 0,\n        delta = 0; // Adjustment may not be necessary\n\n    if (box === (isBorderBox ? \"border\" : \"content\")) {\n      return 0;\n    }\n\n    for (; i < 4; i += 2) {\n      // Both box models exclude margin\n      if (box === \"margin\") {\n        delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n      } // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\n\n      if (!isBorderBox) {\n        // Add padding\n        delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles); // For \"border\" or \"margin\", add border\n\n        if (box !== \"padding\") {\n          delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles); // But still keep track of it otherwise\n        } else {\n          extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        } // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n        // \"padding\" or \"margin\"\n\n      } else {\n        // For \"content\", subtract padding\n        if (box === \"content\") {\n          delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n        } // For \"content\" or \"padding\", subtract border\n\n\n        if (box !== \"margin\") {\n          delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        }\n      }\n    } // Account for positive content-box scroll gutter when requested by providing computedVal\n\n\n    if (!isBorderBox && computedVal >= 0) {\n      // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n      // Assuming integer scroll gutter, subtract the rest and round down\n      delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n      // Use an explicit zero to avoid NaN (gh-3964)\n      )) || 0;\n    }\n\n    return delta;\n  }\n\n  function getWidthOrHeight(elem, dimension, extra) {\n    // Start with computed style\n    var styles = getStyles(elem),\n        // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n    // Fake content-box until we know it's needed to know the true value.\n    boxSizingNeeded = !support.boxSizingReliable() || extra,\n        isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n        valueIsBorderBox = isBorderBox,\n        val = curCSS(elem, dimension, styles),\n        offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54\n    // Return a confounding non-pixel value or feign ignorance, as appropriate.\n\n    if (rnumnonpx.test(val)) {\n      if (!extra) {\n        return val;\n      }\n\n      val = \"auto\";\n    } // Support: IE 9 - 11 only\n    // Use offsetWidth/offsetHeight for when box sizing is unreliable.\n    // In those cases, the computed value can be trusted to be border-box.\n\n\n    if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+\n    // IE/Edge misreport `getComputedStyle` of table rows with width/height\n    // set in CSS while `offset*` properties report correct values.\n    // Interestingly, in some cases IE 9 doesn't suffer from this issue.\n    !support.reliableTrDimensions() && nodeName(elem, \"tr\") || // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n    // This happens for inline elements with no explicit setting (gh-3571)\n    val === \"auto\" || // Support: Android <=4.1 - 4.3 only\n    // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n    !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && // Make sure the element is visible & connected\n    elem.getClientRects().length) {\n      isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n      // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n      // retrieved value as a content box dimension.\n\n      valueIsBorderBox = offsetProp in elem;\n\n      if (valueIsBorderBox) {\n        val = elem[offsetProp];\n      }\n    } // Normalize \"\" and auto\n\n\n    val = parseFloat(val) || 0; // Adjust for the element's box model\n\n    return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n    val) + \"px\";\n  }\n\n  jQuery.extend({\n    // Add in style property hooks for overriding the default\n    // behavior of getting and setting a style property\n    cssHooks: {\n      opacity: {\n        get: function get(elem, computed) {\n          if (computed) {\n            // We should always get a number back from opacity\n            var ret = curCSS(elem, \"opacity\");\n            return ret === \"\" ? \"1\" : ret;\n          }\n        }\n      }\n    },\n    // Don't automatically add \"px\" to these possibly-unitless properties\n    cssNumber: {\n      \"animationIterationCount\": true,\n      \"columnCount\": true,\n      \"fillOpacity\": true,\n      \"flexGrow\": true,\n      \"flexShrink\": true,\n      \"fontWeight\": true,\n      \"gridArea\": true,\n      \"gridColumn\": true,\n      \"gridColumnEnd\": true,\n      \"gridColumnStart\": true,\n      \"gridRow\": true,\n      \"gridRowEnd\": true,\n      \"gridRowStart\": true,\n      \"lineHeight\": true,\n      \"opacity\": true,\n      \"order\": true,\n      \"orphans\": true,\n      \"widows\": true,\n      \"zIndex\": true,\n      \"zoom\": true\n    },\n    // Add in properties whose names you wish to fix before\n    // setting or getting the value\n    cssProps: {},\n    // Get and set the style property on a DOM Node\n    style: function style(elem, name, value, extra) {\n      // Don't set styles on text and comment nodes\n      if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n        return;\n      } // Make sure that we're working with the right name\n\n\n      var ret,\n          type,\n          hooks,\n          origName = camelCase(name),\n          isCustomProp = rcustomProp.test(name),\n          style = elem.style; // Make sure that we're working with the right name. We don't\n      // want to query the value if it is a CSS custom property\n      // since they are user-defined.\n\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      } // Gets hook for the prefixed version, then unprefixed version\n\n\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\n\n      if (value !== undefined) {\n        type = _typeof(value); // Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\n        if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n          value = adjustCSS(elem, name, ret); // Fixes bug #9237\n\n          type = \"number\";\n        } // Make sure that null and NaN values aren't set (#7116)\n\n\n        if (value == null || value !== value) {\n          return;\n        } // If a number was passed in, add the unit (except for certain CSS properties)\n        // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n        // \"px\" to a few hardcoded values.\n\n\n        if (type === \"number\" && !isCustomProp) {\n          value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n        } // background-* props affect original clone's values\n\n\n        if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n          style[name] = \"inherit\";\n        } // If a hook was provided, use that value, otherwise just set the specified value\n\n\n        if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n          if (isCustomProp) {\n            style.setProperty(name, value);\n          } else {\n            style[name] = value;\n          }\n        }\n      } else {\n        // If a hook was provided get the non-computed value from there\n        if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n          return ret;\n        } // Otherwise just get the value from the style object\n\n\n        return style[name];\n      }\n    },\n    css: function css(elem, name, extra, styles) {\n      var val,\n          num,\n          hooks,\n          origName = camelCase(name),\n          isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n      // want to modify the value if it is a CSS custom property\n      // since they are user-defined.\n\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      } // Try prefixed name followed by the unprefixed name\n\n\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\n\n      if (hooks && \"get\" in hooks) {\n        val = hooks.get(elem, true, extra);\n      } // Otherwise, if a way to get the computed value exists, use that\n\n\n      if (val === undefined) {\n        val = curCSS(elem, name, styles);\n      } // Convert \"normal\" to computed value\n\n\n      if (val === \"normal\" && name in cssNormalTransform) {\n        val = cssNormalTransform[name];\n      } // Make numeric if forced or a qualifier was provided and val looks numeric\n\n\n      if (extra === \"\" || extra) {\n        num = parseFloat(val);\n        return extra === true || isFinite(num) ? num || 0 : val;\n      }\n\n      return val;\n    }\n  });\n  jQuery.each([\"height\", \"width\"], function (_i, dimension) {\n    jQuery.cssHooks[dimension] = {\n      get: function get(elem, computed, extra) {\n        if (computed) {\n          // Certain elements can have dimension info if we invisibly show them\n          // but it must have a current display style that would benefit\n          return rdisplayswap.test(jQuery.css(elem, \"display\")) && ( // Support: Safari 8+\n          // Table columns in Safari have non-zero offsetWidth & zero\n          // getBoundingClientRect().width unless display is changed.\n          // Support: IE <=11 only\n          // Running getBoundingClientRect on a disconnected node\n          // in IE throws an error.\n          !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n            return getWidthOrHeight(elem, dimension, extra);\n          }) : getWidthOrHeight(elem, dimension, extra);\n        }\n      },\n      set: function set(elem, value, extra) {\n        var matches,\n            styles = getStyles(elem),\n            // Only read styles.position if the test has a chance to fail\n        // to avoid forcing a reflow.\n        scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n            // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n        boxSizingNeeded = scrollboxSizeBuggy || extra,\n            isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n            subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and\n        // faking a content-box to get border and padding (gh-3699)\n\n        if (isBorderBox && scrollboxSizeBuggy) {\n          subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n        } // Convert to pixels if value adjustment is needed\n\n\n        if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n          elem.style[dimension] = value;\n          value = jQuery.css(elem, dimension);\n        }\n\n        return setPositiveNumber(elem, value, subtract);\n      }\n    };\n  });\n  jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n    if (computed) {\n      return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n        marginLeft: 0\n      }, function () {\n        return elem.getBoundingClientRect().left;\n      })) + \"px\";\n    }\n  }); // These hooks are used by animate to expand properties\n\n  jQuery.each({\n    margin: \"\",\n    padding: \"\",\n    border: \"Width\"\n  }, function (prefix, suffix) {\n    jQuery.cssHooks[prefix + suffix] = {\n      expand: function expand(value) {\n        var i = 0,\n            expanded = {},\n            // Assumes a single number if not a string\n        parts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n        for (; i < 4; i++) {\n          expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n        }\n\n        return expanded;\n      }\n    };\n\n    if (prefix !== \"margin\") {\n      jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n    }\n  });\n  jQuery.fn.extend({\n    css: function css(name, value) {\n      return access(this, function (elem, name, value) {\n        var styles,\n            len,\n            map = {},\n            i = 0;\n\n        if (Array.isArray(name)) {\n          styles = getStyles(elem);\n          len = name.length;\n\n          for (; i < len; i++) {\n            map[name[i]] = jQuery.css(elem, name[i], false, styles);\n          }\n\n          return map;\n        }\n\n        return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n      }, name, value, arguments.length > 1);\n    }\n  });\n\n  function Tween(elem, options, prop, end, easing) {\n    return new Tween.prototype.init(elem, options, prop, end, easing);\n  }\n\n  jQuery.Tween = Tween;\n  Tween.prototype = {\n    constructor: Tween,\n    init: function init(elem, options, prop, end, easing, unit) {\n      this.elem = elem;\n      this.prop = prop;\n      this.easing = easing || jQuery.easing._default;\n      this.options = options;\n      this.start = this.now = this.cur();\n      this.end = end;\n      this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n    },\n    cur: function cur() {\n      var hooks = Tween.propHooks[this.prop];\n      return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n    },\n    run: function run(percent) {\n      var eased,\n          hooks = Tween.propHooks[this.prop];\n\n      if (this.options.duration) {\n        this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n      } else {\n        this.pos = eased = percent;\n      }\n\n      this.now = (this.end - this.start) * eased + this.start;\n\n      if (this.options.step) {\n        this.options.step.call(this.elem, this.now, this);\n      }\n\n      if (hooks && hooks.set) {\n        hooks.set(this);\n      } else {\n        Tween.propHooks._default.set(this);\n      }\n\n      return this;\n    }\n  };\n  Tween.prototype.init.prototype = Tween.prototype;\n  Tween.propHooks = {\n    _default: {\n      get: function get(tween) {\n        var result; // Use a property on the element directly when it is not a DOM element,\n        // or when there is no matching style property that exists.\n\n        if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n          return tween.elem[tween.prop];\n        } // Passing an empty string as a 3rd parameter to .css will automatically\n        // attempt a parseFloat and fallback to a string if the parse fails.\n        // Simple values such as \"10px\" are parsed to Float;\n        // complex values such as \"rotate(1rad)\" are returned as-is.\n\n\n        result = jQuery.css(tween.elem, tween.prop, \"\"); // Empty strings, null, undefined and \"auto\" are converted to 0.\n\n        return !result || result === \"auto\" ? 0 : result;\n      },\n      set: function set(tween) {\n        // Use step hook for back compat.\n        // Use cssHook if its there.\n        // Use .style if available and use plain properties where available.\n        if (jQuery.fx.step[tween.prop]) {\n          jQuery.fx.step[tween.prop](tween);\n        } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n          jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n        } else {\n          tween.elem[tween.prop] = tween.now;\n        }\n      }\n    }\n  }; // Support: IE <=9 only\n  // Panic based approach to setting things on disconnected nodes\n\n  Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n    set: function set(tween) {\n      if (tween.elem.nodeType && tween.elem.parentNode) {\n        tween.elem[tween.prop] = tween.now;\n      }\n    }\n  };\n  jQuery.easing = {\n    linear: function linear(p) {\n      return p;\n    },\n    swing: function swing(p) {\n      return 0.5 - Math.cos(p * Math.PI) / 2;\n    },\n    _default: \"swing\"\n  };\n  jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point\n\n  jQuery.fx.step = {};\n  var fxNow,\n      inProgress,\n      rfxtypes = /^(?:toggle|show|hide)$/,\n      rrun = /queueHooks$/;\n\n  function schedule() {\n    if (inProgress) {\n      if (document.hidden === false && window.requestAnimationFrame) {\n        window.requestAnimationFrame(schedule);\n      } else {\n        window.setTimeout(schedule, jQuery.fx.interval);\n      }\n\n      jQuery.fx.tick();\n    }\n  } // Animations created synchronously will run synchronously\n\n\n  function createFxNow() {\n    window.setTimeout(function () {\n      fxNow = undefined;\n    });\n    return fxNow = Date.now();\n  } // Generate parameters to create a standard animation\n\n\n  function genFx(type, includeWidth) {\n    var which,\n        i = 0,\n        attrs = {\n      height: type\n    }; // If we include width, step value is 1 to do all cssExpand values,\n    // otherwise step value is 2 to skip over Left and Right\n\n    includeWidth = includeWidth ? 1 : 0;\n\n    for (; i < 4; i += 2 - includeWidth) {\n      which = cssExpand[i];\n      attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n    }\n\n    if (includeWidth) {\n      attrs.opacity = attrs.width = type;\n    }\n\n    return attrs;\n  }\n\n  function createTween(value, prop, animation) {\n    var tween,\n        collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n        index = 0,\n        length = collection.length;\n\n    for (; index < length; index++) {\n      if (tween = collection[index].call(animation, prop, value)) {\n        // We're done with this property\n        return tween;\n      }\n    }\n  }\n\n  function defaultPrefilter(elem, props, opts) {\n    var prop,\n        value,\n        toggle,\n        hooks,\n        oldfire,\n        propTween,\n        restoreDisplay,\n        display,\n        isBox = \"width\" in props || \"height\" in props,\n        anim = this,\n        orig = {},\n        style = elem.style,\n        hidden = elem.nodeType && isHiddenWithinTree(elem),\n        dataShow = dataPriv.get(elem, \"fxshow\"); // Queue-skipping animations hijack the fx hooks\n\n    if (!opts.queue) {\n      hooks = jQuery._queueHooks(elem, \"fx\");\n\n      if (hooks.unqueued == null) {\n        hooks.unqueued = 0;\n        oldfire = hooks.empty.fire;\n\n        hooks.empty.fire = function () {\n          if (!hooks.unqueued) {\n            oldfire();\n          }\n        };\n      }\n\n      hooks.unqueued++;\n      anim.always(function () {\n        // Ensure the complete handler is called before this completes\n        anim.always(function () {\n          hooks.unqueued--;\n\n          if (!jQuery.queue(elem, \"fx\").length) {\n            hooks.empty.fire();\n          }\n        });\n      });\n    } // Detect show/hide animations\n\n\n    for (prop in props) {\n      value = props[prop];\n\n      if (rfxtypes.test(value)) {\n        delete props[prop];\n        toggle = toggle || value === \"toggle\";\n\n        if (value === (hidden ? \"hide\" : \"show\")) {\n          // Pretend to be hidden if this is a \"show\" and\n          // there is still data from a stopped show/hide\n          if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n            hidden = true; // Ignore all other no-op show/hide data\n          } else {\n            continue;\n          }\n        }\n\n        orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n      }\n    } // Bail out if this is a no-op like .hide().hide()\n\n\n    propTween = !jQuery.isEmptyObject(props);\n\n    if (!propTween && jQuery.isEmptyObject(orig)) {\n      return;\n    } // Restrict \"overflow\" and \"display\" styles during box animations\n\n\n    if (isBox && elem.nodeType === 1) {\n      // Support: IE <=9 - 11, Edge 12 - 15\n      // Record all 3 overflow attributes because IE does not infer the shorthand\n      // from identically-valued overflowX and overflowY and Edge just mirrors\n      // the overflowX value there.\n      opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade\n\n      restoreDisplay = dataShow && dataShow.display;\n\n      if (restoreDisplay == null) {\n        restoreDisplay = dataPriv.get(elem, \"display\");\n      }\n\n      display = jQuery.css(elem, \"display\");\n\n      if (display === \"none\") {\n        if (restoreDisplay) {\n          display = restoreDisplay;\n        } else {\n          // Get nonempty value(s) by temporarily forcing visibility\n          showHide([elem], true);\n          restoreDisplay = elem.style.display || restoreDisplay;\n          display = jQuery.css(elem, \"display\");\n          showHide([elem]);\n        }\n      } // Animate inline elements as inline-block\n\n\n      if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n        if (jQuery.css(elem, \"float\") === \"none\") {\n          // Restore the original display value at the end of pure show/hide animations\n          if (!propTween) {\n            anim.done(function () {\n              style.display = restoreDisplay;\n            });\n\n            if (restoreDisplay == null) {\n              display = style.display;\n              restoreDisplay = display === \"none\" ? \"\" : display;\n            }\n          }\n\n          style.display = \"inline-block\";\n        }\n      }\n    }\n\n    if (opts.overflow) {\n      style.overflow = \"hidden\";\n      anim.always(function () {\n        style.overflow = opts.overflow[0];\n        style.overflowX = opts.overflow[1];\n        style.overflowY = opts.overflow[2];\n      });\n    } // Implement show/hide animations\n\n\n    propTween = false;\n\n    for (prop in orig) {\n      // General show/hide setup for this element animation\n      if (!propTween) {\n        if (dataShow) {\n          if (\"hidden\" in dataShow) {\n            hidden = dataShow.hidden;\n          }\n        } else {\n          dataShow = dataPriv.access(elem, \"fxshow\", {\n            display: restoreDisplay\n          });\n        } // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\n\n        if (toggle) {\n          dataShow.hidden = !hidden;\n        } // Show elements before animating them\n\n\n        if (hidden) {\n          showHide([elem], true);\n        }\n        /* eslint-disable no-loop-func */\n\n\n        anim.done(function () {\n          /* eslint-enable no-loop-func */\n          // The final step of a \"hide\" animation is actually hiding the element\n          if (!hidden) {\n            showHide([elem]);\n          }\n\n          dataPriv.remove(elem, \"fxshow\");\n\n          for (prop in orig) {\n            jQuery.style(elem, prop, orig[prop]);\n          }\n        });\n      } // Per-property setup\n\n\n      propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\n      if (!(prop in dataShow)) {\n        dataShow[prop] = propTween.start;\n\n        if (hidden) {\n          propTween.end = propTween.start;\n          propTween.start = 0;\n        }\n      }\n    }\n  }\n\n  function propFilter(props, specialEasing) {\n    var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass\n\n    for (index in props) {\n      name = camelCase(index);\n      easing = specialEasing[name];\n      value = props[index];\n\n      if (Array.isArray(value)) {\n        easing = value[1];\n        value = props[index] = value[0];\n      }\n\n      if (index !== name) {\n        props[name] = value;\n        delete props[index];\n      }\n\n      hooks = jQuery.cssHooks[name];\n\n      if (hooks && \"expand\" in hooks) {\n        value = hooks.expand(value);\n        delete props[name]; // Not quite $.extend, this won't overwrite existing keys.\n        // Reusing 'index' because we have the correct \"name\"\n\n        for (index in value) {\n          if (!(index in props)) {\n            props[index] = value[index];\n            specialEasing[index] = easing;\n          }\n        }\n      } else {\n        specialEasing[name] = easing;\n      }\n    }\n  }\n\n  function Animation(elem, properties, options) {\n    var result,\n        stopped,\n        index = 0,\n        length = Animation.prefilters.length,\n        deferred = jQuery.Deferred().always(function () {\n      // Don't match elem in the :animated selector\n      delete tick.elem;\n    }),\n        tick = function tick() {\n      if (stopped) {\n        return false;\n      }\n\n      var currentTime = fxNow || createFxNow(),\n          remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n          // Support: Android 2.3 only\n      // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n      temp = remaining / animation.duration || 0,\n          percent = 1 - temp,\n          index = 0,\n          length = animation.tweens.length;\n\n      for (; index < length; index++) {\n        animation.tweens[index].run(percent);\n      }\n\n      deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield\n\n      if (percent < 1 && length) {\n        return remaining;\n      } // If this was an empty animation, synthesize a final progress notification\n\n\n      if (!length) {\n        deferred.notifyWith(elem, [animation, 1, 0]);\n      } // Resolve the animation and report its conclusion\n\n\n      deferred.resolveWith(elem, [animation]);\n      return false;\n    },\n        animation = deferred.promise({\n      elem: elem,\n      props: jQuery.extend({}, properties),\n      opts: jQuery.extend(true, {\n        specialEasing: {},\n        easing: jQuery.easing._default\n      }, options),\n      originalProperties: properties,\n      originalOptions: options,\n      startTime: fxNow || createFxNow(),\n      duration: options.duration,\n      tweens: [],\n      createTween: function createTween(prop, end) {\n        var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n        animation.tweens.push(tween);\n        return tween;\n      },\n      stop: function stop(gotoEnd) {\n        var index = 0,\n            // If we are going to the end, we want to run all the tweens\n        // otherwise we skip this part\n        length = gotoEnd ? animation.tweens.length : 0;\n\n        if (stopped) {\n          return this;\n        }\n\n        stopped = true;\n\n        for (; index < length; index++) {\n          animation.tweens[index].run(1);\n        } // Resolve when we played the last frame; otherwise, reject\n\n\n        if (gotoEnd) {\n          deferred.notifyWith(elem, [animation, 1, 0]);\n          deferred.resolveWith(elem, [animation, gotoEnd]);\n        } else {\n          deferred.rejectWith(elem, [animation, gotoEnd]);\n        }\n\n        return this;\n      }\n    }),\n        props = animation.props;\n\n    propFilter(props, animation.opts.specialEasing);\n\n    for (; index < length; index++) {\n      result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\n      if (result) {\n        if (isFunction(result.stop)) {\n          jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n        }\n\n        return result;\n      }\n    }\n\n    jQuery.map(props, createTween, animation);\n\n    if (isFunction(animation.opts.start)) {\n      animation.opts.start.call(elem, animation);\n    } // Attach callbacks from options\n\n\n    animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n    jQuery.fx.timer(jQuery.extend(tick, {\n      elem: elem,\n      anim: animation,\n      queue: animation.opts.queue\n    }));\n    return animation;\n  }\n\n  jQuery.Animation = jQuery.extend(Animation, {\n    tweeners: {\n      \"*\": [function (prop, value) {\n        var tween = this.createTween(prop, value);\n        adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n        return tween;\n      }]\n    },\n    tweener: function tweener(props, callback) {\n      if (isFunction(props)) {\n        callback = props;\n        props = [\"*\"];\n      } else {\n        props = props.match(rnothtmlwhite);\n      }\n\n      var prop,\n          index = 0,\n          length = props.length;\n\n      for (; index < length; index++) {\n        prop = props[index];\n        Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n        Animation.tweeners[prop].unshift(callback);\n      }\n    },\n    prefilters: [defaultPrefilter],\n    prefilter: function prefilter(callback, prepend) {\n      if (prepend) {\n        Animation.prefilters.unshift(callback);\n      } else {\n        Animation.prefilters.push(callback);\n      }\n    }\n  });\n\n  jQuery.speed = function (speed, easing, fn) {\n    var opt = speed && _typeof(speed) === \"object\" ? jQuery.extend({}, speed) : {\n      complete: fn || !fn && easing || isFunction(speed) && speed,\n      duration: speed,\n      easing: fn && easing || easing && !isFunction(easing) && easing\n    }; // Go to the end state if fx are off\n\n    if (jQuery.fx.off) {\n      opt.duration = 0;\n    } else {\n      if (typeof opt.duration !== \"number\") {\n        if (opt.duration in jQuery.fx.speeds) {\n          opt.duration = jQuery.fx.speeds[opt.duration];\n        } else {\n          opt.duration = jQuery.fx.speeds._default;\n        }\n      }\n    } // Normalize opt.queue - true/undefined/null -> \"fx\"\n\n\n    if (opt.queue == null || opt.queue === true) {\n      opt.queue = \"fx\";\n    } // Queueing\n\n\n    opt.old = opt.complete;\n\n    opt.complete = function () {\n      if (isFunction(opt.old)) {\n        opt.old.call(this);\n      }\n\n      if (opt.queue) {\n        jQuery.dequeue(this, opt.queue);\n      }\n    };\n\n    return opt;\n  };\n\n  jQuery.fn.extend({\n    fadeTo: function fadeTo(speed, to, easing, callback) {\n      // Show any hidden elements after setting opacity to 0\n      return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show() // Animate to the value specified\n      .end().animate({\n        opacity: to\n      }, speed, easing, callback);\n    },\n    animate: function animate(prop, speed, easing, callback) {\n      var empty = jQuery.isEmptyObject(prop),\n          optall = jQuery.speed(speed, easing, callback),\n          doAnimation = function doAnimation() {\n        // Operate on a copy of prop so per-property easing won't be lost\n        var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately\n\n        if (empty || dataPriv.get(this, \"finish\")) {\n          anim.stop(true);\n        }\n      };\n\n      doAnimation.finish = doAnimation;\n      return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n    },\n    stop: function stop(type, clearQueue, gotoEnd) {\n      var stopQueue = function stopQueue(hooks) {\n        var stop = hooks.stop;\n        delete hooks.stop;\n        stop(gotoEnd);\n      };\n\n      if (typeof type !== \"string\") {\n        gotoEnd = clearQueue;\n        clearQueue = type;\n        type = undefined;\n      }\n\n      if (clearQueue) {\n        this.queue(type || \"fx\", []);\n      }\n\n      return this.each(function () {\n        var dequeue = true,\n            index = type != null && type + \"queueHooks\",\n            timers = jQuery.timers,\n            data = dataPriv.get(this);\n\n        if (index) {\n          if (data[index] && data[index].stop) {\n            stopQueue(data[index]);\n          }\n        } else {\n          for (index in data) {\n            if (data[index] && data[index].stop && rrun.test(index)) {\n              stopQueue(data[index]);\n            }\n          }\n        }\n\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n            timers[index].anim.stop(gotoEnd);\n            dequeue = false;\n            timers.splice(index, 1);\n          }\n        } // Start the next in the queue if the last step wasn't forced.\n        // Timers currently will call their complete callbacks, which\n        // will dequeue but only if they were gotoEnd.\n\n\n        if (dequeue || !gotoEnd) {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    finish: function finish(type) {\n      if (type !== false) {\n        type = type || \"fx\";\n      }\n\n      return this.each(function () {\n        var index,\n            data = dataPriv.get(this),\n            queue = data[type + \"queue\"],\n            hooks = data[type + \"queueHooks\"],\n            timers = jQuery.timers,\n            length = queue ? queue.length : 0; // Enable finishing flag on private data\n\n        data.finish = true; // Empty the queue first\n\n        jQuery.queue(this, type, []);\n\n        if (hooks && hooks.stop) {\n          hooks.stop.call(this, true);\n        } // Look for any active animations, and finish them\n\n\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && timers[index].queue === type) {\n            timers[index].anim.stop(true);\n            timers.splice(index, 1);\n          }\n        } // Look for any animations in the old queue and finish them\n\n\n        for (index = 0; index < length; index++) {\n          if (queue[index] && queue[index].finish) {\n            queue[index].finish.call(this);\n          }\n        } // Turn off finishing flag\n\n\n        delete data.finish;\n      });\n    }\n  });\n  jQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n    var cssFn = jQuery.fn[name];\n\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n    };\n  }); // Generate shortcuts for custom animations\n\n  jQuery.each({\n    slideDown: genFx(\"show\"),\n    slideUp: genFx(\"hide\"),\n    slideToggle: genFx(\"toggle\"),\n    fadeIn: {\n      opacity: \"show\"\n    },\n    fadeOut: {\n      opacity: \"hide\"\n    },\n    fadeToggle: {\n      opacity: \"toggle\"\n    }\n  }, function (name, props) {\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return this.animate(props, speed, easing, callback);\n    };\n  });\n  jQuery.timers = [];\n\n  jQuery.fx.tick = function () {\n    var timer,\n        i = 0,\n        timers = jQuery.timers;\n    fxNow = Date.now();\n\n    for (; i < timers.length; i++) {\n      timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)\n\n      if (!timer() && timers[i] === timer) {\n        timers.splice(i--, 1);\n      }\n    }\n\n    if (!timers.length) {\n      jQuery.fx.stop();\n    }\n\n    fxNow = undefined;\n  };\n\n  jQuery.fx.timer = function (timer) {\n    jQuery.timers.push(timer);\n    jQuery.fx.start();\n  };\n\n  jQuery.fx.interval = 13;\n\n  jQuery.fx.start = function () {\n    if (inProgress) {\n      return;\n    }\n\n    inProgress = true;\n    schedule();\n  };\n\n  jQuery.fx.stop = function () {\n    inProgress = null;\n  };\n\n  jQuery.fx.speeds = {\n    slow: 600,\n    fast: 200,\n    // Default speed\n    _default: 400\n  }; // Based off of the plugin by Clint Helfers, with permission.\n  // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\n\n  jQuery.fn.delay = function (time, type) {\n    time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n    type = type || \"fx\";\n    return this.queue(type, function (next, hooks) {\n      var timeout = window.setTimeout(next, time);\n\n      hooks.stop = function () {\n        window.clearTimeout(timeout);\n      };\n    });\n  };\n\n  (function () {\n    var input = document.createElement(\"input\"),\n        select = document.createElement(\"select\"),\n        opt = select.appendChild(document.createElement(\"option\"));\n    input.type = \"checkbox\"; // Support: Android <=4.3 only\n    // Default value for a checkbox should be \"on\"\n\n    support.checkOn = input.value !== \"\"; // Support: IE <=11 only\n    // Must access selectedIndex to make default options select\n\n    support.optSelected = opt.selected; // Support: IE <=11 only\n    // An input loses its value after becoming a radio\n\n    input = document.createElement(\"input\");\n    input.value = \"t\";\n    input.type = \"radio\";\n    support.radioValue = input.value === \"t\";\n  })();\n\n  var boolHook,\n      attrHandle = jQuery.expr.attrHandle;\n  jQuery.fn.extend({\n    attr: function attr(name, value) {\n      return access(this, jQuery.attr, name, value, arguments.length > 1);\n    },\n    removeAttr: function removeAttr(name) {\n      return this.each(function () {\n        jQuery.removeAttr(this, name);\n      });\n    }\n  });\n  jQuery.extend({\n    attr: function attr(elem, name, value) {\n      var ret,\n          hooks,\n          nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\n\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      } // Fallback to prop when attributes are not supported\n\n\n      if (typeof elem.getAttribute === \"undefined\") {\n        return jQuery.prop(elem, name, value);\n      } // Attribute hooks are determined by the lowercase version\n      // Grab necessary hook if one is defined\n\n\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n      }\n\n      if (value !== undefined) {\n        if (value === null) {\n          jQuery.removeAttr(elem, name);\n          return;\n        }\n\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n\n        elem.setAttribute(name, value + \"\");\n        return value;\n      }\n\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n\n      ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined\n\n      return ret == null ? undefined : ret;\n    },\n    attrHooks: {\n      type: {\n        set: function set(elem, value) {\n          if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n            var val = elem.value;\n            elem.setAttribute(\"type\", value);\n\n            if (val) {\n              elem.value = val;\n            }\n\n            return value;\n          }\n        }\n      }\n    },\n    removeAttr: function removeAttr(elem, value) {\n      var name,\n          i = 0,\n          // Attribute names can contain non-HTML whitespace characters\n      // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n      attrNames = value && value.match(rnothtmlwhite);\n\n      if (attrNames && elem.nodeType === 1) {\n        while (name = attrNames[i++]) {\n          elem.removeAttribute(name);\n        }\n      }\n    }\n  }); // Hooks for boolean attributes\n\n  boolHook = {\n    set: function set(elem, value, name) {\n      if (value === false) {\n        // Remove boolean attributes when set to false\n        jQuery.removeAttr(elem, name);\n      } else {\n        elem.setAttribute(name, name);\n      }\n\n      return name;\n    }\n  };\n  jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n    var getter = attrHandle[name] || jQuery.find.attr;\n\n    attrHandle[name] = function (elem, name, isXML) {\n      var ret,\n          handle,\n          lowercaseName = name.toLowerCase();\n\n      if (!isXML) {\n        // Avoid an infinite loop by temporarily removing this function from the getter\n        handle = attrHandle[lowercaseName];\n        attrHandle[lowercaseName] = ret;\n        ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n        attrHandle[lowercaseName] = handle;\n      }\n\n      return ret;\n    };\n  });\n  var rfocusable = /^(?:input|select|textarea|button)$/i,\n      rclickable = /^(?:a|area)$/i;\n  jQuery.fn.extend({\n    prop: function prop(name, value) {\n      return access(this, jQuery.prop, name, value, arguments.length > 1);\n    },\n    removeProp: function removeProp(name) {\n      return this.each(function () {\n        delete this[jQuery.propFix[name] || name];\n      });\n    }\n  });\n  jQuery.extend({\n    prop: function prop(elem, name, value) {\n      var ret,\n          hooks,\n          nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\n\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      }\n\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        // Fix name and attach hooks\n        name = jQuery.propFix[name] || name;\n        hooks = jQuery.propHooks[name];\n      }\n\n      if (value !== undefined) {\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n\n        return elem[name] = value;\n      }\n\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n\n      return elem[name];\n    },\n    propHooks: {\n      tabIndex: {\n        get: function get(elem) {\n          // Support: IE <=9 - 11 only\n          // elem.tabIndex doesn't always return the\n          // correct value when it hasn't been explicitly set\n          // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n          // Use proper attribute retrieval(#12072)\n          var tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n          if (tabindex) {\n            return parseInt(tabindex, 10);\n          }\n\n          if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n            return 0;\n          }\n\n          return -1;\n        }\n      }\n    },\n    propFix: {\n      \"for\": \"htmlFor\",\n      \"class\": \"className\"\n    }\n  }); // Support: IE <=11 only\n  // Accessing the selectedIndex property\n  // forces the browser to respect setting selected\n  // on the option\n  // The getter ensures a default option is selected\n  // when in an optgroup\n  // eslint rule \"no-unused-expressions\" is disabled for this code\n  // since it considers such accessions noop\n\n  if (!support.optSelected) {\n    jQuery.propHooks.selected = {\n      get: function get(elem) {\n        /* eslint no-unused-expressions: \"off\" */\n        var parent = elem.parentNode;\n\n        if (parent && parent.parentNode) {\n          parent.parentNode.selectedIndex;\n        }\n\n        return null;\n      },\n      set: function set(elem) {\n        /* eslint no-unused-expressions: \"off\" */\n        var parent = elem.parentNode;\n\n        if (parent) {\n          parent.selectedIndex;\n\n          if (parent.parentNode) {\n            parent.parentNode.selectedIndex;\n          }\n        }\n      }\n    };\n  }\n\n  jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n    jQuery.propFix[this.toLowerCase()] = this;\n  }); // Strip and collapse whitespace according to HTML spec\n  // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\n  function stripAndCollapse(value) {\n    var tokens = value.match(rnothtmlwhite) || [];\n    return tokens.join(\" \");\n  }\n\n  function getClass(elem) {\n    return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n  }\n\n  function classesToArray(value) {\n    if (Array.isArray(value)) {\n      return value;\n    }\n\n    if (typeof value === \"string\") {\n      return value.match(rnothtmlwhite) || [];\n    }\n\n    return [];\n  }\n\n  jQuery.fn.extend({\n    addClass: function addClass(value) {\n      var classes,\n          elem,\n          cur,\n          curValue,\n          clazz,\n          j,\n          finalValue,\n          i = 0;\n\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).addClass(value.call(this, j, getClass(this)));\n        });\n      }\n\n      classes = classesToArray(value);\n\n      if (classes.length) {\n        while (elem = this[i++]) {\n          curValue = getClass(elem);\n          cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n          if (cur) {\n            j = 0;\n\n            while (clazz = classes[j++]) {\n              if (cur.indexOf(\" \" + clazz + \" \") < 0) {\n                cur += clazz + \" \";\n              }\n            } // Only assign if different to avoid unneeded rendering.\n\n\n            finalValue = stripAndCollapse(cur);\n\n            if (curValue !== finalValue) {\n              elem.setAttribute(\"class\", finalValue);\n            }\n          }\n        }\n      }\n\n      return this;\n    },\n    removeClass: function removeClass(value) {\n      var classes,\n          elem,\n          cur,\n          curValue,\n          clazz,\n          j,\n          finalValue,\n          i = 0;\n\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).removeClass(value.call(this, j, getClass(this)));\n        });\n      }\n\n      if (!arguments.length) {\n        return this.attr(\"class\", \"\");\n      }\n\n      classes = classesToArray(value);\n\n      if (classes.length) {\n        while (elem = this[i++]) {\n          curValue = getClass(elem); // This expression is here for better compressibility (see addClass)\n\n          cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n          if (cur) {\n            j = 0;\n\n            while (clazz = classes[j++]) {\n              // Remove *all* instances\n              while (cur.indexOf(\" \" + clazz + \" \") > -1) {\n                cur = cur.replace(\" \" + clazz + \" \", \" \");\n              }\n            } // Only assign if different to avoid unneeded rendering.\n\n\n            finalValue = stripAndCollapse(cur);\n\n            if (curValue !== finalValue) {\n              elem.setAttribute(\"class\", finalValue);\n            }\n          }\n        }\n      }\n\n      return this;\n    },\n    toggleClass: function toggleClass(value, stateVal) {\n      var type = _typeof(value),\n          isValidValue = type === \"string\" || Array.isArray(value);\n\n      if (typeof stateVal === \"boolean\" && isValidValue) {\n        return stateVal ? this.addClass(value) : this.removeClass(value);\n      }\n\n      if (isFunction(value)) {\n        return this.each(function (i) {\n          jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n        });\n      }\n\n      return this.each(function () {\n        var className, i, self, classNames;\n\n        if (isValidValue) {\n          // Toggle individual class names\n          i = 0;\n          self = jQuery(this);\n          classNames = classesToArray(value);\n\n          while (className = classNames[i++]) {\n            // Check each className given, space separated list\n            if (self.hasClass(className)) {\n              self.removeClass(className);\n            } else {\n              self.addClass(className);\n            }\n          } // Toggle whole class name\n\n        } else if (value === undefined || type === \"boolean\") {\n          className = getClass(this);\n\n          if (className) {\n            // Store className if set\n            dataPriv.set(this, \"__className__\", className);\n          } // If the element has a class name or if we're passed `false`,\n          // then remove the whole classname (if there was one, the above saved it).\n          // Otherwise bring back whatever was previously saved (if anything),\n          // falling back to the empty string if nothing was stored.\n\n\n          if (this.setAttribute) {\n            this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n          }\n        }\n      });\n    },\n    hasClass: function hasClass(selector) {\n      var className,\n          elem,\n          i = 0;\n      className = \" \" + selector + \" \";\n\n      while (elem = this[i++]) {\n        if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  });\n  var rreturn = /\\r/g;\n  jQuery.fn.extend({\n    val: function val(value) {\n      var hooks,\n          ret,\n          valueIsFunction,\n          elem = this[0];\n\n      if (!arguments.length) {\n        if (elem) {\n          hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n\n          if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n            return ret;\n          }\n\n          ret = elem.value; // Handle most common string cases\n\n          if (typeof ret === \"string\") {\n            return ret.replace(rreturn, \"\");\n          } // Handle cases where value is null/undef or number\n\n\n          return ret == null ? \"\" : ret;\n        }\n\n        return;\n      }\n\n      valueIsFunction = isFunction(value);\n      return this.each(function (i) {\n        var val;\n\n        if (this.nodeType !== 1) {\n          return;\n        }\n\n        if (valueIsFunction) {\n          val = value.call(this, i, jQuery(this).val());\n        } else {\n          val = value;\n        } // Treat null/undefined as \"\"; convert numbers to string\n\n\n        if (val == null) {\n          val = \"\";\n        } else if (typeof val === \"number\") {\n          val += \"\";\n        } else if (Array.isArray(val)) {\n          val = jQuery.map(val, function (value) {\n            return value == null ? \"\" : value + \"\";\n          });\n        }\n\n        hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\n\n        if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n          this.value = val;\n        }\n      });\n    }\n  });\n  jQuery.extend({\n    valHooks: {\n      option: {\n        get: function get(elem) {\n          var val = jQuery.find.attr(elem, \"value\");\n          return val != null ? val : // Support: IE <=10 - 11 only\n          // option.text throws exceptions (#14686, #14858)\n          // Strip and collapse whitespace\n          // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n          stripAndCollapse(jQuery.text(elem));\n        }\n      },\n      select: {\n        get: function get(elem) {\n          var value,\n              option,\n              i,\n              options = elem.options,\n              index = elem.selectedIndex,\n              one = elem.type === \"select-one\",\n              values = one ? null : [],\n              max = one ? index + 1 : options.length;\n\n          if (index < 0) {\n            i = max;\n          } else {\n            i = one ? index : 0;\n          } // Loop through all the selected options\n\n\n          for (; i < max; i++) {\n            option = options[i]; // Support: IE <=9 only\n            // IE8-9 doesn't update selected after form reset (#2551)\n\n            if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n            !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n              // Get the specific value for the option\n              value = jQuery(option).val(); // We don't need an array for one selects\n\n              if (one) {\n                return value;\n              } // Multi-Selects return an array\n\n\n              values.push(value);\n            }\n          }\n\n          return values;\n        },\n        set: function set(elem, value) {\n          var optionSet,\n              option,\n              options = elem.options,\n              values = jQuery.makeArray(value),\n              i = options.length;\n\n          while (i--) {\n            option = options[i];\n            /* eslint-disable no-cond-assign */\n\n            if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n              optionSet = true;\n            }\n            /* eslint-enable no-cond-assign */\n\n          } // Force browsers to behave consistently when non-matching value is set\n\n\n          if (!optionSet) {\n            elem.selectedIndex = -1;\n          }\n\n          return values;\n        }\n      }\n    }\n  }); // Radios and checkboxes getter/setter\n\n  jQuery.each([\"radio\", \"checkbox\"], function () {\n    jQuery.valHooks[this] = {\n      set: function set(elem, value) {\n        if (Array.isArray(value)) {\n          return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n        }\n      }\n    };\n\n    if (!support.checkOn) {\n      jQuery.valHooks[this].get = function (elem) {\n        return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n      };\n    }\n  }); // Return jQuery for attributes-only inclusion\n\n  support.focusin = \"onfocusin\" in window;\n\n  var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n      stopPropagationCallback = function stopPropagationCallback(e) {\n    e.stopPropagation();\n  };\n\n  jQuery.extend(jQuery.event, {\n    trigger: function trigger(event, data, elem, onlyHandlers) {\n      var i,\n          cur,\n          tmp,\n          bubbleType,\n          ontype,\n          handle,\n          special,\n          lastElement,\n          eventPath = [elem || document],\n          type = hasOwn.call(event, \"type\") ? event.type : event,\n          namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n      cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes\n\n      if (elem.nodeType === 3 || elem.nodeType === 8) {\n        return;\n      } // focus/blur morphs to focusin/out; ensure we're not firing them right now\n\n\n      if (rfocusMorph.test(type + jQuery.event.triggered)) {\n        return;\n      }\n\n      if (type.indexOf(\".\") > -1) {\n        // Namespaced trigger; create a regexp to match event type in handle()\n        namespaces = type.split(\".\");\n        type = namespaces.shift();\n        namespaces.sort();\n      }\n\n      ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\n\n      event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\n      event.isTrigger = onlyHandlers ? 2 : 3;\n      event.namespace = namespaces.join(\".\");\n      event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null; // Clean up the event in case it is being reused\n\n      event.result = undefined;\n\n      if (!event.target) {\n        event.target = elem;\n      } // Clone any incoming data and prepend the event, creating the handler arg list\n\n\n      data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines\n\n      special = jQuery.event.special[type] || {};\n\n      if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n        return;\n      } // Determine event propagation path in advance, per W3C events spec (#9951)\n      // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\n\n      if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n        bubbleType = special.delegateType || type;\n\n        if (!rfocusMorph.test(bubbleType + type)) {\n          cur = cur.parentNode;\n        }\n\n        for (; cur; cur = cur.parentNode) {\n          eventPath.push(cur);\n          tmp = cur;\n        } // Only add window if we got to document (e.g., not plain obj or detached DOM)\n\n\n        if (tmp === (elem.ownerDocument || document)) {\n          eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n        }\n      } // Fire handlers on the event path\n\n\n      i = 0;\n\n      while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n        lastElement = cur;\n        event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler\n\n        handle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] && dataPriv.get(cur, \"handle\");\n\n        if (handle) {\n          handle.apply(cur, data);\n        } // Native handler\n\n\n        handle = ontype && cur[ontype];\n\n        if (handle && handle.apply && acceptData(cur)) {\n          event.result = handle.apply(cur, data);\n\n          if (event.result === false) {\n            event.preventDefault();\n          }\n        }\n      }\n\n      event.type = type; // If nobody prevented the default action, do it now\n\n      if (!onlyHandlers && !event.isDefaultPrevented()) {\n        if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n          // Call a native DOM method on the target with the same name as the event.\n          // Don't do default actions on window, that's where global variables be (#6170)\n          if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n            // Don't re-trigger an onFOO event when we call its FOO() method\n            tmp = elem[ontype];\n\n            if (tmp) {\n              elem[ontype] = null;\n            } // Prevent re-triggering of the same event, since we already bubbled it above\n\n\n            jQuery.event.triggered = type;\n\n            if (event.isPropagationStopped()) {\n              lastElement.addEventListener(type, stopPropagationCallback);\n            }\n\n            elem[type]();\n\n            if (event.isPropagationStopped()) {\n              lastElement.removeEventListener(type, stopPropagationCallback);\n            }\n\n            jQuery.event.triggered = undefined;\n\n            if (tmp) {\n              elem[ontype] = tmp;\n            }\n          }\n        }\n      }\n\n      return event.result;\n    },\n    // Piggyback on a donor event to simulate a different one\n    // Used only for `focus(in | out)` events\n    simulate: function simulate(type, elem, event) {\n      var e = jQuery.extend(new jQuery.Event(), event, {\n        type: type,\n        isSimulated: true\n      });\n      jQuery.event.trigger(e, null, elem);\n    }\n  });\n  jQuery.fn.extend({\n    trigger: function trigger(type, data) {\n      return this.each(function () {\n        jQuery.event.trigger(type, data, this);\n      });\n    },\n    triggerHandler: function triggerHandler(type, data) {\n      var elem = this[0];\n\n      if (elem) {\n        return jQuery.event.trigger(type, data, elem, true);\n      }\n    }\n  }); // Support: Firefox <=44\n  // Firefox doesn't have focus(in | out) events\n  // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n  //\n  // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n  // focus(in | out) events fire after focus & blur events,\n  // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n  // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\n  if (!support.focusin) {\n    jQuery.each({\n      focus: \"focusin\",\n      blur: \"focusout\"\n    }, function (orig, fix) {\n      // Attach a single capturing handler on the document while someone wants focusin/focusout\n      var handler = function handler(event) {\n        jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n      };\n\n      jQuery.event.special[fix] = {\n        setup: function setup() {\n          // Handle: regular nodes (via `this.ownerDocument`), window\n          // (via `this.document`) & document (via `this`).\n          var doc = this.ownerDocument || this.document || this,\n              attaches = dataPriv.access(doc, fix);\n\n          if (!attaches) {\n            doc.addEventListener(orig, handler, true);\n          }\n\n          dataPriv.access(doc, fix, (attaches || 0) + 1);\n        },\n        teardown: function teardown() {\n          var doc = this.ownerDocument || this.document || this,\n              attaches = dataPriv.access(doc, fix) - 1;\n\n          if (!attaches) {\n            doc.removeEventListener(orig, handler, true);\n            dataPriv.remove(doc, fix);\n          } else {\n            dataPriv.access(doc, fix, attaches);\n          }\n        }\n      };\n    });\n  }\n\n  var location = window.location;\n  var nonce = {\n    guid: Date.now()\n  };\n  var rquery = /\\?/; // Cross-browser xml parsing\n\n  jQuery.parseXML = function (data) {\n    var xml;\n\n    if (!data || typeof data !== \"string\") {\n      return null;\n    } // Support: IE 9 - 11 only\n    // IE throws on parseFromString with invalid input.\n\n\n    try {\n      xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n    } catch (e) {\n      xml = undefined;\n    }\n\n    if (!xml || xml.getElementsByTagName(\"parsererror\").length) {\n      jQuery.error(\"Invalid XML: \" + data);\n    }\n\n    return xml;\n  };\n\n  var rbracket = /\\[\\]$/,\n      rCRLF = /\\r?\\n/g,\n      rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n      rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n  function buildParams(prefix, obj, traditional, add) {\n    var name;\n\n    if (Array.isArray(obj)) {\n      // Serialize array item.\n      jQuery.each(obj, function (i, v) {\n        if (traditional || rbracket.test(prefix)) {\n          // Treat each array item as a scalar.\n          add(prefix, v);\n        } else {\n          // Item is non-scalar (array or object), encode its numeric index.\n          buildParams(prefix + \"[\" + (_typeof(v) === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n        }\n      });\n    } else if (!traditional && toType(obj) === \"object\") {\n      // Serialize object item.\n      for (name in obj) {\n        buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n      }\n    } else {\n      // Serialize scalar item.\n      add(prefix, obj);\n    }\n  } // Serialize an array of form elements or a set of\n  // key/values into a query string\n\n\n  jQuery.param = function (a, traditional) {\n    var prefix,\n        s = [],\n        add = function add(key, valueOrFunction) {\n      // If value is a function, invoke it and use its return value\n      var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n      s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n    };\n\n    if (a == null) {\n      return \"\";\n    } // If an array was passed in, assume that it is an array of form elements.\n\n\n    if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n      // Serialize the form elements\n      jQuery.each(a, function () {\n        add(this.name, this.value);\n      });\n    } else {\n      // If traditional, encode the \"old\" way (the way 1.3.2 or older\n      // did it), otherwise encode params recursively.\n      for (prefix in a) {\n        buildParams(prefix, a[prefix], traditional, add);\n      }\n    } // Return the resulting serialization\n\n\n    return s.join(\"&\");\n  };\n\n  jQuery.fn.extend({\n    serialize: function serialize() {\n      return jQuery.param(this.serializeArray());\n    },\n    serializeArray: function serializeArray() {\n      return this.map(function () {\n        // Can add propHook for \"elements\" to filter or add form elements\n        var elements = jQuery.prop(this, \"elements\");\n        return elements ? jQuery.makeArray(elements) : this;\n      }).filter(function () {\n        var type = this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\n\n        return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n      }).map(function (_i, elem) {\n        var val = jQuery(this).val();\n\n        if (val == null) {\n          return null;\n        }\n\n        if (Array.isArray(val)) {\n          return jQuery.map(val, function (val) {\n            return {\n              name: elem.name,\n              value: val.replace(rCRLF, \"\\r\\n\")\n            };\n          });\n        }\n\n        return {\n          name: elem.name,\n          value: val.replace(rCRLF, \"\\r\\n\")\n        };\n      }).get();\n    }\n  });\n  var r20 = /%20/g,\n      rhash = /#.*$/,\n      rantiCache = /([?&])_=[^&]*/,\n      rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n      // #7653, #8125, #8152: local protocol detection\n  rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n      rnoContent = /^(?:GET|HEAD)$/,\n      rprotocol = /^\\/\\//,\n\n  /* Prefilters\n   * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n   * 2) These are called:\n   *    - BEFORE asking for a transport\n   *    - AFTER param serialization (s.data is a string if s.processData is true)\n   * 3) key is the dataType\n   * 4) the catchall symbol \"*\" can be used\n   * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n   */\n  prefilters = {},\n\n  /* Transports bindings\n   * 1) key is the dataType\n   * 2) the catchall symbol \"*\" can be used\n   * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n   */\n  transports = {},\n      // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n  allTypes = \"*/\".concat(\"*\"),\n      // Anchor tag for parsing the document origin\n  originAnchor = document.createElement(\"a\");\n  originAnchor.href = location.href; // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\n  function addToPrefiltersOrTransports(structure) {\n    // dataTypeExpression is optional and defaults to \"*\"\n    return function (dataTypeExpression, func) {\n      if (typeof dataTypeExpression !== \"string\") {\n        func = dataTypeExpression;\n        dataTypeExpression = \"*\";\n      }\n\n      var dataType,\n          i = 0,\n          dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n      if (isFunction(func)) {\n        // For each dataType in the dataTypeExpression\n        while (dataType = dataTypes[i++]) {\n          // Prepend if requested\n          if (dataType[0] === \"+\") {\n            dataType = dataType.slice(1) || \"*\";\n            (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append\n          } else {\n            (structure[dataType] = structure[dataType] || []).push(func);\n          }\n        }\n      }\n    };\n  } // Base inspection function for prefilters and transports\n\n\n  function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n    var inspected = {},\n        seekingTransport = structure === transports;\n\n    function inspect(dataType) {\n      var selected;\n      inspected[dataType] = true;\n      jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n        var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\n        if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n          options.dataTypes.unshift(dataTypeOrTransport);\n          inspect(dataTypeOrTransport);\n          return false;\n        } else if (seekingTransport) {\n          return !(selected = dataTypeOrTransport);\n        }\n      });\n      return selected;\n    }\n\n    return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n  } // A special extend for ajax options\n  // that takes \"flat\" options (not to be deep extended)\n  // Fixes #9887\n\n\n  function ajaxExtend(target, src) {\n    var key,\n        deep,\n        flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n    for (key in src) {\n      if (src[key] !== undefined) {\n        (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n      }\n    }\n\n    if (deep) {\n      jQuery.extend(true, target, deep);\n    }\n\n    return target;\n  }\n  /* Handles responses to an ajax request:\n   * - finds the right dataType (mediates between content-type and expected dataType)\n   * - returns the corresponding response\n   */\n\n\n  function ajaxHandleResponses(s, jqXHR, responses) {\n    var ct,\n        type,\n        finalDataType,\n        firstDataType,\n        contents = s.contents,\n        dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process\n\n    while (dataTypes[0] === \"*\") {\n      dataTypes.shift();\n\n      if (ct === undefined) {\n        ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n      }\n    } // Check if we're dealing with a known content-type\n\n\n    if (ct) {\n      for (type in contents) {\n        if (contents[type] && contents[type].test(ct)) {\n          dataTypes.unshift(type);\n          break;\n        }\n      }\n    } // Check to see if we have a response for the expected dataType\n\n\n    if (dataTypes[0] in responses) {\n      finalDataType = dataTypes[0];\n    } else {\n      // Try convertible dataTypes\n      for (type in responses) {\n        if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n          finalDataType = type;\n          break;\n        }\n\n        if (!firstDataType) {\n          firstDataType = type;\n        }\n      } // Or just use first one\n\n\n      finalDataType = finalDataType || firstDataType;\n    } // If we found a dataType\n    // We add the dataType to the list if needed\n    // and return the corresponding response\n\n\n    if (finalDataType) {\n      if (finalDataType !== dataTypes[0]) {\n        dataTypes.unshift(finalDataType);\n      }\n\n      return responses[finalDataType];\n    }\n  }\n  /* Chain conversions given the request and the original response\n   * Also sets the responseXXX fields on the jqXHR instance\n   */\n\n\n  function ajaxConvert(s, response, jqXHR, isSuccess) {\n    var conv2,\n        current,\n        conv,\n        tmp,\n        prev,\n        converters = {},\n        // Work with a copy of dataTypes in case we need to modify it for conversion\n    dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys\n\n    if (dataTypes[1]) {\n      for (conv in s.converters) {\n        converters[conv.toLowerCase()] = s.converters[conv];\n      }\n    }\n\n    current = dataTypes.shift(); // Convert to each sequential dataType\n\n    while (current) {\n      if (s.responseFields[current]) {\n        jqXHR[s.responseFields[current]] = response;\n      } // Apply the dataFilter if provided\n\n\n      if (!prev && isSuccess && s.dataFilter) {\n        response = s.dataFilter(response, s.dataType);\n      }\n\n      prev = current;\n      current = dataTypes.shift();\n\n      if (current) {\n        // There's only work to do if current dataType is non-auto\n        if (current === \"*\") {\n          current = prev; // Convert response if prev dataType is non-auto and differs from current\n        } else if (prev !== \"*\" && prev !== current) {\n          // Seek a direct converter\n          conv = converters[prev + \" \" + current] || converters[\"* \" + current]; // If none found, seek a pair\n\n          if (!conv) {\n            for (conv2 in converters) {\n              // If conv2 outputs current\n              tmp = conv2.split(\" \");\n\n              if (tmp[1] === current) {\n                // If prev can be converted to accepted input\n                conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n\n                if (conv) {\n                  // Condense equivalence converters\n                  if (conv === true) {\n                    conv = converters[conv2]; // Otherwise, insert the intermediate dataType\n                  } else if (converters[conv2] !== true) {\n                    current = tmp[0];\n                    dataTypes.unshift(tmp[1]);\n                  }\n\n                  break;\n                }\n              }\n            }\n          } // Apply converter (if not an equivalence)\n\n\n          if (conv !== true) {\n            // Unless errors are allowed to bubble, catch and return them\n            if (conv && s[\"throws\"]) {\n              response = conv(response);\n            } else {\n              try {\n                response = conv(response);\n              } catch (e) {\n                return {\n                  state: \"parsererror\",\n                  error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n                };\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return {\n      state: \"success\",\n      data: response\n    };\n  }\n\n  jQuery.extend({\n    // Counter for holding the number of active queries\n    active: 0,\n    // Last-Modified header cache for next request\n    lastModified: {},\n    etag: {},\n    ajaxSettings: {\n      url: location.href,\n      type: \"GET\",\n      isLocal: rlocalProtocol.test(location.protocol),\n      global: true,\n      processData: true,\n      async: true,\n      contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n      /*\n      timeout: 0,\n      data: null,\n      dataType: null,\n      username: null,\n      password: null,\n      cache: null,\n      throws: false,\n      traditional: false,\n      headers: {},\n      */\n      accepts: {\n        \"*\": allTypes,\n        text: \"text/plain\",\n        html: \"text/html\",\n        xml: \"application/xml, text/xml\",\n        json: \"application/json, text/javascript\"\n      },\n      contents: {\n        xml: /\\bxml\\b/,\n        html: /\\bhtml/,\n        json: /\\bjson\\b/\n      },\n      responseFields: {\n        xml: \"responseXML\",\n        text: \"responseText\",\n        json: \"responseJSON\"\n      },\n      // Data converters\n      // Keys separate source (or catchall \"*\") and destination types with a single space\n      converters: {\n        // Convert anything to text\n        \"* text\": String,\n        // Text to html (true = no transformation)\n        \"text html\": true,\n        // Evaluate text as a json expression\n        \"text json\": JSON.parse,\n        // Parse text as xml\n        \"text xml\": jQuery.parseXML\n      },\n      // For options that shouldn't be deep extended:\n      // you can add your own custom options here if\n      // and when you create one that shouldn't be\n      // deep extended (see ajaxExtend)\n      flatOptions: {\n        url: true,\n        context: true\n      }\n    },\n    // Creates a full fledged settings object into target\n    // with both ajaxSettings and settings fields.\n    // If target is omitted, writes into ajaxSettings.\n    ajaxSetup: function ajaxSetup(target, settings) {\n      return settings ? // Building a settings object\n      ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n      ajaxExtend(jQuery.ajaxSettings, target);\n    },\n    ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n    ajaxTransport: addToPrefiltersOrTransports(transports),\n    // Main method\n    ajax: function ajax(url, options) {\n      // If url is an object, simulate pre-1.5 signature\n      if (_typeof(url) === \"object\") {\n        options = url;\n        url = undefined;\n      } // Force options to be an object\n\n\n      options = options || {};\n\n      var transport,\n          // URL without anti-cache param\n      cacheURL,\n          // Response headers\n      responseHeadersString,\n          responseHeaders,\n          // timeout handle\n      timeoutTimer,\n          // Url cleanup var\n      urlAnchor,\n          // Request state (becomes false upon send and true upon completion)\n      completed,\n          // To know if global events are to be dispatched\n      fireGlobals,\n          // Loop variable\n      i,\n          // uncached part of the url\n      uncached,\n          // Create the final options object\n      s = jQuery.ajaxSetup({}, options),\n          // Callbacks context\n      callbackContext = s.context || s,\n          // Context for global events is callbackContext if it is a DOM node or jQuery collection\n      globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n          // Deferreds\n      deferred = jQuery.Deferred(),\n          completeDeferred = jQuery.Callbacks(\"once memory\"),\n          // Status-dependent callbacks\n      _statusCode = s.statusCode || {},\n          // Headers (they are sent all at once)\n      requestHeaders = {},\n          requestHeadersNames = {},\n          // Default abort message\n      strAbort = \"canceled\",\n          // Fake xhr\n      jqXHR = {\n        readyState: 0,\n        // Builds headers hashtable if needed\n        getResponseHeader: function getResponseHeader(key) {\n          var match;\n\n          if (completed) {\n            if (!responseHeaders) {\n              responseHeaders = {};\n\n              while (match = rheaders.exec(responseHeadersString)) {\n                responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n              }\n            }\n\n            match = responseHeaders[key.toLowerCase() + \" \"];\n          }\n\n          return match == null ? null : match.join(\", \");\n        },\n        // Raw string\n        getAllResponseHeaders: function getAllResponseHeaders() {\n          return completed ? responseHeadersString : null;\n        },\n        // Caches the header\n        setRequestHeader: function setRequestHeader(name, value) {\n          if (completed == null) {\n            name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n            requestHeaders[name] = value;\n          }\n\n          return this;\n        },\n        // Overrides response content-type header\n        overrideMimeType: function overrideMimeType(type) {\n          if (completed == null) {\n            s.mimeType = type;\n          }\n\n          return this;\n        },\n        // Status-dependent callbacks\n        statusCode: function statusCode(map) {\n          var code;\n\n          if (map) {\n            if (completed) {\n              // Execute the appropriate callbacks\n              jqXHR.always(map[jqXHR.status]);\n            } else {\n              // Lazy-add the new callbacks in a way that preserves old ones\n              for (code in map) {\n                _statusCode[code] = [_statusCode[code], map[code]];\n              }\n            }\n          }\n\n          return this;\n        },\n        // Cancel the request\n        abort: function abort(statusText) {\n          var finalText = statusText || strAbort;\n\n          if (transport) {\n            transport.abort(finalText);\n          }\n\n          done(0, finalText);\n          return this;\n        }\n      }; // Attach deferreds\n\n\n      deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)\n      // Handle falsy url in the settings object (#10093: consistency with old signature)\n      // We also use the url parameter if available\n\n      s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\"); // Alias method option to type as per ticket #12004\n\n      s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list\n\n      s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"]; // A cross-domain request is in order when the origin doesn't match the current origin.\n\n      if (s.crossDomain == null) {\n        urlAnchor = document.createElement(\"a\"); // Support: IE <=8 - 11, Edge 12 - 15\n        // IE throws exception on accessing the href property if url is malformed,\n        // e.g. http://example.com:80x/\n\n        try {\n          urlAnchor.href = s.url; // Support: IE <=8 - 11 only\n          // Anchor's host property isn't correctly set when s.url is relative\n\n          urlAnchor.href = urlAnchor.href;\n          s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n        } catch (e) {\n          // If there is an error parsing the URL, assume it is crossDomain,\n          // it can be rejected by the transport if it is invalid\n          s.crossDomain = true;\n        }\n      } // Convert data if not already a string\n\n\n      if (s.data && s.processData && typeof s.data !== \"string\") {\n        s.data = jQuery.param(s.data, s.traditional);\n      } // Apply prefilters\n\n\n      inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there\n\n      if (completed) {\n        return jqXHR;\n      } // We can fire global events as of now if asked to\n      // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\n\n      fireGlobals = jQuery.event && s.global; // Watch for a new set of requests\n\n      if (fireGlobals && jQuery.active++ === 0) {\n        jQuery.event.trigger(\"ajaxStart\");\n      } // Uppercase the type\n\n\n      s.type = s.type.toUpperCase(); // Determine if request has content\n\n      s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since\n      // and/or If-None-Match header later on\n      // Remove hash to simplify url manipulation\n\n      cacheURL = s.url.replace(rhash, \"\"); // More options handling for requests with no content\n\n      if (!s.hasContent) {\n        // Remember the hash so we can put it back\n        uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url\n\n        if (s.data && (s.processData || typeof s.data === \"string\")) {\n          cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data; // #9682: remove data so that it's not used in an eventual retry\n\n          delete s.data;\n        } // Add or update anti-cache param if needed\n\n\n        if (s.cache === false) {\n          cacheURL = cacheURL.replace(rantiCache, \"$1\");\n          uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce.guid++ + uncached;\n        } // Put hash and anti-cache on the URL that will be requested (gh-1732)\n\n\n        s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)\n      } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n        s.data = s.data.replace(r20, \"+\");\n      } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\n\n      if (s.ifModified) {\n        if (jQuery.lastModified[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n        }\n\n        if (jQuery.etag[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n        }\n      } // Set the correct header, if data is being sent\n\n\n      if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n        jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n      } // Set the Accepts header for the server, depending on the dataType\n\n\n      jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]); // Check for headers option\n\n      for (i in s.headers) {\n        jqXHR.setRequestHeader(i, s.headers[i]);\n      } // Allow custom headers/mimetypes and early abort\n\n\n      if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n        // Abort if not done already and return\n        return jqXHR.abort();\n      } // Aborting is no longer a cancellation\n\n\n      strAbort = \"abort\"; // Install callbacks on deferreds\n\n      completeDeferred.add(s.complete);\n      jqXHR.done(s.success);\n      jqXHR.fail(s.error); // Get transport\n\n      transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort\n\n      if (!transport) {\n        done(-1, \"No Transport\");\n      } else {\n        jqXHR.readyState = 1; // Send global event\n\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n        } // If request was aborted inside ajaxSend, stop there\n\n\n        if (completed) {\n          return jqXHR;\n        } // Timeout\n\n\n        if (s.async && s.timeout > 0) {\n          timeoutTimer = window.setTimeout(function () {\n            jqXHR.abort(\"timeout\");\n          }, s.timeout);\n        }\n\n        try {\n          completed = false;\n          transport.send(requestHeaders, done);\n        } catch (e) {\n          // Rethrow post-completion exceptions\n          if (completed) {\n            throw e;\n          } // Propagate others as results\n\n\n          done(-1, e);\n        }\n      } // Callback for when everything is done\n\n\n      function done(status, nativeStatusText, responses, headers) {\n        var isSuccess,\n            success,\n            error,\n            response,\n            modified,\n            statusText = nativeStatusText; // Ignore repeat invocations\n\n        if (completed) {\n          return;\n        }\n\n        completed = true; // Clear timeout if it exists\n\n        if (timeoutTimer) {\n          window.clearTimeout(timeoutTimer);\n        } // Dereference transport for early garbage collection\n        // (no matter how long the jqXHR object will be used)\n\n\n        transport = undefined; // Cache response headers\n\n        responseHeadersString = headers || \"\"; // Set readyState\n\n        jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful\n\n        isSuccess = status >= 200 && status < 300 || status === 304; // Get response data\n\n        if (responses) {\n          response = ajaxHandleResponses(s, jqXHR, responses);\n        } // Use a noop converter for missing script\n\n\n        if (!isSuccess && jQuery.inArray(\"script\", s.dataTypes) > -1) {\n          s.converters[\"text script\"] = function () {};\n        } // Convert no matter what (that way responseXXX fields are always set)\n\n\n        response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining\n\n        if (isSuccess) {\n          // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n          if (s.ifModified) {\n            modified = jqXHR.getResponseHeader(\"Last-Modified\");\n\n            if (modified) {\n              jQuery.lastModified[cacheURL] = modified;\n            }\n\n            modified = jqXHR.getResponseHeader(\"etag\");\n\n            if (modified) {\n              jQuery.etag[cacheURL] = modified;\n            }\n          } // if no content\n\n\n          if (status === 204 || s.type === \"HEAD\") {\n            statusText = \"nocontent\"; // if not modified\n          } else if (status === 304) {\n            statusText = \"notmodified\"; // If we have data, let's convert it\n          } else {\n            statusText = response.state;\n            success = response.data;\n            error = response.error;\n            isSuccess = !error;\n          }\n        } else {\n          // Extract error from statusText and normalize for non-aborts\n          error = statusText;\n\n          if (status || !statusText) {\n            statusText = \"error\";\n\n            if (status < 0) {\n              status = 0;\n            }\n          }\n        } // Set data for the fake xhr object\n\n\n        jqXHR.status = status;\n        jqXHR.statusText = (nativeStatusText || statusText) + \"\"; // Success/Error\n\n        if (isSuccess) {\n          deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n        } else {\n          deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n        } // Status-dependent callbacks\n\n\n        jqXHR.statusCode(_statusCode);\n        _statusCode = undefined;\n\n        if (fireGlobals) {\n          globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n        } // Complete\n\n\n        completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]); // Handle the global AJAX counter\n\n          if (! --jQuery.active) {\n            jQuery.event.trigger(\"ajaxStop\");\n          }\n        }\n      }\n\n      return jqXHR;\n    },\n    getJSON: function getJSON(url, data, callback) {\n      return jQuery.get(url, data, callback, \"json\");\n    },\n    getScript: function getScript(url, callback) {\n      return jQuery.get(url, undefined, callback, \"script\");\n    }\n  });\n  jQuery.each([\"get\", \"post\"], function (_i, method) {\n    jQuery[method] = function (url, data, callback, type) {\n      // Shift arguments if data argument was omitted\n      if (isFunction(data)) {\n        type = type || callback;\n        callback = data;\n        data = undefined;\n      } // The url can be an options object (which then must have .url)\n\n\n      return jQuery.ajax(jQuery.extend({\n        url: url,\n        type: method,\n        dataType: type,\n        data: data,\n        success: callback\n      }, jQuery.isPlainObject(url) && url));\n    };\n  });\n  jQuery.ajaxPrefilter(function (s) {\n    var i;\n\n    for (i in s.headers) {\n      if (i.toLowerCase() === \"content-type\") {\n        s.contentType = s.headers[i] || \"\";\n      }\n    }\n  });\n\n  jQuery._evalUrl = function (url, options, doc) {\n    return jQuery.ajax({\n      url: url,\n      // Make this explicit, since user can override this through ajaxSetup (#11264)\n      type: \"GET\",\n      dataType: \"script\",\n      cache: true,\n      async: false,\n      global: false,\n      // Only evaluate the response if it is successful (gh-4126)\n      // dataFilter is not invoked for failure responses, so using it instead\n      // of the default converter is kludgy but it works.\n      converters: {\n        \"text script\": function textScript() {}\n      },\n      dataFilter: function dataFilter(response) {\n        jQuery.globalEval(response, options, doc);\n      }\n    });\n  };\n\n  jQuery.fn.extend({\n    wrapAll: function wrapAll(html) {\n      var wrap;\n\n      if (this[0]) {\n        if (isFunction(html)) {\n          html = html.call(this[0]);\n        } // The elements to wrap the target around\n\n\n        wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n        if (this[0].parentNode) {\n          wrap.insertBefore(this[0]);\n        }\n\n        wrap.map(function () {\n          var elem = this;\n\n          while (elem.firstElementChild) {\n            elem = elem.firstElementChild;\n          }\n\n          return elem;\n        }).append(this);\n      }\n\n      return this;\n    },\n    wrapInner: function wrapInner(html) {\n      if (isFunction(html)) {\n        return this.each(function (i) {\n          jQuery(this).wrapInner(html.call(this, i));\n        });\n      }\n\n      return this.each(function () {\n        var self = jQuery(this),\n            contents = self.contents();\n\n        if (contents.length) {\n          contents.wrapAll(html);\n        } else {\n          self.append(html);\n        }\n      });\n    },\n    wrap: function wrap(html) {\n      var htmlIsFunction = isFunction(html);\n      return this.each(function (i) {\n        jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n      });\n    },\n    unwrap: function unwrap(selector) {\n      this.parent(selector).not(\"body\").each(function () {\n        jQuery(this).replaceWith(this.childNodes);\n      });\n      return this;\n    }\n  });\n\n  jQuery.expr.pseudos.hidden = function (elem) {\n    return !jQuery.expr.pseudos.visible(elem);\n  };\n\n  jQuery.expr.pseudos.visible = function (elem) {\n    return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n  };\n\n  jQuery.ajaxSettings.xhr = function () {\n    try {\n      return new window.XMLHttpRequest();\n    } catch (e) {}\n  };\n\n  var xhrSuccessStatus = {\n    // File protocol always yields status code 0, assume 200\n    0: 200,\n    // Support: IE <=9 only\n    // #1450: sometimes IE returns 1223 when it should be 204\n    1223: 204\n  },\n      xhrSupported = jQuery.ajaxSettings.xhr();\n  support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n  support.ajax = xhrSupported = !!xhrSupported;\n  jQuery.ajaxTransport(function (options) {\n    var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest\n\n\n    if (support.cors || xhrSupported && !options.crossDomain) {\n      return {\n        send: function send(headers, complete) {\n          var i,\n              xhr = options.xhr();\n          xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided\n\n          if (options.xhrFields) {\n            for (i in options.xhrFields) {\n              xhr[i] = options.xhrFields[i];\n            }\n          } // Override mime type if needed\n\n\n          if (options.mimeType && xhr.overrideMimeType) {\n            xhr.overrideMimeType(options.mimeType);\n          } // X-Requested-With header\n          // For cross-domain requests, seeing as conditions for a preflight are\n          // akin to a jigsaw puzzle, we simply never set it to be sure.\n          // (it can always be set on a per-request basis or even using ajaxSetup)\n          // For same-domain requests, won't change header if already provided.\n\n\n          if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n            headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n          } // Set headers\n\n\n          for (i in headers) {\n            xhr.setRequestHeader(i, headers[i]);\n          } // Callback\n\n\n          _callback = function callback(type) {\n            return function () {\n              if (_callback) {\n                _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n\n                if (type === \"abort\") {\n                  xhr.abort();\n                } else if (type === \"error\") {\n                  // Support: IE <=9 only\n                  // On a manual native abort, IE9 throws\n                  // errors on any property access that is not readyState\n                  if (typeof xhr.status !== \"number\") {\n                    complete(0, \"error\");\n                  } else {\n                    complete( // File: protocol always yields status 0; see #8605, #14207\n                    xhr.status, xhr.statusText);\n                  }\n                } else {\n                  complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n                  // IE9 has no XHR2 but throws on binary (trac-11426)\n                  // For XHR2 non-text, let the caller handle it (gh-2498)\n                  (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n                    binary: xhr.response\n                  } : {\n                    text: xhr.responseText\n                  }, xhr.getAllResponseHeaders());\n                }\n              }\n            };\n          }; // Listen to events\n\n\n          xhr.onload = _callback();\n          errorCallback = xhr.onerror = xhr.ontimeout = _callback(\"error\"); // Support: IE 9 only\n          // Use onreadystatechange to replace onabort\n          // to handle uncaught aborts\n\n          if (xhr.onabort !== undefined) {\n            xhr.onabort = errorCallback;\n          } else {\n            xhr.onreadystatechange = function () {\n              // Check readyState before timeout as it changes\n              if (xhr.readyState === 4) {\n                // Allow onerror to be called first,\n                // but that will not handle a native abort\n                // Also, save errorCallback to a variable\n                // as xhr.onerror cannot be accessed\n                window.setTimeout(function () {\n                  if (_callback) {\n                    errorCallback();\n                  }\n                });\n              }\n            };\n          } // Create the abort callback\n\n\n          _callback = _callback(\"abort\");\n\n          try {\n            // Do send the request (this may raise an exception)\n            xhr.send(options.hasContent && options.data || null);\n          } catch (e) {\n            // #14683: Only rethrow if this hasn't been notified as an error yet\n            if (_callback) {\n              throw e;\n            }\n          }\n        },\n        abort: function abort() {\n          if (_callback) {\n            _callback();\n          }\n        }\n      };\n    }\n  }); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\n  jQuery.ajaxPrefilter(function (s) {\n    if (s.crossDomain) {\n      s.contents.script = false;\n    }\n  }); // Install script dataType\n\n  jQuery.ajaxSetup({\n    accepts: {\n      script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n    },\n    contents: {\n      script: /\\b(?:java|ecma)script\\b/\n    },\n    converters: {\n      \"text script\": function textScript(text) {\n        jQuery.globalEval(text);\n        return text;\n      }\n    }\n  }); // Handle cache's special case and crossDomain\n\n  jQuery.ajaxPrefilter(\"script\", function (s) {\n    if (s.cache === undefined) {\n      s.cache = false;\n    }\n\n    if (s.crossDomain) {\n      s.type = \"GET\";\n    }\n  }); // Bind script tag hack transport\n\n  jQuery.ajaxTransport(\"script\", function (s) {\n    // This transport only deals with cross domain or forced-by-attrs requests\n    if (s.crossDomain || s.scriptAttrs) {\n      var script, _callback2;\n\n      return {\n        send: function send(_, complete) {\n          script = jQuery(\"<script>\").attr(s.scriptAttrs || {}).prop({\n            charset: s.scriptCharset,\n            src: s.url\n          }).on(\"load error\", _callback2 = function callback(evt) {\n            script.remove();\n            _callback2 = null;\n\n            if (evt) {\n              complete(evt.type === \"error\" ? 404 : 200, evt.type);\n            }\n          }); // Use native DOM manipulation to avoid our domManip AJAX trickery\n\n          document.head.appendChild(script[0]);\n        },\n        abort: function abort() {\n          if (_callback2) {\n            _callback2();\n          }\n        }\n      };\n    }\n  });\n  var oldCallbacks = [],\n      rjsonp = /(=)\\?(?=&|$)|\\?\\?/; // Default jsonp settings\n\n  jQuery.ajaxSetup({\n    jsonp: \"callback\",\n    jsonpCallback: function jsonpCallback() {\n      var callback = oldCallbacks.pop() || jQuery.expando + \"_\" + nonce.guid++;\n      this[callback] = true;\n      return callback;\n    }\n  }); // Detect, normalize options and install callbacks for jsonp requests\n\n  jQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n    var callbackName,\n        overwritten,\n        responseContainer,\n        jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? \"url\" : typeof s.data === \"string\" && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0 && rjsonp.test(s.data) && \"data\"); // Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\n    if (jsonProp || s.dataTypes[0] === \"jsonp\") {\n      // Get callback name, remembering preexisting value associated with it\n      callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; // Insert callback into url or form data\n\n      if (jsonProp) {\n        s[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n      } else if (s.jsonp !== false) {\n        s.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n      } // Use data converter to retrieve json after script execution\n\n\n      s.converters[\"script json\"] = function () {\n        if (!responseContainer) {\n          jQuery.error(callbackName + \" was not called\");\n        }\n\n        return responseContainer[0];\n      }; // Force json dataType\n\n\n      s.dataTypes[0] = \"json\"; // Install callback\n\n      overwritten = window[callbackName];\n\n      window[callbackName] = function () {\n        responseContainer = arguments;\n      }; // Clean-up function (fires after converters)\n\n\n      jqXHR.always(function () {\n        // If previous value didn't exist - remove it\n        if (overwritten === undefined) {\n          jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value\n        } else {\n          window[callbackName] = overwritten;\n        } // Save back as free\n\n\n        if (s[callbackName]) {\n          // Make sure that re-using the options doesn't screw things around\n          s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use\n\n          oldCallbacks.push(callbackName);\n        } // Call if it was a function and we have a response\n\n\n        if (responseContainer && isFunction(overwritten)) {\n          overwritten(responseContainer[0]);\n        }\n\n        responseContainer = overwritten = undefined;\n      }); // Delegate to script\n\n      return \"script\";\n    }\n  }); // Support: Safari 8 only\n  // In Safari 8 documents created via document.implementation.createHTMLDocument\n  // collapse sibling forms: the second one becomes a child of the first one.\n  // Because of that, this security measure has to be disabled in Safari 8.\n  // https://bugs.webkit.org/show_bug.cgi?id=137337\n\n  support.createHTMLDocument = function () {\n    var body = document.implementation.createHTMLDocument(\"\").body;\n    body.innerHTML = \"<form></form><form></form>\";\n    return body.childNodes.length === 2;\n  }(); // Argument \"data\" should be string of html\n  // context (optional): If specified, the fragment will be created in this context,\n  // defaults to document\n  // keepScripts (optional): If true, will include scripts passed in the html string\n\n\n  jQuery.parseHTML = function (data, context, keepScripts) {\n    if (typeof data !== \"string\") {\n      return [];\n    }\n\n    if (typeof context === \"boolean\") {\n      keepScripts = context;\n      context = false;\n    }\n\n    var base, parsed, scripts;\n\n    if (!context) {\n      // Stop scripts or inline event handlers from being executed immediately\n      // by using document.implementation\n      if (support.createHTMLDocument) {\n        context = document.implementation.createHTMLDocument(\"\"); // Set the base href for the created document\n        // so any parsed elements with URLs\n        // are based on the document's URL (gh-2965)\n\n        base = context.createElement(\"base\");\n        base.href = document.location.href;\n        context.head.appendChild(base);\n      } else {\n        context = document;\n      }\n    }\n\n    parsed = rsingleTag.exec(data);\n    scripts = !keepScripts && []; // Single tag\n\n    if (parsed) {\n      return [context.createElement(parsed[1])];\n    }\n\n    parsed = buildFragment([data], context, scripts);\n\n    if (scripts && scripts.length) {\n      jQuery(scripts).remove();\n    }\n\n    return jQuery.merge([], parsed.childNodes);\n  };\n  /**\n   * Load a url into a page\n   */\n\n\n  jQuery.fn.load = function (url, params, callback) {\n    var selector,\n        type,\n        response,\n        self = this,\n        off = url.indexOf(\" \");\n\n    if (off > -1) {\n      selector = stripAndCollapse(url.slice(off));\n      url = url.slice(0, off);\n    } // If it's a function\n\n\n    if (isFunction(params)) {\n      // We assume that it's the callback\n      callback = params;\n      params = undefined; // Otherwise, build a param string\n    } else if (params && _typeof(params) === \"object\") {\n      type = \"POST\";\n    } // If we have elements to modify, make the request\n\n\n    if (self.length > 0) {\n      jQuery.ajax({\n        url: url,\n        // If \"type\" variable is undefined, then \"GET\" method will be used.\n        // Make value of this field explicit since\n        // user can override it through ajaxSetup method\n        type: type || \"GET\",\n        dataType: \"html\",\n        data: params\n      }).done(function (responseText) {\n        // Save response for use in complete callback\n        response = arguments;\n        self.html(selector ? // If a selector was specified, locate the right elements in a dummy div\n        // Exclude scripts to avoid IE 'Permission Denied' errors\n        jQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result\n        responseText); // If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n        // but they are ignored because response was set above.\n        // If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n      }).always(callback && function (jqXHR, status) {\n        self.each(function () {\n          callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n        });\n      });\n    }\n\n    return this;\n  };\n\n  jQuery.expr.pseudos.animated = function (elem) {\n    return jQuery.grep(jQuery.timers, function (fn) {\n      return elem === fn.elem;\n    }).length;\n  };\n\n  jQuery.offset = {\n    setOffset: function setOffset(elem, options, i) {\n      var curPosition,\n          curLeft,\n          curCSSTop,\n          curTop,\n          curOffset,\n          curCSSLeft,\n          calculatePosition,\n          position = jQuery.css(elem, \"position\"),\n          curElem = jQuery(elem),\n          props = {}; // Set position first, in-case top/left are set even on static elem\n\n      if (position === \"static\") {\n        elem.style.position = \"relative\";\n      }\n\n      curOffset = curElem.offset();\n      curCSSTop = jQuery.css(elem, \"top\");\n      curCSSLeft = jQuery.css(elem, \"left\");\n      calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1; // Need to be able to calculate position if either\n      // top or left is auto and position is either absolute or fixed\n\n      if (calculatePosition) {\n        curPosition = curElem.position();\n        curTop = curPosition.top;\n        curLeft = curPosition.left;\n      } else {\n        curTop = parseFloat(curCSSTop) || 0;\n        curLeft = parseFloat(curCSSLeft) || 0;\n      }\n\n      if (isFunction(options)) {\n        // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n        options = options.call(elem, i, jQuery.extend({}, curOffset));\n      }\n\n      if (options.top != null) {\n        props.top = options.top - curOffset.top + curTop;\n      }\n\n      if (options.left != null) {\n        props.left = options.left - curOffset.left + curLeft;\n      }\n\n      if (\"using\" in options) {\n        options.using.call(elem, props);\n      } else {\n        if (typeof props.top === \"number\") {\n          props.top += \"px\";\n        }\n\n        if (typeof props.left === \"number\") {\n          props.left += \"px\";\n        }\n\n        curElem.css(props);\n      }\n    }\n  };\n  jQuery.fn.extend({\n    // offset() relates an element's border box to the document origin\n    offset: function offset(options) {\n      // Preserve chaining for setter\n      if (arguments.length) {\n        return options === undefined ? this : this.each(function (i) {\n          jQuery.offset.setOffset(this, options, i);\n        });\n      }\n\n      var rect,\n          win,\n          elem = this[0];\n\n      if (!elem) {\n        return;\n      } // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n      // Support: IE <=11 only\n      // Running getBoundingClientRect on a\n      // disconnected node in IE throws an error\n\n\n      if (!elem.getClientRects().length) {\n        return {\n          top: 0,\n          left: 0\n        };\n      } // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\n\n      rect = elem.getBoundingClientRect();\n      win = elem.ownerDocument.defaultView;\n      return {\n        top: rect.top + win.pageYOffset,\n        left: rect.left + win.pageXOffset\n      };\n    },\n    // position() relates an element's margin box to its offset parent's padding box\n    // This corresponds to the behavior of CSS absolute positioning\n    position: function position() {\n      if (!this[0]) {\n        return;\n      }\n\n      var offsetParent,\n          offset,\n          doc,\n          elem = this[0],\n          parentOffset = {\n        top: 0,\n        left: 0\n      }; // position:fixed elements are offset from the viewport, which itself always has zero offset\n\n      if (jQuery.css(elem, \"position\") === \"fixed\") {\n        // Assume position:fixed implies availability of getBoundingClientRect\n        offset = elem.getBoundingClientRect();\n      } else {\n        offset = this.offset(); // Account for the *real* offset parent, which can be the document or its root element\n        // when a statically positioned element is identified\n\n        doc = elem.ownerDocument;\n        offsetParent = elem.offsetParent || doc.documentElement;\n\n        while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.parentNode;\n        }\n\n        if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n          // Incorporate borders into its offset, since they are outside its content origin\n          parentOffset = jQuery(offsetParent).offset();\n          parentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n          parentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n        }\n      } // Subtract parent offsets and element margins\n\n\n      return {\n        top: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n        left: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n      };\n    },\n    // This method will return documentElement in the following cases:\n    // 1) For the element inside the iframe without offsetParent, this method will return\n    //    documentElement of the parent window\n    // 2) For the hidden or detached element\n    // 3) For body or html element, i.e. in case of the html node - it will return itself\n    //\n    // but those exceptions were never presented as a real life use-cases\n    // and might be considered as more preferable results.\n    //\n    // This logic, however, is not guaranteed and can change at any point in the future\n    offsetParent: function offsetParent() {\n      return this.map(function () {\n        var offsetParent = this.offsetParent;\n\n        while (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.offsetParent;\n        }\n\n        return offsetParent || documentElement;\n      });\n    }\n  }); // Create scrollLeft and scrollTop methods\n\n  jQuery.each({\n    scrollLeft: \"pageXOffset\",\n    scrollTop: \"pageYOffset\"\n  }, function (method, prop) {\n    var top = \"pageYOffset\" === prop;\n\n    jQuery.fn[method] = function (val) {\n      return access(this, function (elem, method, val) {\n        // Coalesce documents and windows\n        var win;\n\n        if (isWindow(elem)) {\n          win = elem;\n        } else if (elem.nodeType === 9) {\n          win = elem.defaultView;\n        }\n\n        if (val === undefined) {\n          return win ? win[prop] : elem[method];\n        }\n\n        if (win) {\n          win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);\n        } else {\n          elem[method] = val;\n        }\n      }, method, val, arguments.length);\n    };\n  }); // Support: Safari <=7 - 9.1, Chrome <=37 - 49\n  // Add the top/left cssHooks using jQuery.fn.position\n  // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n  // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n  // getComputedStyle returns percent when specified for top/left/bottom/right;\n  // rather than make the css module depend on the offset module, just check for it here\n\n  jQuery.each([\"top\", \"left\"], function (_i, prop) {\n    jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {\n      if (computed) {\n        computed = curCSS(elem, prop); // If curCSS returns percentage, fallback to offset\n\n        return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + \"px\" : computed;\n      }\n    });\n  }); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\n  jQuery.each({\n    Height: \"height\",\n    Width: \"width\"\n  }, function (name, type) {\n    jQuery.each({\n      padding: \"inner\" + name,\n      content: type,\n      \"\": \"outer\" + name\n    }, function (defaultExtra, funcName) {\n      // Margin is only for outerHeight, outerWidth\n      jQuery.fn[funcName] = function (margin, value) {\n        var chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n            extra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n        return access(this, function (elem, type, value) {\n          var doc;\n\n          if (isWindow(elem)) {\n            // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n            return funcName.indexOf(\"outer\") === 0 ? elem[\"inner\" + name] : elem.document.documentElement[\"client\" + name];\n          } // Get document width or height\n\n\n          if (elem.nodeType === 9) {\n            doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n            // whichever is greatest\n\n            return Math.max(elem.body[\"scroll\" + name], doc[\"scroll\" + name], elem.body[\"offset\" + name], doc[\"offset\" + name], doc[\"client\" + name]);\n          }\n\n          return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat\n          jQuery.css(elem, type, extra) : // Set width or height on the element\n          jQuery.style(elem, type, value, extra);\n        }, type, chainable ? margin : undefined, chainable);\n      };\n    });\n  });\n  jQuery.each([\"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\"], function (_i, type) {\n    jQuery.fn[type] = function (fn) {\n      return this.on(type, fn);\n    };\n  });\n  jQuery.fn.extend({\n    bind: function bind(types, data, fn) {\n      return this.on(types, null, data, fn);\n    },\n    unbind: function unbind(types, fn) {\n      return this.off(types, null, fn);\n    },\n    delegate: function delegate(selector, types, data, fn) {\n      return this.on(types, selector, data, fn);\n    },\n    undelegate: function undelegate(selector, types, fn) {\n      // ( namespace ) or ( selector, types [, fn] )\n      return arguments.length === 1 ? this.off(selector, \"**\") : this.off(types, selector || \"**\", fn);\n    },\n    hover: function hover(fnOver, fnOut) {\n      return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n    }\n  });\n  jQuery.each((\"blur focus focusin focusout resize scroll click dblclick \" + \"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" + \"change select submit keydown keypress keyup contextmenu\").split(\" \"), function (_i, name) {\n    // Handle event binding\n    jQuery.fn[name] = function (data, fn) {\n      return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\n    };\n  }); // Support: Android <=4.0 only\n  // Make sure we trim BOM and NBSP\n\n  var rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g; // Bind a function to a context, optionally partially applying any\n  // arguments.\n  // jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n  // However, it is not slated for removal any time soon\n\n  jQuery.proxy = function (fn, context) {\n    var tmp, args, proxy;\n\n    if (typeof context === \"string\") {\n      tmp = fn[context];\n      context = fn;\n      fn = tmp;\n    } // Quick check to determine if target is callable, in the spec\n    // this throws a TypeError, but we will just return undefined.\n\n\n    if (!isFunction(fn)) {\n      return undefined;\n    } // Simulated bind\n\n\n    args = _slice.call(arguments, 2);\n\n    proxy = function proxy() {\n      return fn.apply(context || this, args.concat(_slice.call(arguments)));\n    }; // Set the guid of unique handler to the same of original handler, so it can be removed\n\n\n    proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n    return proxy;\n  };\n\n  jQuery.holdReady = function (hold) {\n    if (hold) {\n      jQuery.readyWait++;\n    } else {\n      jQuery.ready(true);\n    }\n  };\n\n  jQuery.isArray = Array.isArray;\n  jQuery.parseJSON = JSON.parse;\n  jQuery.nodeName = nodeName;\n  jQuery.isFunction = isFunction;\n  jQuery.isWindow = isWindow;\n  jQuery.camelCase = camelCase;\n  jQuery.type = toType;\n  jQuery.now = Date.now;\n\n  jQuery.isNumeric = function (obj) {\n    // As of jQuery 3.0, isNumeric is limited to\n    // strings and numbers (primitives or objects)\n    // that can be coerced to finite numbers (gh-2662)\n    var type = jQuery.type(obj);\n    return (type === \"number\" || type === \"string\") && // parseFloat NaNs numeric-cast false positives (\"\")\n    // ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n    // subtraction forces infinities to NaN\n    !isNaN(obj - parseFloat(obj));\n  };\n\n  jQuery.trim = function (text) {\n    return text == null ? \"\" : (text + \"\").replace(rtrim, \"\");\n  }; // Register as a named AMD module, since jQuery can be concatenated with other\n  // files that may use define, but not via a proper concatenation script that\n  // understands anonymous AMD modules. A named AMD is safest and most robust\n  // way to register. Lowercase jquery is used because AMD module names are\n  // derived from file names, and jQuery is normally delivered in a lowercase\n  // file name. Do this after creating the global so that if an AMD module wants\n  // to call noConflict to hide this version of jQuery, it will work.\n  // Note that for maximum portability, libraries that are not jQuery should\n  // declare themselves as anonymous modules, and avoid setting a global if an\n  // AMD loader is present. jQuery is a special case. For more information, see\n  // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\n  if (typeof define === \"function\" && define.amd) {\n    define(\"jquery\", [], function () {\n      return jQuery;\n    });\n  }\n\n  var // Map over jQuery in case of overwrite\n  _jQuery = window.jQuery,\n      // Map over the $ in case of overwrite\n  _$ = window.$;\n\n  jQuery.noConflict = function (deep) {\n    if (window.$ === jQuery) {\n      window.$ = _$;\n    }\n\n    if (deep && window.jQuery === jQuery) {\n      window.jQuery = _jQuery;\n    }\n\n    return jQuery;\n  }; // Expose jQuery and $ identifiers, even in AMD\n  // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n  // and CommonJS for browser emulators (#13566)\n\n\n  if (typeof noGlobal === \"undefined\") {\n    window.jQuery = window.$ = jQuery;\n  }\n\n  return jQuery;\n});","export default class ModalForm {\n  constructor({\n    title,\n    url,\n    submitButtonText,\n    modalDidLoad          = function() {},\n    // Right now this is commented out because it needs to properly unbind\n    // events, which we do in this class. If you need this functionality in the\n    // future, be sure to modify modalDidHide at the end so that it can be\n    // invoked by your subclass.\n    // modalDidHide          = function() {},\n    formSubmitDidClick    = function() {},\n    formDidReceiveKeydown = function() {},\n    formDidSubmit         = function() {},\n    formDidSubmitSuccessfully = function() {},\n    formDidNotSubmitSuccessfully = function() {},\n    additionalHandlers    = [],\n  }) {\n\n    this.$modal                       = $('#modal');\n    this.url                          = url;\n    this.title                        = title;\n    this.submitButtonText             = submitButtonText;\n    this.modalDidLoad                 = modalDidLoad;\n    // this.modalDidHide                 = modalDidHide;\n    this.formSubmitDidClick           = formSubmitDidClick;\n    this.formDidReceiveKeydown        = formDidReceiveKeydown;\n    this.formDidSubmit                = formDidSubmit;\n    this.formDidSubmitSuccessfully    = formDidSubmitSuccessfully;\n    this.formDidNotSubmitSuccessfully = formDidNotSubmitSuccessfully;\n    this.additionalHandlers           = additionalHandlers;\n\n    this.bindEvents();\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Modal Control\n  ////////////////////////////////////////////////////////////////////////////////\n  show() {\n    this.$modal.modal('show');\n  }\n\n  hide() {\n    this.$modal.modal('hide');\n  }\n\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Form Control\n  ////////////////////////////////////////////////////////////////////////////////\n  disableSubmit() {\n    this.find('.submit').attr('disabled', true);\n    this.find('#submit-spinner').removeClass('d-none');\n  }\n\n  enableSubmit() {\n    this.find('.submit').attr('disabled', false);\n    this.find('#submit-spinner').addClass('d-none');\n  }\n\n  submit() {\n    const event = new Event('submit', { bubbles: true });\n    this.find('form')[0].dispatchEvent(event);\n  }\n\n  reset() {\n    this.find('form')[0].reset();\n    this.enableSubmit();\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Modal Content API\n  ////////////////////////////////////////////////////////////////////////////////\n  setTitle(title) {\n    this.find('.modal-header h5').html(title);\n  }\n\n  setSubmitButtonText(text) {\n    this.find('.modal-footer .submit').html(text);\n  }\n\n  loadRemoteContent(url) {\n    this.find('.modal-body')\n      .load(url, this.modalDidLoad.bind(this));\n  }\n\n  setContent(content) {\n    this.find('.modal-body').html(content);\n  }\n\n\n  focusOnElement(selector) {\n    this.find(selector).focus();\n  }\n\n  find(selector) {\n    return this.$modal.find(selector);\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Events\n  ////////////////////////////////////////////////////////////////////////////////\n  modalShouldShow(event) {\n    console.log(\"Called modalShouldShow.\");\n    this.setTitle(this.title);\n    this.setSubmitButtonText(this.submitButtonText);\n    this.loadRemoteContent(this.url);\n  }\n\n  modalDidHide(event) {\n    console.log(\"Called modalDidHide.\");\n    this.unbindEvents();\n  }\n\n  bindEvents() {\n    this.$modal.on('show.bs.modal',   this.modalShouldShow.bind(this));\n    this.$modal.on('hidden.bs.modal', this.modalDidHide.bind(this));\n    this.$modal.on('click',        '.submit', this.formSubmitDidClick.bind(this));\n    this.$modal.on('keydown',      'form',    this.formDidReceiveKeydown.bind(this));\n    this.$modal.on('submit',       'form',    this.formDidSubmit.bind(this));\n    this.$modal.on('ajax:success', 'form',    this.formDidSubmitSuccessfully.bind(this));\n    this.$modal.on('ajax:error',   'form',    this.formDidNotSubmitSuccessfully.bind(this));\n    this.additionalHandlers.forEach((handler) => this.$modal.on(...handler));\n  }\n\n  unbindEvents() {\n    this.$modal.off('click',        '.submit');\n    this.$modal.off('keydown',      '.form');\n    this.$modal.off('submit',       'form');\n    this.$modal.off('ajax:success', 'form');\n    this.$modal.off('ajax:error',   'form');\n    this.$modal.off('show.bs.modal');\n    this.$modal.off('hidden.bs.modal');\n\n    this.additionalHandlers.forEach((handler) => this.$modal.off(...handler));\n  }\n\n}\n","import ModalForm from '../../components/modal_form';\n\nexport default class TripFormModalView {\n  constructor({ parentView, url, title, submitButtonText }) {\n    this.parentView = parentView;\n    this.url        = url;\n\n    this.modal = new ModalForm({\n      title:                        title,\n      submitButtonText:             submitButtonText,\n      url:                          this.url,\n      formSubmitDidClick:           this.formSubmitDidClick.bind(this),\n      formDidSubmitSuccessfully:    this.formDidSubmitSuccessfully.bind(this),\n      formDidNotSubmitSuccessfully: this.formDidNotSubmitSuccessfully.bind(this),\n    });\n\n    this.modal.show();\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Modal Events\n  ////////////////////////////////////////////////////////////////////////////////\n  formSubmitDidClick() {\n    this.modal.disableSubmit();\n    this.modal.submit();\n    return false;\n  }\n\n  formDidSubmitSuccessfully(event) {\n    let [data, _, xhr] = event.originalEvent.detail;\n\n    if ('formDidSubmitSuccessfully' in this.parentView) {\n      this.parentView.formDidSubmitSuccessfully(xhr.status, data);\n    }\n\n    this.modal.reset()\n    this.modal.setContent(data.form_html);\n    if (xhr.status == 201) { this.modal.hide(); }\n  }\n\n  formDidNotSubmitSuccessfully(event) {\n    const response = $.parseJSON(event.originalEvent.detail[2].responseText);\n    this.modal.setContent(response.form_html)\n    this.modal.enableSubmit();\n  }\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n  return this;\n}();\n\ntry {\n  // This works if eval is allowed (see CSP)\n  g = g || new Function(\"return this\")();\n} catch (e) {\n  // This works if the window reference is available\n  if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\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\n\nmodule.exports = g;","import ModalForm from '../../components/modal_form';\n\nexport default class TripEntryModalView {\n  constructor({ parentView, url, title, submitButtonText }) {\n    this.parentView = parentView;\n    this.url        = url;\n\n    this.modal = new ModalForm({\n      title:                 title,\n      submitButtonText:      submitButtonText,\n      url:                   this.url,\n      modalDidLoad:          this.modalDidLoad.bind(this),\n      formSubmitDidClick:    this.formSubmitDidClick.bind(this),\n      formDidReceiveKeydown: this.formDidReceiveKeydown.bind(this),\n      formDidSubmit:         this.formDidSubmit.bind(this),\n      formDidSubmitSuccessfully:    this.formDidSubmitSuccessfully.bind(this),\n      formDidNotSubmitSuccessfully: this.formDidNotSubmitSuccessfully.bind(this),\n\n      additionalHandlers: [\n        ['change', '#trip_entry_expense_type_id', this.expenseTypeChanged.bind(this)],\n      ]\n    });\n\n    this.modal.show();\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Modal Events\n  ////////////////////////////////////////////////////////////////////////////////\n  modalDidLoad() {\n    this.modal.focusOnElement('#trip_entry_expense_type_id');\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Form Events\n  ////////////////////////////////////////////////////////////////////////////////\n  formSubmitDidClick() {\n    console.log(\"Hit formSubmitDidClick.\");\n    this.modal.disableSubmit();\n    this.modal.submit();\n\n    return false;\n  }\n\n  formDidReceiveKeydown(event) {\n    if (event.which == 13) { return this.formSubmitDidClick(); }\n  }\n\n  formDidSubmit(event) {\n    console.log(\"Hit formDidSubmit.\");\n    const type     = this.getExpenseType();\n    const category = this.getExpenseCategory();\n    const cost     = this.getCost();\n\n    if (type == 'Advance' && category != 'Cash Advance') {\n      event.preventDefault();\n\n      window.alert(\"Trip entries with 'Advance' type must also have the category set to 'Cash Advance'.\");\n      this.modal.enableSubmit();\n      return false;\n    }\n\n    if (category == 'Fuel Credit' && cost >= 0) {\n      event.preventDefault();\n\n      window.alert(\"Fuel Credit entries must have a negative cost.\");\n      this.modal.enableSubmit();\n      return false;\n    }\n  }\n\n  formDidSubmitSuccessfully(event) {\n    console.log(\"Hit formDidSubmitSuccessfully.\");\n    let data, _, xhr;\n    [data, _, xhr] = event.originalEvent.detail;\n\n    this.parentView.formDidSubmitSuccessfully(xhr.status, data);\n    this.modal.reset();\n\n    if (xhr.status == 201) {\n      this.modal.setContent(data.form_html);\n      this.modalDidLoad();\n    }\n    else {\n      this.modal.hide();\n    }\n  }\n\n  formDidNotSubmitSuccessfully(event) {\n    const response = $.parseJSON(event.originalEvent.detail[2].responseText);\n    this.modal.setContent(response.form_html);\n    this.modal.enableSubmit();\n  }\n\n  expenseTypeChanged() {\n    let $shouldReimburse = this.modal.find('#trip_entry_reimburse_to_driver');\n    const type = this.getExpenseType();\n\n    if (type == 'Revenue') {\n      $shouldReimburse.prop(\"checked\", false);\n      $shouldReimburse.attr('disabled', '');\n    }\n    else {\n      $shouldReimburse.removeAttr('disabled');\n    }\n\n    // All advances are cash advance, so pre-select this.\n    if (type == 'Advance') {\n      let $categorySelect = this.modal.find('#trip_entry_expense_category_id');\n      const cashAdvanceId = $categorySelect\n        .find('option:contains(Cash Advance)')\n        .val();\n      $categorySelect.val(cashAdvanceId);\n    }\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Accessors\n  ////////////////////////////////////////////////////////////////////////////////\n  getExpenseType() {\n    return this.modal\n      .find('#trip_entry_expense_type_id option:selected')\n      .text();\n  }\n\n  getExpenseCategory() {\n    return this.modal\n      .find('#trip_entry_expense_category_id option:selected')\n      .text();\n  }\n\n  getCost() {\n    return new Number(\n      this.modal.find('#trip_entry_cost').val()\n    );\n  }\n\n}\n","module.exports = function (module) {\n  if (!module.webpackPolyfill) {\n    module.deprecate = function () {};\n\n    module.paths = []; // module.parent = undefined by default\n\n    if (!module.children) module.children = [];\n    Object.defineProperty(module, \"loaded\", {\n      enumerable: true,\n      get: function get() {\n        return module.l;\n      }\n    });\n    Object.defineProperty(module, \"id\", {\n      enumerable: true,\n      get: function get() {\n        return module.i;\n      }\n    });\n    module.webpackPolyfill = 1;\n  }\n\n  return module;\n};","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\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' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n\n  return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\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* 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*/\n\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\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 */\n\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\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 */\n\n\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  } // NOTE: 1 DOM access here\n\n\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\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 */\n\n\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n\n  return element.parentNode || element.host;\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 */\n\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\n    case '#document':\n      return element.body;\n  } // Firefox want us to check `-x` and `-y` variations as well\n\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/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\n\n\nfunction getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\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 */\n\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n\n  if (version === 10) {\n    return isIE10;\n  }\n\n  return isIE11 || isIE10;\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 */\n\n\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here\n\n  var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent\n\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  } // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n\n\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\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\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 */\n\n\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\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 */\n\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  } // Here we make sure to give as \"start\" the element that comes first in the DOM\n\n\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1; // Get common ancestor container\n\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer; // 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  } // one of the nodes is inside shadowDOM, find which one\n\n\n  var element1root = getRoot(element1);\n\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\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 */\n\n\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\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 * 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 */\n\n\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\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 * 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\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\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  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function classCallCheck(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\nvar defineProperty = function defineProperty(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 * 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 */\n\n\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\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 */\n\n\nfunction getBoundingClientRect(element) {\n  var rect = {}; // 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\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  }; // subtract scrollbar size from sizes\n\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.width;\n  var height = sizes.height || element.clientHeight || result.height;\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height; // 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\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\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  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  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth); // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\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; // 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\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop);\n    var marginLeft = parseFloat(styles.marginLeft);\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them\n\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  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  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\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  return getClientRect(offset);\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 */\n\n\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n\n  var parentNode = getParentNode(element);\n\n  if (!parentNode) {\n    return false;\n  }\n\n  return isFixed(parentNode);\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\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\n  var el = element.parentElement;\n\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n\n  return el || document.documentElement;\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 */\n\n\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here\n\n  var boundaries = {\n    top: 0,\n    left: 0\n  };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); // Handle viewport case\n\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\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n\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); // In case of HTML, we need a different computation\n\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  } // Add paddings\n\n\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  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n  return width * height;\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 */\n\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  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  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  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  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n  var variation = placement.split('-')[1];\n  return computedPlacement + (variation ? '-' + variation : '');\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 */\n\n\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\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 */\n\n\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\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 */\n\n\nfunction getOppositePlacement(placement) {\n  var hash = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\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 */\n\n\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0]; // Get popper node sizes\n\n  var popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object\n\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  }; // depending by the popper placement we have to compute its offsets slightly differently\n\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  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n\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 * 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 */\n\n\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  } // use `filter` to obtain the same behavior of `find`\n\n\n  return arr.filter(check)[0];\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 */\n\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  } // use `find` + `indexOf` if `findIndex` isn't supported\n\n\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\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 */\n\n\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\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\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n\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      data = fn(data, modifier);\n    }\n  });\n  return data;\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 */\n\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  }; // compute reference element offsets\n\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); // 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\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); // store the computed placement inside `originalPlacement`\n\n  data.originalPlacement = data.placement;\n  data.positionFixed = this.options.positionFixed; // compute the popper offsets\n\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers\n\n  data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n\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 * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\n\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 * 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 */\n\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\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n\n  return null;\n}\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\n\n\nfunction destroy() {\n  this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled\n\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(); // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n\n  return this;\n}\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\n\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, {\n    passive: true\n  });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n\n  scrollParents.push(target);\n}\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, {\n    passive: true\n  }); // Scroll event listener on scroll parents\n\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n  return state;\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 */\n\n\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents\n\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  }); // Reset state\n\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\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 */\n\n\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\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 */\n\n\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(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 */\n\n\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = ''; // add unit if the value is numeric and is one of the following\n\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n\n    element.style[prop] = styles[prop] + unit;\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 */\n\n\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\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 */\n\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); // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n\n  setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties\n\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\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 */\n\n\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); // 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\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n  popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n\n  setStyles(popper, {\n    position: options.positionFixed ? 'fixed' : 'absolute'\n  });\n  return options;\n}\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\n\n\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\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 */\n\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper; // 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\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\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent); // Styles\n\n  var styles = {\n    position: popper.position\n  };\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right'; // 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\n  var prefixedProperty = getSupportedPropertyName('transform'); // 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\n  var left = void 0,\n      top = void 0;\n\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\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\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  } // Attributes\n\n\n  var attributes = {\n    'x-placement': data.placement\n  }; // Update `data` attributes, styles and arrowStyles\n\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n  return data;\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 */\n\n\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\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\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\n  return isRequired;\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 */\n\n\nfunction arrow(data, options) {\n  var _data$offsets$arrow; // arrow depends on keepTogether in order to work\n\n\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier\n\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  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\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  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n  // top/left side\n\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  } // bottom/right side\n\n\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n\n  data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper\n\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper\n\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\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  return data;\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 */\n\n\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n\n  return variation;\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 */\n\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']; // Get rid of `auto` `auto-start` and `auto-end`\n\nvar validPlacements = placements.slice(3);\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 */\n\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\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 * @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 */\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  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n\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    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here\n\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    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    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required\n\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; // flips variation if reference element overflows boundaries\n\n    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); // flips variation if popper content overflows boundaries\n\n    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n    var flippedVariation = flippedVariationByRef || flippedVariationByContent;\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 : ''); // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\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 */\n\n\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\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\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\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 */\n\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]; // If it's not a number it's an operator, I guess\n\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n\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\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\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 * 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 */\n\n\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0]; // 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\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // 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\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\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\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  } // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n\n\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]; // Convert the values with units to absolute pixels to allow our computations\n\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 // 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    }, []) // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  }); // Loop trough the offsets arrays and execute the operations\n\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 * @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 */\n\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  var basePlacement = placement.split('-')[0];\n  var offsets = void 0;\n\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 * @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 */\n\n\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // 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\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\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\n\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n  options.boundaries = boundaries;\n  var order = options.priority;\n  var popper = data.offsets.popper;\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\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\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n\n      return defineProperty({}, mainSide, value);\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  data.offsets.popper = popper;\n  return data;\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 */\n\n\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier\n\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\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 */\n\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 * @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 */\n\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  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n  return data;\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 */\n\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: offset,\n\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n\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    /**\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    /**\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: arrow,\n\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: flip,\n\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    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n\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     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false\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\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n\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    /**\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    /**\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\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n\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 * 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 */\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 * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n// Utils\n// Methods\n\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML 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    }; // make update() debounced, so that it only runs at most once-per-tick\n\n\n    this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it\n\n    this.options = _extends({}, Popper.Defaults, options); // init state\n\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    }; // get reference and popper elements (allow jQuery wrappers)\n\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options\n\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    }); // Refactoring modifiers' list (Object => Array)\n\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    }) // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\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\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    }); // fire the first update to position the popper in the right place\n\n    this.update();\n    var eventsEnabled = this.options.eventsEnabled;\n\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  } // 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     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\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 * 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;\nexport default Popper;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n  var context = this;\n  (function () {\n    (function () {\n      this.Rails = {\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n        buttonClickSelector: {\n          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n          exclude: 'form button'\n        },\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n        formSubmitSelector: 'form',\n        formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n        fileInputSelector: 'input[name][type=file]:not([disabled])',\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n      };\n    }).call(this);\n  }).call(context);\n  var Rails = context.Rails;\n  (function () {\n    (function () {\n      var nonce;\n      nonce = null;\n\n      Rails.loadCSPNonce = function () {\n        var ref;\n        return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n      };\n\n      Rails.cspNonce = function () {\n        return nonce != null ? nonce : Rails.loadCSPNonce();\n      };\n    }).call(this);\n    (function () {\n      var expando, m;\n      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n      Rails.matches = function (element, selector) {\n        if (selector.exclude != null) {\n          return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n        } else {\n          return m.call(element, selector);\n        }\n      };\n\n      expando = '_ujsData';\n\n      Rails.getData = function (element, key) {\n        var ref;\n        return (ref = element[expando]) != null ? ref[key] : void 0;\n      };\n\n      Rails.setData = function (element, key, value) {\n        if (element[expando] == null) {\n          element[expando] = {};\n        }\n\n        return element[expando][key] = value;\n      };\n\n      Rails.$ = function (selector) {\n        return Array.prototype.slice.call(document.querySelectorAll(selector));\n      };\n    }).call(this);\n    (function () {\n      var $, csrfParam, csrfToken;\n      $ = Rails.$;\n\n      csrfToken = Rails.csrfToken = function () {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-token]');\n        return meta && meta.content;\n      };\n\n      csrfParam = Rails.csrfParam = function () {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-param]');\n        return meta && meta.content;\n      };\n\n      Rails.CSRFProtection = function (xhr) {\n        var token;\n        token = csrfToken();\n\n        if (token != null) {\n          return xhr.setRequestHeader('X-CSRF-Token', token);\n        }\n      };\n\n      Rails.refreshCSRFTokens = function () {\n        var param, token;\n        token = csrfToken();\n        param = csrfParam();\n\n        if (token != null && param != null) {\n          return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n            return input.value = token;\n          });\n        }\n      };\n    }).call(this);\n    (function () {\n      var CustomEvent, fire, matches, preventDefault;\n      matches = Rails.matches;\n      CustomEvent = window.CustomEvent;\n\n      if (typeof CustomEvent !== 'function') {\n        CustomEvent = function CustomEvent(event, params) {\n          var evt;\n          evt = document.createEvent('CustomEvent');\n          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n          return evt;\n        };\n\n        CustomEvent.prototype = window.Event.prototype;\n        preventDefault = CustomEvent.prototype.preventDefault;\n\n        CustomEvent.prototype.preventDefault = function () {\n          var result;\n          result = preventDefault.call(this);\n\n          if (this.cancelable && !this.defaultPrevented) {\n            Object.defineProperty(this, 'defaultPrevented', {\n              get: function get() {\n                return true;\n              }\n            });\n          }\n\n          return result;\n        };\n      }\n\n      fire = Rails.fire = function (obj, name, data) {\n        var event;\n        event = new CustomEvent(name, {\n          bubbles: true,\n          cancelable: true,\n          detail: data\n        });\n        obj.dispatchEvent(event);\n        return !event.defaultPrevented;\n      };\n\n      Rails.stopEverything = function (e) {\n        fire(e.target, 'ujs:everythingStopped');\n        e.preventDefault();\n        e.stopPropagation();\n        return e.stopImmediatePropagation();\n      };\n\n      Rails.delegate = function (element, selector, eventType, handler) {\n        return element.addEventListener(eventType, function (e) {\n          var target;\n          target = e.target;\n\n          while (!(!(target instanceof Element) || matches(target, selector))) {\n            target = target.parentNode;\n          }\n\n          if (target instanceof Element && handler.call(target, e) === false) {\n            e.preventDefault();\n            return e.stopPropagation();\n          }\n        });\n      };\n    }).call(this);\n    (function () {\n      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n      AcceptHeaders = {\n        '*': '*/*',\n        text: 'text/plain',\n        html: 'text/html',\n        xml: 'application/xml, text/xml',\n        json: 'application/json, text/javascript',\n        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n      };\n\n      Rails.ajax = function (options) {\n        var xhr;\n        options = prepareOptions(options);\n        xhr = createXHR(options, function () {\n          var ref, response;\n          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n          if (Math.floor(xhr.status / 100) === 2) {\n            if (typeof options.success === \"function\") {\n              options.success(response, xhr.statusText, xhr);\n            }\n          } else {\n            if (typeof options.error === \"function\") {\n              options.error(response, xhr.statusText, xhr);\n            }\n          }\n\n          return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n        });\n\n        if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n          return false;\n        }\n\n        if (xhr.readyState === XMLHttpRequest.OPENED) {\n          return xhr.send(options.data);\n        }\n      };\n\n      prepareOptions = function prepareOptions(options) {\n        options.url = options.url || location.href;\n        options.type = options.type.toUpperCase();\n\n        if (options.type === 'GET' && options.data) {\n          if (options.url.indexOf('?') < 0) {\n            options.url += '?' + options.data;\n          } else {\n            options.url += '&' + options.data;\n          }\n        }\n\n        if (AcceptHeaders[options.dataType] == null) {\n          options.dataType = '*';\n        }\n\n        options.accept = AcceptHeaders[options.dataType];\n\n        if (options.dataType !== '*') {\n          options.accept += ', */*; q=0.01';\n        }\n\n        return options;\n      };\n\n      createXHR = function createXHR(options, done) {\n        var xhr;\n        xhr = new XMLHttpRequest();\n        xhr.open(options.type, options.url, true);\n        xhr.setRequestHeader('Accept', options.accept);\n\n        if (typeof options.data === 'string') {\n          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n        }\n\n        if (!options.crossDomain) {\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n        }\n\n        CSRFProtection(xhr);\n        xhr.withCredentials = !!options.withCredentials;\n\n        xhr.onreadystatechange = function () {\n          if (xhr.readyState === XMLHttpRequest.DONE) {\n            return done(xhr);\n          }\n        };\n\n        return xhr;\n      };\n\n      processResponse = function processResponse(response, type) {\n        var parser, script;\n\n        if (typeof response === 'string' && typeof type === 'string') {\n          if (type.match(/\\bjson\\b/)) {\n            try {\n              response = JSON.parse(response);\n            } catch (error) {}\n          } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n            script = document.createElement('script');\n            script.setAttribute('nonce', cspNonce());\n            script.text = response;\n            document.head.appendChild(script).parentNode.removeChild(script);\n          } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n            parser = new DOMParser();\n            type = type.replace(/;.+/, '');\n\n            try {\n              response = parser.parseFromString(response, type);\n            } catch (error) {}\n          }\n        }\n\n        return response;\n      };\n\n      Rails.href = function (element) {\n        return element.href;\n      };\n\n      Rails.isCrossDomain = function (url) {\n        var e, originAnchor, urlAnchor;\n        originAnchor = document.createElement('a');\n        originAnchor.href = location.href;\n        urlAnchor = document.createElement('a');\n\n        try {\n          urlAnchor.href = url;\n          return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n        } catch (error) {\n          e = error;\n          return true;\n        }\n      };\n    }).call(this);\n    (function () {\n      var matches, toArray;\n      matches = Rails.matches;\n\n      toArray = function toArray(e) {\n        return Array.prototype.slice.call(e);\n      };\n\n      Rails.serializeElement = function (element, additionalParam) {\n        var inputs, params;\n        inputs = [element];\n\n        if (matches(element, 'form')) {\n          inputs = toArray(element.elements);\n        }\n\n        params = [];\n        inputs.forEach(function (input) {\n          if (!input.name || input.disabled) {\n            return;\n          }\n\n          if (matches(input, 'select')) {\n            return toArray(input.options).forEach(function (option) {\n              if (option.selected) {\n                return params.push({\n                  name: input.name,\n                  value: option.value\n                });\n              }\n            });\n          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n            return params.push({\n              name: input.name,\n              value: input.value\n            });\n          }\n        });\n\n        if (additionalParam) {\n          params.push(additionalParam);\n        }\n\n        return params.map(function (param) {\n          if (param.name != null) {\n            return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n          } else {\n            return param;\n          }\n        }).join('&');\n      };\n\n      Rails.formElements = function (form, selector) {\n        if (matches(form, 'form')) {\n          return toArray(form.elements).filter(function (el) {\n            return matches(el, selector);\n          });\n        } else {\n          return toArray(form.querySelectorAll(selector));\n        }\n      };\n    }).call(this);\n    (function () {\n      var allowAction, fire, stopEverything;\n      fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n      Rails.handleConfirm = function (e) {\n        if (!allowAction(this)) {\n          return stopEverything(e);\n        }\n      };\n\n      allowAction = function allowAction(element) {\n        var answer, callback, message;\n        message = element.getAttribute('data-confirm');\n\n        if (!message) {\n          return true;\n        }\n\n        answer = false;\n\n        if (fire(element, 'confirm')) {\n          try {\n            answer = confirm(message);\n          } catch (error) {}\n\n          callback = fire(element, 'confirm:complete', [answer]);\n        }\n\n        return answer && callback;\n      };\n    }).call(this);\n    (function () {\n      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, matches, setData, stopEverything;\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n      Rails.handleDisabledElement = function (e) {\n        var element;\n        element = this;\n\n        if (element.disabled) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.enableElement = function (e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n\n        if (matches(element, Rails.linkDisableSelector)) {\n          return enableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n          return enableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return enableFormElements(element);\n        }\n      };\n\n      Rails.disableElement = function (e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n\n        if (matches(element, Rails.linkDisableSelector)) {\n          return disableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n          return disableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return disableFormElements(element);\n        }\n      };\n\n      disableLinkElement = function disableLinkElement(element) {\n        var replacement;\n        replacement = element.getAttribute('data-disable-with');\n\n        if (replacement != null) {\n          setData(element, 'ujs:enable-with', element.innerHTML);\n          element.innerHTML = replacement;\n        }\n\n        element.addEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableLinkElement = function enableLinkElement(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n\n        if (originalText != null) {\n          element.innerHTML = originalText;\n          setData(element, 'ujs:enable-with', null);\n        }\n\n        element.removeEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      disableFormElements = function disableFormElements(form) {\n        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n      };\n\n      disableFormElement = function disableFormElement(element) {\n        var replacement;\n        replacement = element.getAttribute('data-disable-with');\n\n        if (replacement != null) {\n          if (matches(element, 'button')) {\n            setData(element, 'ujs:enable-with', element.innerHTML);\n            element.innerHTML = replacement;\n          } else {\n            setData(element, 'ujs:enable-with', element.value);\n            element.value = replacement;\n          }\n        }\n\n        element.disabled = true;\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableFormElements = function enableFormElements(form) {\n        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n      };\n\n      enableFormElement = function enableFormElement(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n\n        if (originalText != null) {\n          if (matches(element, 'button')) {\n            element.innerHTML = originalText;\n          } else {\n            element.value = originalText;\n          }\n\n          setData(element, 'ujs:enable-with', null);\n        }\n\n        element.disabled = false;\n        return setData(element, 'ujs:disabled', null);\n      };\n    }).call(this);\n    (function () {\n      var stopEverything;\n      stopEverything = Rails.stopEverything;\n\n      Rails.handleMethod = function (e) {\n        var csrfParam, csrfToken, form, formContent, href, link, method;\n        link = this;\n        method = link.getAttribute('data-method');\n\n        if (!method) {\n          return;\n        }\n\n        href = Rails.href(link);\n        csrfToken = Rails.csrfToken();\n        csrfParam = Rails.csrfParam();\n        form = document.createElement('form');\n        formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n\n        if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n          formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n        }\n\n        formContent += '<input type=\"submit\" />';\n        form.method = 'post';\n        form.action = href;\n        form.target = link.target;\n        form.innerHTML = formContent;\n        form.style.display = 'none';\n        document.body.appendChild(form);\n        form.querySelector('[type=\"submit\"]').click();\n        return stopEverything(e);\n      };\n    }).call(this);\n    (function () {\n      var ajax,\n          fire,\n          getData,\n          isCrossDomain,\n          isRemote,\n          matches,\n          serializeElement,\n          setData,\n          stopEverything,\n          slice = [].slice;\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n      isRemote = function isRemote(element) {\n        var value;\n        value = element.getAttribute('data-remote');\n        return value != null && value !== 'false';\n      };\n\n      Rails.handleRemote = function (e) {\n        var button, data, dataType, element, method, url, withCredentials;\n        element = this;\n\n        if (!isRemote(element)) {\n          return true;\n        }\n\n        if (!fire(element, 'ajax:before')) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n\n        withCredentials = element.getAttribute('data-with-credentials');\n        dataType = element.getAttribute('data-type') || 'script';\n\n        if (matches(element, Rails.formSubmitSelector)) {\n          button = getData(element, 'ujs:submit-button');\n          method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n          if (method.toUpperCase() === 'GET') {\n            url = url.replace(/\\?.*$/, '');\n          }\n\n          if (element.enctype === 'multipart/form-data') {\n            data = new FormData(element);\n\n            if (button != null) {\n              data.append(button.name, button.value);\n            }\n          } else {\n            data = serializeElement(element, button);\n          }\n\n          setData(element, 'ujs:submit-button', null);\n          setData(element, 'ujs:submit-button-formmethod', null);\n          setData(element, 'ujs:submit-button-formaction', null);\n        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n          method = element.getAttribute('data-method');\n          url = element.getAttribute('data-url');\n          data = serializeElement(element, element.getAttribute('data-params'));\n        } else {\n          method = element.getAttribute('data-method');\n          url = Rails.href(element);\n          data = element.getAttribute('data-params');\n        }\n\n        ajax({\n          type: method || 'GET',\n          url: url,\n          data: data,\n          dataType: dataType,\n          beforeSend: function beforeSend(xhr, options) {\n            if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n              return fire(element, 'ajax:send', [xhr]);\n            } else {\n              fire(element, 'ajax:stopped');\n              return false;\n            }\n          },\n          success: function success() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:success', args);\n          },\n          error: function error() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:error', args);\n          },\n          complete: function complete() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:complete', args);\n          },\n          crossDomain: isCrossDomain(url),\n          withCredentials: withCredentials != null && withCredentials !== 'false'\n        });\n        return stopEverything(e);\n      };\n\n      Rails.formSubmitButtonClick = function (e) {\n        var button, form;\n        button = this;\n        form = button.form;\n\n        if (!form) {\n          return;\n        }\n\n        if (button.name) {\n          setData(form, 'ujs:submit-button', {\n            name: button.name,\n            value: button.value\n          });\n        }\n\n        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n      };\n\n      Rails.preventInsignificantClick = function (e) {\n        var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n        link = this;\n        method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n        data = link.getAttribute('data-params');\n        metaClick = e.metaKey || e.ctrlKey;\n        insignificantMetaClick = metaClick && method === 'GET' && !data;\n        nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n        if (nonPrimaryMouseClick || insignificantMetaClick) {\n          return e.stopImmediatePropagation();\n        }\n      };\n    }).call(this);\n    (function () {\n      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n      if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n        if (jQuery.rails) {\n          throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n        }\n\n        jQuery.rails = Rails;\n        jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n          if (!options.crossDomain) {\n            return CSRFProtection(xhr);\n          }\n        });\n      }\n\n      Rails.start = function () {\n        if (window._rails_loaded) {\n          throw new Error('rails-ujs has already been loaded!');\n        }\n\n        window.addEventListener('pageshow', function () {\n          $(Rails.formEnableSelector).forEach(function (el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n          return $(Rails.linkDisableSelector).forEach(function (el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n        });\n        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.linkClickSelector, 'click', disableElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n        delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n        delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n          return setTimeout(function () {\n            return disableElement(e);\n          }, 13);\n        });\n        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n        document.addEventListener('DOMContentLoaded', loadCSPNonce);\n        return window._rails_loaded = true;\n      };\n\n      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n        Rails.start();\n      }\n    }).call(this);\n  }).call(this);\n\n  if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n    module.exports = Rails;\n  } else if (typeof define === \"function\" && define.amd) {\n    define(Rails);\n  }\n}).call(this);","export default class Site {\n  constructor() {\n    this.initPopovers();\n    // this.initCodePrettification();\n    this.initTabHistorification();\n    this.initDatePicker();\n    this.initMultiSelect();\n    this.initRemoteTypeahead();\n  }\n\n  initPopovers() {\n    $(\"a[rel=popover]\").popover();\n\n    // Diff explanation popover\n    $('a#diff_explanation').popover({\n      trigger:   'hover',\n      html:      true,\n      placement: 'bottom',\n      content: function() { \n        var selector = $(this).attr('data-content-css');\n        return $(selector).html();\n      },\n    });\n  }\n\n  initCodePrettification() {\n    // prettyPrint();\n  }\n\n  initTabHistorification() {\n    // If landing on a page with a #! anchor, set the tab as active\n    if (location.hash.substr(0, 2) == \"#!\") {\n      $(\"a[href='#\" + location.hash.substr(2) + \"']\").tab('show');\n    }\n\n    // When showing a tab, if it starts with a hash, change its history to be #!\n    $(\"a[data-toggle='tab']\").on(\"shown.bs.tab\", function(e) {\n      var hash = $(e.target).attr('href');\n\n      if (hash.substr(0, 1) == '#') {\n        location.replace(\"#!\" + hash.substr(1));\n      }\n    });\n  }\n\n  initDatePicker() {\n    $('input.datepicker').datepicker({\n      format:         'yyyy-mm-dd',\n      viewMode:       'years',\n      autoclose:      true,\n      todayBtn:       true,\n      todayHighlight: true,\n    });\n  }\n\n  initMultiSelect() {\n    $('.selectpicker').selectpicker();\n  }\n\n  initRemoteTypeahead() {\n    $(\"[data-toggle='remoteTypeahead']\").remoteTypeahead();\n  }\n}\n","import TripFormModalView from './trip_form_modal_view';\n\nexport default class TripFormView {\n  constructor() {\n    // this.$modal = $('#modal');\n    this.events = [];\n\n    this.displayErrorsForLookupFields();\n    this.observeLookupFields();\n    this.observeCompanyCreateClick();\n    this.observeDriverCreateClick();\n  }\n\n  //\n  // Because we're using lookup fields which utilise hidden ID fields, any\n  // errors on the model actually occur on these fields and are invisible to\n  // the user.\n  //\n  // What we do here is look at each ID field and add the error class to its\n  // corresponding visible lookup field if it's in an error state.\n  //\n  displayErrorsForLookupFields() {\n    const fields = ['broker', 'drive_away', 'pick_up_from', 'deliver_to', 'bill_to', 'driver'];\n\n    for (var field of fields) {\n      const $idField     = $(`div.trip_${field}_id`);\n      const $lookupField = $(`div.trip_${field}_lookup`);\n      const $lookupGroup = $lookupField.find('.input-group');\n\n      if ($idField.hasClass('form-group-invalid')) {\n\n        $lookupField.addClass('form-group-invalid');\n        $lookupGroup.addClass('is-invalid')\n          .attr('aria-invalid', true)\n          .find('input')\n          .addClass('is-invalid')\n          .attr('aria-invalid', true);\n\n        $idField.find('.invalid-feedback')\n          .appendTo($lookupField);\n      }\n    }\n  }\n\n  //\n  // Adds quick lookups for all companies and the driver.\n  //\n  observeLookupFields() {\n    var fields = ['broker', 'drive_away', 'pick_up_from', 'deliver_to', 'bill_to'];\n\n    for (var field of fields) {\n      $(`#trip_${field}_lookup`).remoteTypeahead({\n        predicate: 'name_cont',\n        url: `/${field}s.json`,\n        idSelector: `#trip_${field}_id`,\n      });\n    }\n\n    $(\"#trip_driver_lookup\").remoteTypeahead({\n      predicate: 'full_name_cont',\n      url: '/drivers.json',\n      idSelector: \"#trip_driver_id\",\n      displayKey: (val) => { return val.full_name },\n      additionalParameters: () => { return {company_id_eq: ($('#trip_drive_away_id').val() || '')} }\n    });\n  }\n\n  observeCompanyCreateClick() {\n    $('form.trip').on('click', 'button.new_company', (event) => {\n      console.log(\"New Company button was clicked!\");\n      const href = $(event.currentTarget).attr('href');\n\n      this.modalView = new TripFormModalView({\n        parentView: this,\n        url: href,\n        title: \"Add New Company\",\n        submitButtonText: \"Create Detail\",\n      });\n    });\n  }\n\n  observeDriverCreateClick() {\n    $('form.trip').on('click', 'button.new_driver', (event) => {\n      console.log(\"New Driver button was clicked!\");\n      const href = $(event.currentTarget).attr('href');\n\n      this.modalView = new TripFormModalView({\n        parentView:       this,\n        url:              href,\n        title:            \"Add New Driver\",\n        submitButtonText: \"Create Driver\",\n      });\n    });\n  }\n}\n","import TripModalView from './trip_modal_view';\n\nexport default class TripView {\n  constructor() {\n    this.observeChangeStatusClicked()\n\n    const buttons = [\n      [\"#pick_up\",  \"Pick Up\"],\n      [\"#deliver\",  \"Deliver\"],\n      [\"#finalize\", \"Finalize\"],\n    ];\n\n\n    buttons.forEach(\n      (button) => {\n        console.log(\"Binding on click for\", button);\n        this.observeButtonPress(...button);\n      }\n    );\n  }\n\n  observeChangeStatusClicked() {\n    $('#trip').on('click', 'a#change_status', function(e) {\n      var result = confirm(\"You are about to change the status of a trip. \" +\n                           \"This change might be visible to the customer. \" +\n                           \"This should only be done if a mistake has been \" +\n                           \"made when setting the current status for this \" +\n                           \"trip. Are you sure you want to change this status?\");\n\n      if (result) {\n        $('#status_read').addClass('d-none');\n        $('#status_write').removeClass('d-none');\n      }\n\n      e.preventDefault();\n    });\n  }\n\n  observeButtonPress(selector, text) {\n    $('#trip').on('click', selector, (e) => {\n      e.preventDefault();\n      console.log(`Clicked ${selector} button...`);\n\n      const url       = $(e.currentTarget).attr('href');\n      const title     = `Confirm ${text}`;\n      const submitUrl = $(e.currentTarget).data('submit-url');\n\n      this.modalView = new TripModalView({\n        parentView:       this,\n        url:              url,\n        title:            title,\n        submitButtonText: title,\n        dataSubmitUrl:    submitUrl,\n      });\n\n    });\n  }\n}\n","import ModalForm from '../../components/modal_form';\n\nexport default class TripModalView {\n  constructor({ parentView, url, title, submitButtonText }) {\n    this.parentView = parentView;\n    this.url        = url;\n\n    this.modal = new ModalForm({\n      title:              title,\n      submitButtonText:   submitButtonText,\n      url:                this.url,\n      formDidSubmit:      this.formDidSubmit.bind(this),\n      formSubmitDidClick: this.formSubmitDidClick.bind(this),\n    });\n\n    this.modal.show();\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Modal Events\n  ////////////////////////////////////////////////////////////////////////////////\n  formSubmitDidClick(event) {\n    this.modal.disableSubmit();\n    this.modal.submit();\n  }\n\n  formDidSubmit(event) {\n    // Something funky is happening with this because it's not technically a\n    // remote form: instead, we're using native submit to send the form for\n    // server-side processing / re-rendering.\n    //\n    // In other circumstances, we want to use the proper event bubbling that\n    // happens in ModalForm, but in these limited circumstances it doesn't work.\n    // Hence we need to just submit without triggering an event.\n\n    this.modal.find('form')[0].submit();\n  }\n}\n","export default class TripAttachmentFormView {\n  constructor() {\n    this.fileUploadSelector = '#file-upload';\n\n    this.initFileUpload();\n    this.observeDelete();\n    this.events = [];\n\n  }\n\n  initFileUpload = function() {\n    var $uploader = $(this.fileUploadSelector);\n    if ($uploader.length == 0) { return; }\n\n    $uploader.fileupload({\n      url:       $(\"meta[name='s3-upload-url']\").attr('content'),\n      paramName: 'file',\n      type:      'POST',\n      dropZone:  $(document),\n      add:       this.onFileAdd.bind(this),\n      progress:  this.onFileProgress.bind(this),\n      fail:      this.onFail.bind(this),\n      stop:      this.onStop.bind(this),\n    });\n\n    $(document).on('dragenter', function(e) { \n      $('#drop-zone-overlay').addClass('hovering')\n        .delay(500)\n        .addClass('darken');\n    });\n\n    $('#drop-zone-overlay').on('dragleave', function(e) { \n      $('#drop-zone-overlay').removeClass('darken')\n        .removeClass('hovering');\n    });\n\n    $('#drop-zone-overlay').on('drop', function(e) {\n      $(e.currentTarget).removeClass('darken')\n        .removeClass('hovering');\n    });\n  }\n\n  onFileAdd = function(event, data) {\n    var $row = $('#trip_attachment_tmpl table tbody tr')\n      .first()\n      .clone();\n\n    var actions = $row.find('.actions').remove();\n\n    $row.find('.file_name').text(data.files[0].name);\n    $row.find('.size').text('');\n\n    // TODO: move markup to view\n    $row\n      .append($('<td class=\"actions\"><i class=\"fa.fa-sync.fa-spin\" /></td>'))\n      .appendTo('#trip_attachments table tbody');\n\n    data.context = { el: $row, actions: actions };\n\n    $.ajax({\n      url:      $('#file-upload').data('signing-url'),\n      type:     'GET',\n      dataType: 'json',\n      success:  this.onSignedUrlSuccess.bind(this, data),\n      error:    this.onSignedUrlFailure.bind(this, data),\n      data: {\n        trip_attachment: {\n          file_name: data.files[0].name,\n        },\n      },\n    });\n  }\n\n  onSignedUrlSuccess = function(data, response) {\n    var actions = data.context.el.find('.actions');\n    // TODO: move markup to view\n    actions\n      .empty()\n      .append('<div class=\"progress progress-striped active\"><div class=\"progress-bar\" /></div>');\n\n    data.formData = response;\n    data.submit().done(this.onSuccess.bind(this, data));\n  }\n\n  onSignedUrlFailure = function(data, error) {\n    row.find('.actions').html(\"<i class='fa fa-exclamation-circle'></i>\");\n  }\n\n  onFileProgress = function(event, data) {\n    var pct = parseInt(data.loaded / data.total * 100, 10);\n    data.context.el.find('.progress-bar').css('width', pct + \"%\")\n  }\n\n  onFail = function(event, data) {\n    return;\n  }\n\n  onStop = function(event, data) {\n    return;\n  }\n\n  onSuccess = function(data, scope, success, response) {\n    var key = $(response.responseXML).find('Key').text();\n\n    $.ajax({\n      url:     $(this.fileUploadSelector).data('save-url'),\n      type:    'POST',\n      success: this.onCreateSuccess.bind(this, data),\n      error:   this.onCreateError.bind(this, data),\n      data: {\n        trip_attachment: {\n          file_uid: key,\n        },\n      },\n    });\n  }\n\n  onCreateSuccess = function(data, response) {\n    data.context.el.replaceWith($(response));\n  }\n\n  onCreateError = function(data, error) {\n    return;\n  }\n\n  observeDelete = function() {\n    $(document).on('click', '#trip_attachments table td.actions a.destroy', function(e) {\n      var conf = confirm(\"Are you sure you want to delete this line? You can't undo this deletion -- it is permanent.\");\n\n      if (conf) {\n        var $this = $(e.currentTarget);\n\n        $.ajax({\n          url:      $this.attr('href'),\n          data:     { _method: 'delete' },\n          type:     'post',\n          dataType: 'json',\n\n          success: function(data) {\n            console.log(\"Completed with\", data);\n            $this.parents('tr').remove()\n          },\n        });\n      }\n\n      return false;\n    });\n  }\n}\n","import TripEntryModalView from './trip_entry_modal_view';\n\nexport default class TripEntryFormView {\n  constructor() {\n    this.observeCreateClick();\n    this.observeHoverEdit();\n    this.observeDelete();\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Observers\n  ////////////////////////////////////////////////////////////////////////////////\n  observeCreateClick() {\n    var _this = this;\n\n    $('a#new_trip_entry').click(function(e) {\n      e.preventDefault();\n      const url = $(e.currentTarget).attr('href');\n\n      this.modalView = new TripEntryModalView({\n        parentView: _this,\n        url: url,\n        title: \"Add New Detail\",\n        submitButtonText: \"Create Detail\",\n      });\n    });\n  }\n\n  observeHoverEdit() {\n    var _this = this;\n\n    $(document).on('click', '#trip_entries > table td:not(.actions)', function(e) {\n      const $tr      = $(e.currentTarget).parents('tr');\n      const editable = $tr.data('editable');\n      const url      = $tr.data('edit-url');\n\n      if (editable) {\n        this.modalView = new TripEntryModalView({\n          parentView: _this,\n          url: url,\n          title: \"Editing Detail\",\n          submitButtonText: \"Update Detail\",\n        });\n      }\n    });\n  }\n\n  observeDelete() {\n    var _this = this;\n\n    $(document).on('click', '#trip_entries table td.actions a.destroy', function(e) {\n      let actuallyDelete = confirm(\"Are you sure you want to delete this line? You can't undo this deletion -- it is permanent.\")\n\n      if (actuallyDelete) {\n        var $this = $(e.currentTarget);\n\n        $.ajax({\n          url:      $this.attr('href'),\n          data:     { _method: 'delete' },\n          type:     'post',\n          dataType: 'json',\n          success:  function(data) {\n            console.log(\"Completed with\", data);\n            _this.updateCompositeFields(data.composite_html);\n            $this.parents('tr').remove();\n          },\n        });\n      }\n\n      return false;\n    });\n  }\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Modal Management\n  ////////////////////////////////////////////////////////////////////////////////\n  formDidSubmitSuccessfully(status, data) {\n    (status == 201) ?\n      this.appendToTable(data.row_html) :\n      this.replaceTableRow(data.row_id, data.row_html)\n\n    this.updateCompositeFields(data.composite_html);\n  }\n\n  updateCompositeFields(html) {\n    $('#trip #fiscal').html(html);\n  }\n\n  appendToTable(html) {\n    $('#trip_entries > table').append(html);\n  }\n\n  replaceTableRow(selector, html) {\n    $('#trip_entries > table').find(selector).replaceWith(html);\n  }\n\n};\n","export default class TripQuickOpenView {\n  constructor() {\n    this.setRemoteTypeahead()\n  }\n\n  setRemoteTypeahead() {\n    $('#trip_lookup').remoteTypeahead({\n      idSelector: \"#trip_id\",\n      url:        \"/trips.json\",\n      predicate:  \"internal_id_cont\",\n      displayKey: \"internal_id\",\n      success:    this.onRemoteTypeaheadSuccess.bind(this),\n    });\n  }\n\n  onRemoteTypeaheadSuccess(entity, options) {\n    window.location.pathname = `/trips/${entity.id}`;\n    return true\n  }\n}\n","import TripFormModalView from '../../trips/scripts/trip_form_modal_view';\n\nexport default class UserFormView {\n  constructor() {\n    this.observeDriverLookup();\n    this.observeDriverCreateClick();\n    // this.observeLoaded();\n    // this.observeClosing();\n\n    // this.events = [];\n  }\n\n  observeDriverLookup() {\n    $('#user_driver_lookup').remoteTypeahead({\n      predicate:        'full_name_cont',\n      url:              '/drivers.json',\n      idSelector:       '#user_driver_id',\n      displayKey:       (val) => { return val.full_name },\n    });\n  }\n\n  observeDriverCreateClick() {\n    $('form.user_form').on('click', 'button.new_driver', (event) => {\n      console.log(\"New Driver button was clicked\");\n      const href = $(event.currentTarget).attr('href');\n\n      this.modalView = new TripFormModalView({\n        parentView:       this,\n        url:              href,\n        title:            \"Add New Driver\",\n        submitButtonText: \"Create Driver\",\n      });\n    });\n  }\n\n  formDidSubmitSuccessfully(status, data) {\n    if (status == 201) {\n      const selector = '#user_driver_id';\n\n      $('#user_driver_lookup').val(data.driver.to_select_option);\n      $('#user_driver_id').val(data.driver.id);\n    }\n  }\n}\n","/* eslint no-console:0 */\n\nimport Rails from 'rails-ujs';\nRails.start();\n\n// Library Code\nimport 'code-prettify/src/prettify';                       // Code Prettify\nimport 'font-awesome/css/font-awesome.min.css'             // Font-Awesome\nimport 'popper.js/dist/popper.min.js';                     // Bootstrap\nimport 'bootstrap/dist/js/bootstrap';\nimport 'bootstrap-datepicker/dist/js/bootstrap-datepicker' // Bootstrap datepicker: for dates\nimport 'bootstrap-datepicker/dist/css/bootstrap-datepicker'\nimport 'blueimp-file-upload/js/jquery.fileupload'          // Jquery-file-upload: direct-to-cloud-uploads\nimport 'blueimp-file-upload/css/jquery.fileupload'\nimport 'bootstrap-select/dist/js/bootstrap-select'         // Bootstrap select: multi-select for statuses\nimport 'bootstrap-select/dist/css/bootstrap-select'\nimport 'corejs-typeahead/dist/typeahead.jquery'            // Twitter Typeahead + Wrapper\nimport \"../src/jquery/remote_typeahead\";\n// TODO: Prettify CSS?\n\n// App Proper\nimport '../src/site';\n","/**\n * @license\n * Copyright (C) 2006 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\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 implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview\n * some functions for browser-side pretty printing of code contained in html.\n *\n * <p>\n * For a fairly comprehensive set of languages see the\n * <a href=\"https://github.com/google/code-prettify#for-which-languages-does-it-work\">README</a>\n * file that came with this source.  At a minimum, the lexer should work on a\n * number of languages including C and friends, Java, Python, Bash, SQL, HTML,\n * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk\n * and a subset of Perl, but, because of commenting conventions, doesn't work on\n * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.\n * <p>\n * Usage: <ol>\n * <li> include this source file in an html page via\n *   {@code <script type=\"text/javascript\" src=\"/path/to/prettify.js\"></script>}\n * <li> define style rules.  See the example page for examples.\n * <li> mark the {@code <pre>} and {@code <code>} tags in your source with\n *    {@code class=prettyprint.}\n *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty\n *    printer needs to do more substantial DOM manipulations to support that, so\n *    some css styles may not be preserved.\n * </ol>\n * That's it.  I wanted to keep the API as simple as possible, so there's no\n * need to specify which language the code is in, but if you wish, you can add\n * another class to the {@code <pre>} or {@code <code>} element to specify the\n * language, as in {@code <pre class=\"prettyprint lang-java\">}.  Any class that\n * starts with \"lang-\" followed by a file extension, specifies the file type.\n * See the \"lang-*.js\" files in this directory for code that implements\n * per-language file handlers.\n * <p>\n * Change log:<br>\n * cbeust, 2006/08/22\n * <blockquote>\n *   Java annotations (start with \"@\") are now captured as literals (\"lit\")\n * </blockquote>\n * @requires console\n */\n// JSLint declarations\n\n/*global console, document, navigator, setTimeout, window, define */\n\n/**\n* @typedef {!Array.<number|string>}\n* Alternating indices and the decorations that should be inserted there.\n* The indices are monotonically increasing.\n*/\nvar DecorationsT;\n/**\n* @typedef {!{\n*   sourceNode: !Element,\n*   pre: !(number|boolean),\n*   langExtension: ?string,\n*   numberLines: ?(number|boolean),\n*   sourceCode: ?string,\n*   spans: ?(Array.<number|Node>),\n*   basePos: ?number,\n*   decorations: ?DecorationsT\n* }}\n* <dl>\n*  <dt>sourceNode<dd>the element containing the source\n*  <dt>sourceCode<dd>source as plain text\n*  <dt>pre<dd>truthy if white-space in text nodes\n*     should be considered significant.\n*  <dt>spans<dd> alternating span start indices into source\n*     and the text node or element (e.g. {@code <BR>}) corresponding to that\n*     span.\n*  <dt>decorations<dd>an array of style classes preceded\n*     by the position at which they start in job.sourceCode in order\n*  <dt>basePos<dd>integer position of this.sourceCode in the larger chunk of\n*     source.\n* </dl>\n*/\n\nvar JobT;\n/**\n* @typedef {!{\n*   sourceCode: string,\n*   spans: !(Array.<number|Node>)\n* }}\n* <dl>\n*  <dt>sourceCode<dd>source as plain text\n*  <dt>spans<dd> alternating span start indices into source\n*     and the text node or element (e.g. {@code <BR>}) corresponding to that\n*     span.\n* </dl>\n*/\n\nvar SourceSpansT;\n/** @define {boolean} */\n\nvar IN_GLOBAL_SCOPE = false;\nvar HACK_TO_FIX_JS_INCLUDE_PL;\n/**\n * {@type !{\n *   'createSimpleLexer': function (Array, Array): (function (JobT)),\n *   'registerLangHandler': function (function (JobT), Array.<string>),\n *   'PR_ATTRIB_NAME': string,\n *   'PR_ATTRIB_NAME': string,\n *   'PR_ATTRIB_VALUE': string,\n *   'PR_COMMENT': string,\n *   'PR_DECLARATION': string,\n *   'PR_KEYWORD': string,\n *   'PR_LITERAL': string,\n *   'PR_NOCODE': string,\n *   'PR_PLAIN': string,\n *   'PR_PUNCTUATION': string,\n *   'PR_SOURCE': string,\n *   'PR_STRING': string,\n *   'PR_TAG': string,\n *   'PR_TYPE': string,\n *   'prettyPrintOne': function (string, string, number|boolean),\n *   'prettyPrint': function (?function, ?(HTMLElement|HTMLDocument))\n * }}\n * @const\n */\n\nvar PR;\n/**\n * Split {@code prettyPrint} into multiple timeouts so as not to interfere with\n * UI events.\n * If set to {@code false}, {@code prettyPrint()} is synchronous.\n */\n\nwindow['PR_SHOULD_USE_CONTINUATION'] = true;\n/**\n * Pretty print a chunk of code.\n * @param {string} sourceCodeHtml The HTML to pretty print.\n * @param {string} opt_langExtension The language name to use.\n *     Typically, a filename extension like 'cpp' or 'java'.\n * @param {number|boolean} opt_numberLines True to number lines,\n *     or the 1-indexed number of the first line in sourceCodeHtml.\n * @return {string} code as html, but prettier\n */\n\nvar prettyPrintOne;\n/**\n * Find all the {@code <pre>} and {@code <code>} tags in the DOM with\n * {@code class=prettyprint} and prettify them.\n *\n * @param {Function} opt_whenDone called when prettifying is done.\n * @param {HTMLElement|HTMLDocument} opt_root an element or document\n *   containing all the elements to pretty print.\n *   Defaults to {@code document.body}.\n */\n\nvar prettyPrint;\n\n(function () {\n  var win = window; // Keyword lists for various languages.\n  // We use things that coerce to strings to make them compact when minified\n  // and to defeat aggressive optimizers that fold large string constants.\n\n  var FLOW_CONTROL_KEYWORDS = [\"break,continue,do,else,for,if,return,while\"];\n  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS, \"auto,case,char,const,default,\" + \"double,enum,extern,float,goto,inline,int,long,register,restrict,short,signed,\" + \"sizeof,static,struct,switch,typedef,union,unsigned,void,volatile\"];\n  var COMMON_KEYWORDS = [C_KEYWORDS, \"catch,class,delete,false,import,\" + \"new,operator,private,protected,public,this,throw,true,try,typeof\"];\n  var CPP_KEYWORDS = [COMMON_KEYWORDS, \"alignas,alignof,align_union,asm,axiom,bool,\" + \"concept,concept_map,const_cast,constexpr,decltype,delegate,\" + \"dynamic_cast,explicit,export,friend,generic,late_check,\" + \"mutable,namespace,noexcept,noreturn,nullptr,property,reinterpret_cast,static_assert,\" + \"static_cast,template,typeid,typename,using,virtual,where\"];\n  var JAVA_KEYWORDS = [COMMON_KEYWORDS, \"abstract,assert,boolean,byte,extends,finally,final,implements,import,\" + \"instanceof,interface,null,native,package,strictfp,super,synchronized,\" + \"throws,transient\"];\n  var CSHARP_KEYWORDS = [COMMON_KEYWORDS, \"abstract,add,alias,as,ascending,async,await,base,bool,by,byte,checked,decimal,delegate,descending,\" + \"dynamic,event,finally,fixed,foreach,from,get,global,group,implicit,in,interface,\" + \"internal,into,is,join,let,lock,null,object,out,override,orderby,params,\" + \"partial,readonly,ref,remove,sbyte,sealed,select,set,stackalloc,string,select,uint,ulong,\" + \"unchecked,unsafe,ushort,value,var,virtual,where,yield\"];\n  var COFFEE_KEYWORDS = \"all,and,by,catch,class,else,extends,false,finally,\" + \"for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,\" + \"throw,true,try,unless,until,when,while,yes\";\n  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS, \"abstract,async,await,constructor,debugger,enum,eval,export,function,\" + \"get,implements,instanceof,interface,let,null,set,undefined,var,with,\" + \"yield,Infinity,NaN\"];\n  var PERL_KEYWORDS = \"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,\" + \"goto,if,import,last,local,my,next,no,our,print,package,redo,require,\" + \"sub,undef,unless,until,use,wantarray,while,BEGIN,END\";\n  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, \"and,as,assert,class,def,del,\" + \"elif,except,exec,finally,from,global,import,in,is,lambda,\" + \"nonlocal,not,or,pass,print,raise,try,with,yield,\" + \"False,True,None\"];\n  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, \"alias,and,begin,case,class,\" + \"def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,\" + \"rescue,retry,self,super,then,true,undef,unless,until,when,yield,\" + \"BEGIN,END\"];\n  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, \"case,done,elif,esac,eval,fi,\" + \"function,in,local,set,then,until\"];\n  var ALL_KEYWORDS = [CPP_KEYWORDS, CSHARP_KEYWORDS, JAVA_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS, PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];\n  var C_TYPES = /^(DIR|FILE|array|vector|(de|priority_)?queue|(forward_)?list|stack|(const_)?(reverse_)?iterator|(unordered_)?(multi)?(set|map)|bitset|u?(int|float)\\d*)\\b/; // token style names.  correspond to css classes\n\n  /**\n   * token style for a string literal\n   * @const\n   */\n\n  var PR_STRING = 'str';\n  /**\n   * token style for a keyword\n   * @const\n   */\n\n  var PR_KEYWORD = 'kwd';\n  /**\n   * token style for a comment\n   * @const\n   */\n\n  var PR_COMMENT = 'com';\n  /**\n   * token style for a type\n   * @const\n   */\n\n  var PR_TYPE = 'typ';\n  /**\n   * token style for a literal value.  e.g. 1, null, true.\n   * @const\n   */\n\n  var PR_LITERAL = 'lit';\n  /**\n   * token style for a punctuation string.\n   * @const\n   */\n\n  var PR_PUNCTUATION = 'pun';\n  /**\n   * token style for plain text.\n   * @const\n   */\n\n  var PR_PLAIN = 'pln';\n  /**\n   * token style for an sgml tag.\n   * @const\n   */\n\n  var PR_TAG = 'tag';\n  /**\n   * token style for a markup declaration such as a DOCTYPE.\n   * @const\n   */\n\n  var PR_DECLARATION = 'dec';\n  /**\n   * token style for embedded source.\n   * @const\n   */\n\n  var PR_SOURCE = 'src';\n  /**\n   * token style for an sgml attribute name.\n   * @const\n   */\n\n  var PR_ATTRIB_NAME = 'atn';\n  /**\n   * token style for an sgml attribute value.\n   * @const\n   */\n\n  var PR_ATTRIB_VALUE = 'atv';\n  /**\n   * A class that indicates a section of markup that is not code, e.g. to allow\n   * embedding of line numbers within code listings.\n   * @const\n   */\n\n  var PR_NOCODE = 'nocode';\n  /**\n   * A set of tokens that can precede a regular expression literal in\n   * javascript\n   * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html\n   * has the full list, but I've removed ones that might be problematic when\n   * seen in languages that don't support regular expression literals.\n   *\n   * <p>Specifically, I've removed any keywords that can't precede a regexp\n   * literal in a syntactically legal javascript program, and I've removed the\n   * \"in\" keyword since it's not a keyword in many languages, and might be used\n   * as a count of inches.\n   *\n   * <p>The link above does not accurately describe EcmaScript rules since\n   * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works\n   * very well in practice.\n   *\n   * @private\n   * @const\n   */\n\n  var REGEXP_PRECEDER_PATTERN = '(?:^^\\\\.?|[+-]|[!=]=?=?|\\\\#|%=?|&&?=?|\\\\(|\\\\*=?|[+\\\\-]=|->|\\\\/=?|::?|<<?=?|>>?>?=?|,|;|\\\\?|@|\\\\[|~|{|\\\\^\\\\^?=?|\\\\|\\\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\\\s*'; // CAVEAT: this does not properly handle the case where a regular\n  // expression immediately follows another since a regular expression may\n  // have flags for case-sensitivity and the like.  Having regexp tokens\n  // adjacent is not valid in any language I'm aware of, so I'm punting.\n  // TODO: maybe style special characters inside a regexp as punctuation.\n\n  /**\n   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally\n   * matches the union of the sets of strings matched by the input RegExp.\n   * Since it matches globally, if the input strings have a start-of-input\n   * anchor (/^.../), it is ignored for the purposes of unioning.\n   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.\n   * @return {RegExp} a global regex.\n   */\n\n  function combinePrefixPatterns(regexs) {\n    var capturedGroupIndex = 0;\n    var needToFoldCase = false;\n    var ignoreCase = false;\n\n    for (var i = 0, n = regexs.length; i < n; ++i) {\n      var regex = regexs[i];\n\n      if (regex.ignoreCase) {\n        ignoreCase = true;\n      } else if (/[a-z]/i.test(regex.source.replace(/\\\\u[0-9a-f]{4}|\\\\x[0-9a-f]{2}|\\\\[^ux]/gi, ''))) {\n        needToFoldCase = true;\n        ignoreCase = false;\n        break;\n      }\n    }\n\n    var escapeCharToCodeUnit = {\n      'b': 8,\n      't': 9,\n      'n': 0xa,\n      'v': 0xb,\n      'f': 0xc,\n      'r': 0xd\n    };\n\n    function decodeEscape(charsetPart) {\n      var cc0 = charsetPart.charCodeAt(0);\n\n      if (cc0 !== 92\n      /* \\\\ */\n      ) {\n          return cc0;\n        }\n\n      var c1 = charsetPart.charAt(1);\n      cc0 = escapeCharToCodeUnit[c1];\n\n      if (cc0) {\n        return cc0;\n      } else if ('0' <= c1 && c1 <= '7') {\n        return parseInt(charsetPart.substring(1), 8);\n      } else if (c1 === 'u' || c1 === 'x') {\n        return parseInt(charsetPart.substring(2), 16);\n      } else {\n        return charsetPart.charCodeAt(1);\n      }\n    }\n\n    function encodeEscape(charCode) {\n      if (charCode < 0x20) {\n        return (charCode < 0x10 ? '\\\\x0' : '\\\\x') + charCode.toString(16);\n      }\n\n      var ch = String.fromCharCode(charCode);\n      return ch === '\\\\' || ch === '-' || ch === ']' || ch === '^' ? \"\\\\\" + ch : ch;\n    }\n\n    function caseFoldCharset(charSet) {\n      var charsetParts = charSet.substring(1, charSet.length - 1).match(new RegExp(\"\\\\\\\\u[0-9A-Fa-f]{4}\" + '|\\\\\\\\x[0-9A-Fa-f]{2}' + '|\\\\\\\\[0-3][0-7]{0,2}' + '|\\\\\\\\[0-7]{1,2}' + '|\\\\\\\\[\\\\s\\\\S]' + '|-' + '|[^-\\\\\\\\]', 'g'));\n      var ranges = [];\n      var inverse = charsetParts[0] === '^';\n      var out = ['['];\n\n      if (inverse) {\n        out.push('^');\n      }\n\n      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {\n        var p = charsetParts[i];\n\n        if (/\\\\[bdsw]/i.test(p)) {\n          // Don't muck with named groups.\n          out.push(p);\n        } else {\n          var start = decodeEscape(p);\n          var end;\n\n          if (i + 2 < n && '-' === charsetParts[i + 1]) {\n            end = decodeEscape(charsetParts[i + 2]);\n            i += 2;\n          } else {\n            end = start;\n          }\n\n          ranges.push([start, end]); // If the range might intersect letters, then expand it.\n          // This case handling is too simplistic.\n          // It does not deal with non-latin case folding.\n          // It works for latin source code identifiers though.\n\n          if (!(end < 65 || start > 122)) {\n            if (!(end < 65 || start > 90)) {\n              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);\n            }\n\n            if (!(end < 97 || start > 122)) {\n              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);\n            }\n          }\n        }\n      } // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]\n      // -> [[1, 12], [14, 14], [16, 17]]\n\n\n      ranges.sort(function (a, b) {\n        return a[0] - b[0] || b[1] - a[1];\n      });\n      var consolidatedRanges = [];\n      var lastRange = [];\n\n      for (var i = 0; i < ranges.length; ++i) {\n        var range = ranges[i];\n\n        if (range[0] <= lastRange[1] + 1) {\n          lastRange[1] = Math.max(lastRange[1], range[1]);\n        } else {\n          consolidatedRanges.push(lastRange = range);\n        }\n      }\n\n      for (var i = 0; i < consolidatedRanges.length; ++i) {\n        var range = consolidatedRanges[i];\n        out.push(encodeEscape(range[0]));\n\n        if (range[1] > range[0]) {\n          if (range[1] + 1 > range[0]) {\n            out.push('-');\n          }\n\n          out.push(encodeEscape(range[1]));\n        }\n      }\n\n      out.push(']');\n      return out.join('');\n    }\n\n    function allowAnywhereFoldCaseAndRenumberGroups(regex) {\n      // Split into character sets, escape sequences, punctuation strings\n      // like ('(', '(?:', ')', '^'), and runs of characters that do not\n      // include any of the above.\n      var parts = regex.source.match(new RegExp('(?:' + '\\\\[(?:[^\\\\x5C\\\\x5D]|\\\\\\\\[\\\\s\\\\S])*\\\\]' // a character set\n      + \"|\\\\\\\\u[A-Fa-f0-9]{4}\" // a unicode escape\n      + '|\\\\\\\\x[A-Fa-f0-9]{2}' // a hex escape\n      + '|\\\\\\\\[0-9]+' // a back-reference or octal escape\n      + '|\\\\\\\\[^ux0-9]' // other escape sequence\n      + '|\\\\(\\\\?[:!=]' // start of a non-capturing group\n      + '|[\\\\(\\\\)\\\\^]' // start/end of a group, or line start\n      + '|[^\\\\x5B\\\\x5C\\\\(\\\\)\\\\^]+' // run of other characters\n      + ')', 'g'));\n      var n = parts.length; // Maps captured group numbers to the number they will occupy in\n      // the output or to -1 if that has not been determined, or to\n      // undefined if they need not be capturing in the output.\n\n      var capturedGroups = []; // Walk over and identify back references to build the capturedGroups\n      // mapping.\n\n      for (var i = 0, groupIndex = 0; i < n; ++i) {\n        var p = parts[i];\n\n        if (p === '(') {\n          // groups are 1-indexed, so max group index is count of '('\n          ++groupIndex;\n        } else if ('\\\\' === p.charAt(0)) {\n          var decimalValue = +p.substring(1);\n\n          if (decimalValue) {\n            if (decimalValue <= groupIndex) {\n              capturedGroups[decimalValue] = -1;\n            } else {\n              // Replace with an unambiguous escape sequence so that\n              // an octal escape sequence does not turn into a backreference\n              // to a capturing group from an earlier regex.\n              parts[i] = encodeEscape(decimalValue);\n            }\n          }\n        }\n      } // Renumber groups and reduce capturing groups to non-capturing groups\n      // where possible.\n\n\n      for (var i = 1; i < capturedGroups.length; ++i) {\n        if (-1 === capturedGroups[i]) {\n          capturedGroups[i] = ++capturedGroupIndex;\n        }\n      }\n\n      for (var i = 0, groupIndex = 0; i < n; ++i) {\n        var p = parts[i];\n\n        if (p === '(') {\n          ++groupIndex;\n\n          if (!capturedGroups[groupIndex]) {\n            parts[i] = '(?:';\n          }\n        } else if ('\\\\' === p.charAt(0)) {\n          var decimalValue = +p.substring(1);\n\n          if (decimalValue && decimalValue <= groupIndex) {\n            parts[i] = '\\\\' + capturedGroups[decimalValue];\n          }\n        }\n      } // Remove any prefix anchors so that the output will match anywhere.\n      // ^^ really does mean an anchored match though.\n\n\n      for (var i = 0; i < n; ++i) {\n        if ('^' === parts[i] && '^' !== parts[i + 1]) {\n          parts[i] = '';\n        }\n      } // Expand letters to groups to handle mixing of case-sensitive and\n      // case-insensitive patterns if necessary.\n\n\n      if (regex.ignoreCase && needToFoldCase) {\n        for (var i = 0; i < n; ++i) {\n          var p = parts[i];\n          var ch0 = p.charAt(0);\n\n          if (p.length >= 2 && ch0 === '[') {\n            parts[i] = caseFoldCharset(p);\n          } else if (ch0 !== '\\\\') {\n            // TODO: handle letters in numeric escapes.\n            parts[i] = p.replace(/[a-zA-Z]/g, function (ch) {\n              var cc = ch.charCodeAt(0);\n              return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';\n            });\n          }\n        }\n      }\n\n      return parts.join('');\n    }\n\n    var rewritten = [];\n\n    for (var i = 0, n = regexs.length; i < n; ++i) {\n      var regex = regexs[i];\n\n      if (regex.global || regex.multiline) {\n        throw new Error('' + regex);\n      }\n\n      rewritten.push('(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');\n    }\n\n    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');\n  }\n  /**\n   * Split markup into a string of source code and an array mapping ranges in\n   * that string to the text nodes in which they appear.\n   *\n   * <p>\n   * The HTML DOM structure:</p>\n   * <pre>\n   * (Element   \"p\"\n   *   (Element \"b\"\n   *     (Text  \"print \"))       ; #1\n   *   (Text    \"'Hello '\")      ; #2\n   *   (Element \"br\")            ; #3\n   *   (Text    \"  + 'World';\")) ; #4\n   * </pre>\n   * <p>\n   * corresponds to the HTML\n   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>\n   *\n   * <p>\n   * It will produce the output:</p>\n   * <pre>\n   * {\n   *   sourceCode: \"print 'Hello '\\n  + 'World';\",\n   *   //                     1          2\n   *   //           012345678901234 5678901234567\n   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]\n   * }\n   * </pre>\n   * <p>\n   * where #1 is a reference to the {@code \"print \"} text node above, and so\n   * on for the other text nodes.\n   * </p>\n   *\n   * <p>\n   * The {@code} spans array is an array of pairs.  Even elements are the start\n   * indices of substrings, and odd elements are the text nodes (or BR elements)\n   * that contain the text for those substrings.\n   * Substrings continue until the next index or the end of the source.\n   * </p>\n   *\n   * @param {Node} node an HTML DOM subtree containing source-code.\n   * @param {boolean|number} isPreformatted truthy if white-space in\n   *    text nodes should be considered significant.\n   * @return {SourceSpansT} source code and the nodes in which they occur.\n   */\n\n\n  function extractSourceSpans(node, isPreformatted) {\n    var nocode = /(?:^|\\s)nocode(?:\\s|$)/;\n    var chunks = [];\n    var length = 0;\n    var spans = [];\n    var k = 0;\n\n    function walk(node) {\n      var type = node.nodeType;\n\n      if (type == 1) {\n        // Element\n        if (nocode.test(node.className)) {\n          return;\n        }\n\n        for (var child = node.firstChild; child; child = child.nextSibling) {\n          walk(child);\n        }\n\n        var nodeName = node.nodeName.toLowerCase();\n\n        if ('br' === nodeName || 'li' === nodeName) {\n          chunks[k] = '\\n';\n          spans[k << 1] = length++;\n          spans[k++ << 1 | 1] = node;\n        }\n      } else if (type == 3 || type == 4) {\n        // Text\n        var text = node.nodeValue;\n\n        if (text.length) {\n          if (!isPreformatted) {\n            text = text.replace(/[ \\t\\r\\n]+/g, ' ');\n          } else {\n            text = text.replace(/\\r\\n?/g, '\\n'); // Normalize newlines.\n          } // TODO: handle tabs here?\n\n\n          chunks[k] = text;\n          spans[k << 1] = length;\n          length += text.length;\n          spans[k++ << 1 | 1] = node;\n        }\n      }\n    }\n\n    walk(node);\n    return {\n      sourceCode: chunks.join('').replace(/\\n$/, ''),\n      spans: spans\n    };\n  }\n  /**\n   * Apply the given language handler to sourceCode and add the resulting\n   * decorations to out.\n   * @param {!Element} sourceNode\n   * @param {number} basePos the index of sourceCode within the chunk of source\n   *    whose decorations are already present on out.\n   * @param {string} sourceCode\n   * @param {function(JobT)} langHandler\n   * @param {DecorationsT} out\n   */\n\n\n  function appendDecorations(sourceNode, basePos, sourceCode, langHandler, out) {\n    if (!sourceCode) {\n      return;\n    }\n    /** @type {JobT} */\n\n\n    var job = {\n      sourceNode: sourceNode,\n      pre: 1,\n      langExtension: null,\n      numberLines: null,\n      sourceCode: sourceCode,\n      spans: null,\n      basePos: basePos,\n      decorations: null\n    };\n    langHandler(job);\n    out.push.apply(out, job.decorations);\n  }\n\n  var notWs = /\\S/;\n  /**\n   * Given an element, if it contains only one child element and any text nodes\n   * it contains contain only space characters, return the sole child element.\n   * Otherwise returns undefined.\n   * <p>\n   * This is meant to return the CODE element in {@code <pre><code ...>} when\n   * there is a single child element that contains all the non-space textual\n   * content, but not to return anything where there are multiple child elements\n   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there\n   * is textual content.\n   */\n\n  function childContentWrapper(element) {\n    var wrapper = undefined;\n\n    for (var c = element.firstChild; c; c = c.nextSibling) {\n      var type = c.nodeType;\n      wrapper = type === 1 ? // Element Node\n      wrapper ? element : c : type === 3 ? // Text Node\n      notWs.test(c.nodeValue) ? element : wrapper : wrapper;\n    }\n\n    return wrapper === element ? undefined : wrapper;\n  }\n  /** Given triples of [style, pattern, context] returns a lexing function,\n    * The lexing function interprets the patterns to find token boundaries and\n    * returns a decoration list of the form\n    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]\n    * where index_n is an index into the sourceCode, and style_n is a style\n    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to\n    * all characters in sourceCode[index_n-1:index_n].\n    *\n    * The stylePatterns is a list whose elements have the form\n    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].\n    *\n    * Style is a style constant like PR_PLAIN, or can be a string of the\n    * form 'lang-FOO', where FOO is a language extension describing the\n    * language of the portion of the token in $1 after pattern executes.\n    * E.g., if style is 'lang-lisp', and group 1 contains the text\n    * '(hello (world))', then that portion of the token will be passed to the\n    * registered lisp handler for formatting.\n    * The text before and after group 1 will be restyled using this decorator\n    * so decorators should take care that this doesn't result in infinite\n    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks\n    * something like ['lang-js', /<[s]cript>(.+?)<\\/script>/].  This may match\n    * '<script>foo()<\\/script>', which would cause the current decorator to\n    * be called with '<script>' which would not match the same rule since\n    * group 1 must not be empty, so it would be instead styled as PR_TAG by\n    * the generic tag rule.  The handler registered for the 'js' extension would\n    * then be called with 'foo()', and finally, the current decorator would\n    * be called with '<\\/script>' which would not match the original rule and\n    * so the generic tag rule would identify it as a tag.\n    *\n    * Pattern must only match prefixes, and if it matches a prefix, then that\n    * match is considered a token with the same style.\n    *\n    * Context is applied to the last non-whitespace, non-comment token\n    * recognized.\n    *\n    * Shortcut is an optional string of characters, any of which, if the first\n    * character, gurantee that this pattern and only this pattern matches.\n    *\n    * @param {Array} shortcutStylePatterns patterns that always start with\n    *   a known character.  Must have a shortcut string.\n    * @param {Array} fallthroughStylePatterns patterns that will be tried in\n    *   order if the shortcut ones fail.  May have shortcuts.\n    *\n    * @return {function (JobT)} a function that takes an undecorated job and\n    *   attaches a list of decorations.\n    */\n\n\n  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {\n    var shortcuts = {};\n    var tokenizer;\n\n    (function () {\n      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);\n      var allRegexs = [];\n      var regexKeys = {};\n\n      for (var i = 0, n = allPatterns.length; i < n; ++i) {\n        var patternParts = allPatterns[i];\n        var shortcutChars = patternParts[3];\n\n        if (shortcutChars) {\n          for (var c = shortcutChars.length; --c >= 0;) {\n            shortcuts[shortcutChars.charAt(c)] = patternParts;\n          }\n        }\n\n        var regex = patternParts[1];\n        var k = '' + regex;\n\n        if (!regexKeys.hasOwnProperty(k)) {\n          allRegexs.push(regex);\n          regexKeys[k] = null;\n        }\n      }\n\n      allRegexs.push(/[\\0-\\uffff]/);\n      tokenizer = combinePrefixPatterns(allRegexs);\n    })();\n\n    var nPatterns = fallthroughStylePatterns.length;\n    /**\n     * Lexes job.sourceCode and attaches an output array job.decorations of\n     * style classes preceded by the position at which they start in\n     * job.sourceCode in order.\n     *\n     * @type{function (JobT)}\n     */\n\n    var decorate = function decorate(job) {\n      var sourceCode = job.sourceCode,\n          basePos = job.basePos;\n      var sourceNode = job.sourceNode;\n      /** Even entries are positions in source in ascending order.  Odd enties\n        * are style markers (e.g., PR_COMMENT) that run from that position until\n        * the end.\n        * @type {DecorationsT}\n        */\n\n      var decorations = [basePos, PR_PLAIN];\n      var pos = 0; // index into sourceCode\n\n      var tokens = sourceCode.match(tokenizer) || [];\n      var styleCache = {};\n\n      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {\n        var token = tokens[ti];\n        var style = styleCache[token];\n        var match = void 0;\n        var isEmbedded;\n\n        if (typeof style === 'string') {\n          isEmbedded = false;\n        } else {\n          var patternParts = shortcuts[token.charAt(0)];\n\n          if (patternParts) {\n            match = token.match(patternParts[1]);\n            style = patternParts[0];\n          } else {\n            for (var i = 0; i < nPatterns; ++i) {\n              patternParts = fallthroughStylePatterns[i];\n              match = token.match(patternParts[1]);\n\n              if (match) {\n                style = patternParts[0];\n                break;\n              }\n            }\n\n            if (!match) {\n              // make sure that we make progress\n              style = PR_PLAIN;\n            }\n          }\n\n          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);\n\n          if (isEmbedded && !(match && typeof match[1] === 'string')) {\n            isEmbedded = false;\n            style = PR_SOURCE;\n          }\n\n          if (!isEmbedded) {\n            styleCache[token] = style;\n          }\n        }\n\n        var tokenStart = pos;\n        pos += token.length;\n\n        if (!isEmbedded) {\n          decorations.push(basePos + tokenStart, style);\n        } else {\n          // Treat group 1 as an embedded block of source code.\n          var embeddedSource = match[1];\n          var embeddedSourceStart = token.indexOf(embeddedSource);\n          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;\n\n          if (match[2]) {\n            // If embeddedSource can be blank, then it would match at the\n            // beginning which would cause us to infinitely recurse on the\n            // entire token, so we catch the right context in match[2].\n            embeddedSourceEnd = token.length - match[2].length;\n            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;\n          }\n\n          var lang = style.substring(5); // Decorate the left of the embedded source\n\n          appendDecorations(sourceNode, basePos + tokenStart, token.substring(0, embeddedSourceStart), decorate, decorations); // Decorate the embedded source\n\n          appendDecorations(sourceNode, basePos + tokenStart + embeddedSourceStart, embeddedSource, langHandlerForExtension(lang, embeddedSource), decorations); // Decorate the right of the embedded section\n\n          appendDecorations(sourceNode, basePos + tokenStart + embeddedSourceEnd, token.substring(embeddedSourceEnd), decorate, decorations);\n        }\n      }\n\n      job.decorations = decorations;\n    };\n\n    return decorate;\n  }\n  /** returns a function that produces a list of decorations from source text.\n    *\n    * This code treats \", ', and ` as string delimiters, and \\ as a string\n    * escape.  It does not recognize perl's qq() style strings.\n    * It has no special handling for double delimiter escapes as in basic, or\n    * the tripled delimiters used in python, but should work on those regardless\n    * although in those cases a single string literal may be broken up into\n    * multiple adjacent string literals.\n    *\n    * It recognizes C, C++, and shell style comments.\n    *\n    * @param {Object} options a set of optional parameters.\n    * @return {function (JobT)} a function that examines the source code\n    *     in the input job and builds a decoration list which it attaches to\n    *     the job.\n    */\n\n\n  function sourceDecorator(options) {\n    var shortcutStylePatterns = [],\n        fallthroughStylePatterns = [];\n\n    if (options['tripleQuotedStrings']) {\n      // '''multi-line-string''', 'single-line-string', and double-quoted\n      shortcutStylePatterns.push([PR_STRING, /^(?:\\'\\'\\'(?:[^\\'\\\\]|\\\\[\\s\\S]|\\'{1,2}(?=[^\\']))*(?:\\'\\'\\'|$)|\\\"\\\"\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S]|\\\"{1,2}(?=[^\\\"]))*(?:\\\"\\\"\\\"|$)|\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$))/, null, '\\'\"']);\n    } else if (options['multiLineStrings']) {\n      // 'multi-line-string', \"multi-line-string\"\n      shortcutStylePatterns.push([PR_STRING, /^(?:\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$)|\\`(?:[^\\\\\\`]|\\\\[\\s\\S])*(?:\\`|$))/, null, '\\'\"`']);\n    } else {\n      // 'single-line-string', \"single-line-string\"\n      shortcutStylePatterns.push([PR_STRING, /^(?:\\'(?:[^\\\\\\'\\r\\n]|\\\\.)*(?:\\'|$)|\\\"(?:[^\\\\\\\"\\r\\n]|\\\\.)*(?:\\\"|$))/, null, '\"\\'']);\n    }\n\n    if (options['verbatimStrings']) {\n      // verbatim-string-literal production from the C# grammar.  See issue 93.\n      fallthroughStylePatterns.push([PR_STRING, /^@\\\"(?:[^\\\"]|\\\"\\\")*(?:\\\"|$)/, null]);\n    }\n\n    var hc = options['hashComments'];\n\n    if (hc) {\n      if (options['cStyleComments']) {\n        if (hc > 1) {\n          // multiline hash comments\n          shortcutStylePatterns.push([PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);\n        } else {\n          // Stop C preprocessor declarations at an unclosed open comment\n          shortcutStylePatterns.push([PR_COMMENT, /^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\\b|[^\\r\\n]*)/, null, '#']);\n        } // #include <stdio.h>\n\n\n        fallthroughStylePatterns.push([PR_STRING, /^<(?:(?:(?:\\.\\.\\/)*|\\/?)(?:[\\w-]+(?:\\/[\\w-]+)+)?[\\w-]+\\.h(?:h|pp|\\+\\+)?|[a-z]\\w*)>/, null]);\n      } else {\n        shortcutStylePatterns.push([PR_COMMENT, /^#[^\\r\\n]*/, null, '#']);\n      }\n    }\n\n    if (options['cStyleComments']) {\n      fallthroughStylePatterns.push([PR_COMMENT, /^\\/\\/[^\\r\\n]*/, null]);\n      fallthroughStylePatterns.push([PR_COMMENT, /^\\/\\*[\\s\\S]*?(?:\\*\\/|$)/, null]);\n    }\n\n    var regexLiterals = options['regexLiterals'];\n\n    if (regexLiterals) {\n      /**\n       * @const\n       */\n      var regexExcls = regexLiterals > 1 ? '' // Multiline regex literals\n      : '\\n\\r';\n      /**\n       * @const\n       */\n\n      var regexAny = regexExcls ? '.' : '[\\\\S\\\\s]';\n      /**\n       * @const\n       */\n\n      var REGEX_LITERAL = // A regular expression literal starts with a slash that is\n      // not followed by * or / so that it is not confused with\n      // comments.\n      '/(?=[^/*' + regexExcls + '])' // and then contains any number of raw characters,\n      + '(?:[^/\\\\x5B\\\\x5C' + regexExcls + ']' // escape sequences (\\x5C),\n      + '|\\\\x5C' + regexAny // or non-nesting character sets (\\x5B\\x5D);\n      + '|\\\\x5B(?:[^\\\\x5C\\\\x5D' + regexExcls + ']' + '|\\\\x5C' + regexAny + ')*(?:\\\\x5D|$))+' // finally closed by a /.\n      + '/';\n      fallthroughStylePatterns.push(['lang-regex', RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')]);\n    }\n\n    var types = options['types'];\n\n    if (types) {\n      fallthroughStylePatterns.push([PR_TYPE, types]);\n    }\n\n    var keywords = (\"\" + options['keywords']).replace(/^ | $/g, '');\n\n    if (keywords.length) {\n      fallthroughStylePatterns.push([PR_KEYWORD, new RegExp('^(?:' + keywords.replace(/[\\s,]+/g, '|') + ')\\\\b'), null]);\n    }\n\n    shortcutStylePatterns.push([PR_PLAIN, /^\\s+/, null, ' \\r\\n\\t\\xA0']);\n    var punctuation = // The Bash man page says\n    // A word is a sequence of characters considered as a single\n    // unit by GRUB. Words are separated by metacharacters,\n    // which are the following plus space, tab, and newline: { }\n    // | & $ ; < >\n    // ...\n    // A word beginning with # causes that word and all remaining\n    // characters on that line to be ignored.\n    // which means that only a '#' after /(?:^|[{}|&$;<>\\s])/ starts a\n    // comment but empirically\n    // $ echo {#}\n    // {#}\n    // $ echo \\$#\n    // $#\n    // $ echo }#\n    // }#\n    // so /(?:^|[|&;<>\\s])/ is more appropriate.\n    // http://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC3\n    // suggests that this definition is compatible with a\n    // default mode that tries to use a single token definition\n    // to recognize both bash/python style comments and C\n    // preprocessor directives.\n    // This definition of punctuation does not include # in the list of\n    // follow-on exclusions, so # will not be broken before if preceeded\n    // by a punctuation character.  We could try to exclude # after\n    // [|&;<>] but that doesn't seem to cause many major problems.\n    // If that does turn out to be a problem, we should change the below\n    // when hc is truthy to include # in the run of punctuation characters\n    // only when not followint [|&;<>].\n    '^.[^\\\\s\\\\w.$@\\'\"`/\\\\\\\\]*';\n\n    if (options['regexLiterals']) {\n      punctuation += '(?!\\s*\\/)';\n    }\n\n    fallthroughStylePatterns.push( // TODO(mikesamuel): recognize non-latin letters and numerals in idents\n    [PR_LITERAL, /^@[a-z_$][a-z_$@0-9]*/i, null], [PR_TYPE, /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\\w+_t\\b)/, null], [PR_PLAIN, /^[a-z_$][a-z_$@0-9]*/i, null], [PR_LITERAL, new RegExp('^(?:' // A hex number\n    + '0x[a-f0-9]+' // or an octal or decimal number,\n    + '|(?:\\\\d(?:_\\\\d+)*\\\\d*(?:\\\\.\\\\d*)?|\\\\.\\\\d\\\\+)' // possibly in scientific notation\n    + '(?:e[+\\\\-]?\\\\d+)?' + ')' // with an optional modifier like UL for unsigned long\n    + '[a-z]*', 'i'), null, '0123456789'], // Don't treat escaped quotes in bash as starting strings.\n    // See issue 144.\n    [PR_PLAIN, /^\\\\[\\s\\S]?/, null], [PR_PUNCTUATION, new RegExp(punctuation), null]);\n    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);\n  }\n\n  var decorateSource = sourceDecorator({\n    'keywords': ALL_KEYWORDS,\n    'hashComments': true,\n    'cStyleComments': true,\n    'multiLineStrings': true,\n    'regexLiterals': true\n  });\n  /**\n   * Given a DOM subtree, wraps it in a list, and puts each line into its own\n   * list item.\n   *\n   * @param {Node} node modified in place.  Its content is pulled into an\n   *     HTMLOListElement, and each line is moved into a separate list item.\n   *     This requires cloning elements, so the input might not have unique\n   *     IDs after numbering.\n   * @param {number|null|boolean} startLineNum\n   *     If truthy, coerced to an integer which is the 1-indexed line number\n   *     of the first line of code.  The number of the first line will be\n   *     attached to the list.\n   * @param {boolean} isPreformatted true iff white-space in text nodes should\n   *     be treated as significant.\n   */\n\n  function numberLines(node, startLineNum, isPreformatted) {\n    var nocode = /(?:^|\\s)nocode(?:\\s|$)/;\n    var lineBreak = /\\r\\n?|\\n/;\n    var document = node.ownerDocument;\n    var li = document.createElement('li');\n\n    while (node.firstChild) {\n      li.appendChild(node.firstChild);\n    } // An array of lines.  We split below, so this is initialized to one\n    // un-split line.\n\n\n    var listItems = [li];\n\n    function walk(node) {\n      var type = node.nodeType;\n\n      if (type == 1 && !nocode.test(node.className)) {\n        // Element\n        if ('br' === node.nodeName) {\n          breakAfter(node); // Discard the <BR> since it is now flush against a </LI>.\n\n          if (node.parentNode) {\n            node.parentNode.removeChild(node);\n          }\n        } else {\n          for (var child = node.firstChild; child; child = child.nextSibling) {\n            walk(child);\n          }\n        }\n      } else if ((type == 3 || type == 4) && isPreformatted) {\n        // Text\n        var text = node.nodeValue;\n        var match = text.match(lineBreak);\n\n        if (match) {\n          var firstLine = text.substring(0, match.index);\n          node.nodeValue = firstLine;\n          var tail = text.substring(match.index + match[0].length);\n\n          if (tail) {\n            var parent = node.parentNode;\n            parent.insertBefore(document.createTextNode(tail), node.nextSibling);\n          }\n\n          breakAfter(node);\n\n          if (!firstLine) {\n            // Don't leave blank text nodes in the DOM.\n            node.parentNode.removeChild(node);\n          }\n        }\n      }\n    } // Split a line after the given node.\n\n\n    function breakAfter(lineEndNode) {\n      // If there's nothing to the right, then we can skip ending the line\n      // here, and move root-wards since splitting just before an end-tag\n      // would require us to create a bunch of empty copies.\n      while (!lineEndNode.nextSibling) {\n        lineEndNode = lineEndNode.parentNode;\n\n        if (!lineEndNode) {\n          return;\n        }\n      }\n\n      function breakLeftOf(limit, copy) {\n        // Clone shallowly if this node needs to be on both sides of the break.\n        var rightSide = copy ? limit.cloneNode(false) : limit;\n        var parent = limit.parentNode;\n\n        if (parent) {\n          // We clone the parent chain.\n          // This helps us resurrect important styling elements that cross lines.\n          // E.g. in <i>Foo<br>Bar</i>\n          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.\n          var parentClone = breakLeftOf(parent, 1); // Move the clone and everything to the right of the original\n          // onto the cloned parent.\n\n          var next = limit.nextSibling;\n          parentClone.appendChild(rightSide);\n\n          for (var sibling = next; sibling; sibling = next) {\n            next = sibling.nextSibling;\n            parentClone.appendChild(sibling);\n          }\n        }\n\n        return rightSide;\n      }\n\n      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0); // Walk the parent chain until we reach an unattached LI.\n\n      for (var parent; // Check nodeType since IE invents document fragments.\n      (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {\n        copiedListItem = parent;\n      } // Put it on the list of lines for later processing.\n\n\n      listItems.push(copiedListItem);\n    } // Split lines while there are lines left to split.\n\n\n    for (var i = 0; // Number of lines that have been split so far.\n    i < listItems.length; // length updated by breakAfter calls.\n    ++i) {\n      walk(listItems[i]);\n    } // Make sure numeric indices show correctly.\n\n\n    if (startLineNum === (startLineNum | 0)) {\n      listItems[0].setAttribute('value', startLineNum);\n    }\n\n    var ol = document.createElement('ol');\n    ol.className = 'linenums';\n    var offset = Math.max(0, startLineNum - 1\n    /* zero index */\n    | 0) || 0;\n\n    for (var i = 0, n = listItems.length; i < n; ++i) {\n      li = listItems[i]; // Stick a class on the LIs so that stylesheets can\n      // color odd/even rows, or any other row pattern that\n      // is co-prime with 10.\n\n      li.className = 'L' + (i + offset) % 10;\n\n      if (!li.firstChild) {\n        li.appendChild(document.createTextNode('\\xA0'));\n      }\n\n      ol.appendChild(li);\n    }\n\n    node.appendChild(ol);\n  }\n  /**\n   * Breaks {@code job.sourceCode} around style boundaries in\n   * {@code job.decorations} and modifies {@code job.sourceNode} in place.\n   * @param {JobT} job\n   * @private\n   */\n\n\n  function recombineTagsAndDecorations(job) {\n    var isIE8OrEarlier = /\\bMSIE\\s(\\d+)/.exec(navigator.userAgent);\n    isIE8OrEarlier = isIE8OrEarlier && +isIE8OrEarlier[1] <= 8;\n    var newlineRe = /\\n/g;\n    var source = job.sourceCode;\n    var sourceLength = source.length; // Index into source after the last code-unit recombined.\n\n    var sourceIndex = 0;\n    var spans = job.spans;\n    var nSpans = spans.length; // Index into spans after the last span which ends at or before sourceIndex.\n\n    var spanIndex = 0;\n    var decorations = job.decorations;\n    var nDecorations = decorations.length; // Index into decorations after the last decoration which ends at or before\n    // sourceIndex.\n\n    var decorationIndex = 0; // Remove all zero-length decorations.\n\n    decorations[nDecorations] = sourceLength;\n    var decPos, i;\n\n    for (i = decPos = 0; i < nDecorations;) {\n      if (decorations[i] !== decorations[i + 2]) {\n        decorations[decPos++] = decorations[i++];\n        decorations[decPos++] = decorations[i++];\n      } else {\n        i += 2;\n      }\n    }\n\n    nDecorations = decPos; // Simplify decorations.\n\n    for (i = decPos = 0; i < nDecorations;) {\n      var startPos = decorations[i]; // Conflate all adjacent decorations that use the same style.\n\n      var startDec = decorations[i + 1];\n      var end = i + 2;\n\n      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {\n        end += 2;\n      }\n\n      decorations[decPos++] = startPos;\n      decorations[decPos++] = startDec;\n      i = end;\n    }\n\n    nDecorations = decorations.length = decPos;\n    var sourceNode = job.sourceNode;\n    var oldDisplay = \"\";\n\n    if (sourceNode) {\n      oldDisplay = sourceNode.style.display;\n      sourceNode.style.display = 'none';\n    }\n\n    try {\n      var decoration = null;\n\n      while (spanIndex < nSpans) {\n        var spanStart = spans[spanIndex];\n        var spanEnd =\n        /** @type{number} */\n        spans[spanIndex + 2] || sourceLength;\n        var decEnd = decorations[decorationIndex + 2] || sourceLength;\n        var end = Math.min(spanEnd, decEnd);\n        var textNode =\n        /** @type{Node} */\n        spans[spanIndex + 1];\n        var styledText;\n\n        if (textNode.nodeType !== 1 // Don't muck with <BR>s or <LI>s\n        // Don't introduce spans around empty text nodes.\n        && (styledText = source.substring(sourceIndex, end))) {\n          // This may seem bizarre, and it is.  Emitting LF on IE causes the\n          // code to display with spaces instead of line breaks.\n          // Emitting Windows standard issue linebreaks (CRLF) causes a blank\n          // space to appear at the beginning of every line but the first.\n          // Emitting an old Mac OS 9 line separator makes everything spiffy.\n          if (isIE8OrEarlier) {\n            styledText = styledText.replace(newlineRe, '\\r');\n          }\n\n          textNode.nodeValue = styledText;\n          var document = textNode.ownerDocument;\n          var span = document.createElement('span');\n          span.className = decorations[decorationIndex + 1];\n          var parentNode = textNode.parentNode;\n          parentNode.replaceChild(span, textNode);\n          span.appendChild(textNode);\n\n          if (sourceIndex < spanEnd) {\n            // Split off a text node.\n            spans[spanIndex + 1] = textNode // TODO: Possibly optimize by using '' if there's no flicker.\n            = document.createTextNode(source.substring(end, spanEnd));\n            parentNode.insertBefore(textNode, span.nextSibling);\n          }\n        }\n\n        sourceIndex = end;\n\n        if (sourceIndex >= spanEnd) {\n          spanIndex += 2;\n        }\n\n        if (sourceIndex >= decEnd) {\n          decorationIndex += 2;\n        }\n      }\n    } finally {\n      if (sourceNode) {\n        sourceNode.style.display = oldDisplay;\n      }\n    }\n  }\n  /** Maps language-specific file extensions to handlers. */\n\n\n  var langHandlerRegistry = {};\n  /** Register a language handler for the given file extensions.\n    * @param {function (JobT)} handler a function from source code to a list\n    *      of decorations.  Takes a single argument job which describes the\n    *      state of the computation and attaches the decorations to it.\n    * @param {Array.<string>} fileExtensions\n    */\n\n  function registerLangHandler(handler, fileExtensions) {\n    for (var i = fileExtensions.length; --i >= 0;) {\n      var ext = fileExtensions[i];\n\n      if (!langHandlerRegistry.hasOwnProperty(ext)) {\n        langHandlerRegistry[ext] = handler;\n      } else if (win['console']) {\n        console['warn']('cannot override language handler %s', ext);\n      }\n    }\n  }\n\n  function langHandlerForExtension(extension, source) {\n    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {\n      // Treat it as markup if the first non whitespace character is a < and\n      // the last non-whitespace character is a >.\n      extension = /^\\s*</.test(source) ? 'default-markup' : 'default-code';\n    }\n\n    return langHandlerRegistry[extension];\n  }\n\n  registerLangHandler(decorateSource, ['default-code']);\n  registerLangHandler(createSimpleLexer([], [[PR_PLAIN, /^[^<?]+/], [PR_DECLARATION, /^<!\\w[^>]*(?:>|$)/], [PR_COMMENT, /^<\\!--[\\s\\S]*?(?:-\\->|$)/], // Unescaped content in an unknown language\n  ['lang-', /^<\\?([\\s\\S]+?)(?:\\?>|$)/], ['lang-', /^<%([\\s\\S]+?)(?:%>|$)/], [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/], ['lang-', /^<xmp\\b[^>]*>([\\s\\S]+?)<\\/xmp\\b[^>]*>/i], // Unescaped content in javascript.  (Or possibly vbscript).\n  ['lang-js', /^<script\\b[^>]*>([\\s\\S]*?)(<\\/script\\b[^>]*>)/i], // Contains unescaped stylesheet content\n  ['lang-css', /^<style\\b[^>]*>([\\s\\S]*?)(<\\/style\\b[^>]*>)/i], ['lang-in.tag', /^(<\\/?[a-z][^<>]*>)/i]]), ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);\n  registerLangHandler(createSimpleLexer([[PR_PLAIN, /^[\\s]+/, null, ' \\t\\r\\n'], [PR_ATTRIB_VALUE, /^(?:\\\"[^\\\"]*\\\"?|\\'[^\\']*\\'?)/, null, '\\\"\\'']], [[PR_TAG, /^^<\\/?[a-z](?:[\\w.:-]*\\w)?|\\/?>$/i], [PR_ATTRIB_NAME, /^(?!style[\\s=]|on)[a-z](?:[\\w:-]*\\w)?/i], ['lang-uq.val', /^=\\s*([^>\\'\\\"\\s]*(?:[^>\\'\\\"\\s\\/]|\\/(?=\\s)))/], [PR_PUNCTUATION, /^[=<>\\/]+/], ['lang-js', /^on\\w+\\s*=\\s*\\\"([^\\\"]+)\\\"/i], ['lang-js', /^on\\w+\\s*=\\s*\\'([^\\']+)\\'/i], ['lang-js', /^on\\w+\\s*=\\s*([^\\\"\\'>\\s]+)/i], ['lang-css', /^style\\s*=\\s*\\\"([^\\\"]+)\\\"/i], ['lang-css', /^style\\s*=\\s*\\'([^\\']+)\\'/i], ['lang-css', /^style\\s*=\\s*([^\\\"\\'>\\s]+)/i]]), ['in.tag']);\n  registerLangHandler(createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\\s\\S]+/]]), ['uq.val']);\n  registerLangHandler(sourceDecorator({\n    'keywords': CPP_KEYWORDS,\n    'hashComments': true,\n    'cStyleComments': true,\n    'types': C_TYPES\n  }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);\n  registerLangHandler(sourceDecorator({\n    'keywords': 'null,true,false'\n  }), ['json']);\n  registerLangHandler(sourceDecorator({\n    'keywords': CSHARP_KEYWORDS,\n    'hashComments': true,\n    'cStyleComments': true,\n    'verbatimStrings': true,\n    'types': C_TYPES\n  }), ['cs']);\n  registerLangHandler(sourceDecorator({\n    'keywords': JAVA_KEYWORDS,\n    'cStyleComments': true\n  }), ['java']);\n  registerLangHandler(sourceDecorator({\n    'keywords': SH_KEYWORDS,\n    'hashComments': true,\n    'multiLineStrings': true\n  }), ['bash', 'bsh', 'csh', 'sh']);\n  registerLangHandler(sourceDecorator({\n    'keywords': PYTHON_KEYWORDS,\n    'hashComments': true,\n    'multiLineStrings': true,\n    'tripleQuotedStrings': true\n  }), ['cv', 'py', 'python']);\n  registerLangHandler(sourceDecorator({\n    'keywords': PERL_KEYWORDS,\n    'hashComments': true,\n    'multiLineStrings': true,\n    'regexLiterals': 2 // multiline regex literals\n\n  }), ['perl', 'pl', 'pm']);\n  registerLangHandler(sourceDecorator({\n    'keywords': RUBY_KEYWORDS,\n    'hashComments': true,\n    'multiLineStrings': true,\n    'regexLiterals': true\n  }), ['rb', 'ruby']);\n  registerLangHandler(sourceDecorator({\n    'keywords': JSCRIPT_KEYWORDS,\n    'cStyleComments': true,\n    'regexLiterals': true\n  }), ['javascript', 'js', 'ts', 'typescript']);\n  registerLangHandler(sourceDecorator({\n    'keywords': COFFEE_KEYWORDS,\n    'hashComments': 3,\n    // ### style block comments\n    'cStyleComments': true,\n    'multilineStrings': true,\n    'tripleQuotedStrings': true,\n    'regexLiterals': true\n  }), ['coffee']);\n  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\\s\\S]+/]]), ['regex']);\n  /** @param {JobT} job */\n\n  function applyDecorator(job) {\n    var opt_langExtension = job.langExtension;\n\n    try {\n      // Extract tags, and convert the source code to plain text.\n      var sourceAndSpans = extractSourceSpans(job.sourceNode, job.pre);\n      /** Plain text. @type {string} */\n\n      var source = sourceAndSpans.sourceCode;\n      job.sourceCode = source;\n      job.spans = sourceAndSpans.spans;\n      job.basePos = 0; // Apply the appropriate language handler\n\n      langHandlerForExtension(opt_langExtension, source)(job); // Integrate the decorations and tags back into the source code,\n      // modifying the sourceNode in place.\n\n      recombineTagsAndDecorations(job);\n    } catch (e) {\n      if (win['console']) {\n        console['log'](e && e['stack'] || e);\n      }\n    }\n  }\n  /**\n   * Pretty print a chunk of code.\n   * @param sourceCodeHtml {string} The HTML to pretty print.\n   * @param opt_langExtension {string} The language name to use.\n   *     Typically, a filename extension like 'cpp' or 'java'.\n   * @param opt_numberLines {number|boolean} True to number lines,\n   *     or the 1-indexed number of the first line in sourceCodeHtml.\n   */\n\n\n  function $prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {\n    /** @type{number|boolean} */\n    var nl = opt_numberLines || false;\n    /** @type{string|null} */\n\n    var langExtension = opt_langExtension || null;\n    /** @type{!Element} */\n\n    var container = document.createElement('div'); // This could cause images to load and onload listeners to fire.\n    // E.g. <img onerror=\"alert(1337)\" src=\"nosuchimage.png\">.\n    // We assume that the inner HTML is from a trusted source.\n    // The pre-tag is required for IE8 which strips newlines from innerHTML\n    // when it is injected into a <pre> tag.\n    // http://stackoverflow.com/questions/451486/pre-tag-loses-line-breaks-when-setting-innerhtml-in-ie\n    // http://stackoverflow.com/questions/195363/inserting-a-newline-into-a-pre-tag-ie-javascript\n\n    container.innerHTML = '<pre>' + sourceCodeHtml + '</pre>';\n    container =\n    /** @type{!Element} */\n    container.firstChild;\n\n    if (nl) {\n      numberLines(container, nl, true);\n    }\n    /** @type{JobT} */\n\n\n    var job = {\n      langExtension: langExtension,\n      numberLines: nl,\n      sourceNode: container,\n      pre: 1,\n      sourceCode: null,\n      basePos: null,\n      spans: null,\n      decorations: null\n    };\n    applyDecorator(job);\n    return container.innerHTML;\n  }\n  /**\n   * Find all the {@code <pre>} and {@code <code>} tags in the DOM with\n   * {@code class=prettyprint} and prettify them.\n   *\n   * @param {Function} opt_whenDone called when prettifying is done.\n   * @param {HTMLElement|HTMLDocument} opt_root an element or document\n   *   containing all the elements to pretty print.\n   *   Defaults to {@code document.body}.\n   */\n\n\n  function $prettyPrint(opt_whenDone, opt_root) {\n    var root = opt_root || document.body;\n    var doc = root.ownerDocument || document;\n\n    function byTagName(tn) {\n      return root.getElementsByTagName(tn);\n    } // fetch a list of nodes to rewrite\n\n\n    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];\n    var elements = [];\n\n    for (var i = 0; i < codeSegments.length; ++i) {\n      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {\n        elements.push(codeSegments[i][j]);\n      }\n    }\n\n    codeSegments = null;\n    var clock = Date;\n\n    if (!clock['now']) {\n      clock = {\n        'now': function now() {\n          return +new Date();\n        }\n      };\n    } // The loop is broken into a series of continuations to make sure that we\n    // don't make the browser unresponsive when rewriting a large page.\n\n\n    var k = 0;\n    var langExtensionRe = /\\blang(?:uage)?-([\\w.]+)(?!\\S)/;\n    var prettyPrintRe = /\\bprettyprint\\b/;\n    var prettyPrintedRe = /\\bprettyprinted\\b/;\n    var preformattedTagNameRe = /pre|xmp/i;\n    var codeRe = /^code$/i;\n    var preCodeXmpRe = /^(?:pre|code|xmp)$/i;\n    var EMPTY = {};\n\n    function doWork() {\n      var endTime = win['PR_SHOULD_USE_CONTINUATION'] ? clock['now']() + 250\n      /* ms */\n      : Infinity;\n\n      for (; k < elements.length && clock['now']() < endTime; k++) {\n        var cs = elements[k]; // Look for a preceding comment like\n        // <?prettify lang=\"...\" linenums=\"...\"?>\n\n        var attrs = EMPTY;\n        {\n          for (var preceder = cs; preceder = preceder.previousSibling;) {\n            var nt = preceder.nodeType; // <?foo?> is parsed by HTML 5 to a comment node (8)\n            // like <!--?foo?-->, but in XML is a processing instruction\n\n            var value = (nt === 7 || nt === 8) && preceder.nodeValue;\n\n            if (value ? !/^\\??prettify\\b/.test(value) : nt !== 3 || /\\S/.test(preceder.nodeValue)) {\n              // Skip over white-space text nodes but not others.\n              break;\n            }\n\n            if (value) {\n              attrs = {};\n              value.replace(/\\b(\\w+)=([\\w:.%+-]+)/g, function (_, name, value) {\n                attrs[name] = value;\n              });\n              break;\n            }\n          }\n        }\n        var className = cs.className;\n\n        if ((attrs !== EMPTY || prettyPrintRe.test(className)) && // Don't redo this if we've already done it.\n        // This allows recalling pretty print to just prettyprint elements\n        // that have been added to the page since last call.\n        !prettyPrintedRe.test(className)) {\n          // make sure this is not nested in an already prettified element\n          var nested = false;\n\n          for (var p = cs.parentNode; p; p = p.parentNode) {\n            var tn = p.tagName;\n\n            if (preCodeXmpRe.test(tn) && p.className && prettyPrintRe.test(p.className)) {\n              nested = true;\n              break;\n            }\n          }\n\n          if (!nested) {\n            // Mark done.  If we fail to prettyprint for whatever reason,\n            // we shouldn't try again.\n            cs.className += ' prettyprinted'; // If the classes includes a language extensions, use it.\n            // Language extensions can be specified like\n            //     <pre class=\"prettyprint lang-cpp\">\n            // the language extension \"cpp\" is used to find a language handler\n            // as passed to PR.registerLangHandler.\n            // HTML5 recommends that a language be specified using \"language-\"\n            // as the prefix instead.  Google Code Prettify supports both.\n            // http://dev.w3.org/html5/spec-author-view/the-code-element.html\n\n            var langExtension = attrs['lang'];\n\n            if (!langExtension) {\n              langExtension = className.match(langExtensionRe); // Support <pre class=\"prettyprint\"><code class=\"language-c\">\n\n              var wrapper;\n\n              if (!langExtension && (wrapper = childContentWrapper(cs)) && codeRe.test(wrapper.tagName)) {\n                langExtension = wrapper.className.match(langExtensionRe);\n              }\n\n              if (langExtension) {\n                langExtension = langExtension[1];\n              }\n            }\n\n            var preformatted;\n\n            if (preformattedTagNameRe.test(cs.tagName)) {\n              preformatted = 1;\n            } else {\n              var currentStyle = cs['currentStyle'];\n              var defaultView = doc.defaultView;\n              var whitespace = currentStyle ? currentStyle['whiteSpace'] : defaultView && defaultView.getComputedStyle ? defaultView.getComputedStyle(cs, null).getPropertyValue('white-space') : 0;\n              preformatted = whitespace && 'pre' === whitespace.substring(0, 3);\n            } // Look for a class like linenums or linenums:<n> where <n> is the\n            // 1-indexed number of the first line.\n\n\n            var lineNums = attrs['linenums'];\n\n            if (!(lineNums = lineNums === 'true' || +lineNums)) {\n              lineNums = className.match(/\\blinenums\\b(?::(\\d+))?/);\n              lineNums = lineNums ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true : false;\n            }\n\n            if (lineNums) {\n              numberLines(cs, lineNums, preformatted);\n            } // do the pretty printing\n\n\n            var prettyPrintingJob = {\n              langExtension: langExtension,\n              sourceNode: cs,\n              numberLines: lineNums,\n              pre: preformatted,\n              sourceCode: null,\n              basePos: null,\n              spans: null,\n              decorations: null\n            };\n            applyDecorator(prettyPrintingJob);\n          }\n        }\n      }\n\n      if (k < elements.length) {\n        // finish up in a continuation\n        win.setTimeout(doWork, 250);\n      } else if ('function' === typeof opt_whenDone) {\n        opt_whenDone();\n      }\n    }\n\n    doWork();\n  }\n  /**\n   * Contains functions for creating and registering new language handlers.\n   * @type {Object}\n   */\n\n\n  var PR = win['PR'] = {\n    'createSimpleLexer': createSimpleLexer,\n    'registerLangHandler': registerLangHandler,\n    'sourceDecorator': sourceDecorator,\n    'PR_ATTRIB_NAME': PR_ATTRIB_NAME,\n    'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,\n    'PR_COMMENT': PR_COMMENT,\n    'PR_DECLARATION': PR_DECLARATION,\n    'PR_KEYWORD': PR_KEYWORD,\n    'PR_LITERAL': PR_LITERAL,\n    'PR_NOCODE': PR_NOCODE,\n    'PR_PLAIN': PR_PLAIN,\n    'PR_PUNCTUATION': PR_PUNCTUATION,\n    'PR_SOURCE': PR_SOURCE,\n    'PR_STRING': PR_STRING,\n    'PR_TAG': PR_TAG,\n    'PR_TYPE': PR_TYPE,\n    'prettyPrintOne': IN_GLOBAL_SCOPE ? win['prettyPrintOne'] = $prettyPrintOne : prettyPrintOne = $prettyPrintOne,\n    'prettyPrint': prettyPrint = IN_GLOBAL_SCOPE ? win['prettyPrint'] = $prettyPrint : prettyPrint = $prettyPrint\n  }; // Make PR available via the Asynchronous Module Definition (AMD) API.\n  // Per https://github.com/amdjs/amdjs-api/wiki/AMD:\n  // The Asynchronous Module Definition (AMD) API specifies a\n  // mechanism for defining modules such that the module and its\n  // dependencies can be asynchronously loaded.\n  // ...\n  // To allow a clear indicator that a global define function (as\n  // needed for script src browser loading) conforms to the AMD API,\n  // any global define function SHOULD have a property called \"amd\"\n  // whose value is an object. This helps avoid conflict with any\n  // other existing JavaScript code that could have defined a define()\n  // function that does not conform to the AMD API.\n\n  var define = win['define'];\n\n  if (typeof define === \"function\" && define['amd']) {\n    define(\"google-code-prettify\", [], function () {\n      return PR;\n    });\n  }\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n  * Bootstrap v4.5.3 (https://getbootstrap.com/)\n  * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n})(this, function (exports, $, Popper) {\n  'use strict';\n\n  function _interopDefaultLegacy(e) {\n    return e && _typeof(e) === 'object' && 'default' in e ? e : {\n      'default': e\n    };\n  }\n\n  var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n\n  var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);\n\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  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _extends() {\n    _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    return _extends.apply(this, arguments);\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.5.3): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    if (obj === null || typeof obj === 'undefined') {\n      return \"\" + obj;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($__default['default'](event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined;\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $__default['default'](this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $__default['default'].fn.emulateTransitionEnd = transitionEndEmulator;\n    $__default['default'].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (_) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $__default['default'](element).css('transition-duration');\n      var transitionDelay = $__default['default'](element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $__default['default'](element).trigger(TRANSITION_END);\n    },\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    },\n    jQueryDetection: function jQueryDetection() {\n      if (typeof $__default['default'] === 'undefined') {\n        throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n      }\n\n      var version = $__default['default'].fn.jquery.split(' ')[0].split('.');\n      var minMajor = 1;\n      var ltMajor = 2;\n      var minMinor = 9;\n      var minPatch = 1;\n      var maxMajor = 4;\n\n      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n        throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n      }\n    }\n  };\n  Util.jQueryDetection();\n  setTransitionEndSupport();\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.5.3';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];\n  var SELECTOR_DISMISS = '[data-dismiss=\"alert\"]';\n  var EVENT_CLOSE = \"close\" + EVENT_KEY;\n  var EVENT_CLOSED = \"closed\" + EVENT_KEY;\n  var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY + DATA_API_KEY;\n  var CLASS_NAME_ALERT = 'alert';\n  var CLASS_NAME_FADE = 'fade';\n  var CLASS_NAME_SHOW = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Alert = /*#__PURE__*/function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype; // Public\n\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $__default['default'](element).closest(\".\" + CLASS_NAME_ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $__default['default'].Event(EVENT_CLOSE);\n      $__default['default'](element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $__default['default'](element).removeClass(CLASS_NAME_SHOW);\n\n      if (!$__default['default'](element).hasClass(CLASS_NAME_FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $__default['default'](element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $__default['default'](element).detach().trigger(EVENT_CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME] = Alert._jQueryInterface;\n  $__default['default'].fn[NAME].Constructor = Alert;\n\n  $__default['default'].fn[NAME].noConflict = function () {\n    $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.5.3';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $__default['default'].fn[NAME$1];\n  var CLASS_NAME_ACTIVE = 'active';\n  var CLASS_NAME_BUTTON = 'btn';\n  var CLASS_NAME_FOCUS = 'focus';\n  var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]';\n  var SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]';\n  var SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]';\n  var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn';\n  var SELECTOR_INPUT = 'input:not([type=\"hidden\"])';\n  var SELECTOR_ACTIVE = '.active';\n  var SELECTOR_BUTTON = '.btn';\n  var EVENT_CLICK_DATA_API$1 = \"click\" + EVENT_KEY$1 + DATA_API_KEY$1;\n  var EVENT_FOCUS_BLUR_DATA_API = \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1);\n  var EVENT_LOAD_DATA_API = \"load\" + EVENT_KEY$1 + DATA_API_KEY$1;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Button = /*#__PURE__*/function () {\n    function Button(element) {\n      this._element = element;\n      this.shouldAvoidTriggerChange = false;\n    } // Getters\n\n\n    var _proto = Button.prototype; // Public\n\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $__default['default'](this._element).closest(SELECTOR_DATA_TOGGLES)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(SELECTOR_INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);\n\n              if (activeElement) {\n                $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n            if (input.type === 'checkbox' || input.type === 'radio') {\n              input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);\n            }\n\n            if (!this.shouldAvoidTriggerChange) {\n              $__default['default'](input).trigger('change');\n            }\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n        if (addAriaPressed) {\n          this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));\n        }\n\n        if (triggerChangeEvent) {\n          $__default['default'](this._element).toggleClass(CLASS_NAME_ACTIVE);\n        }\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $element.data(DATA_KEY$1, data);\n        }\n\n        data.shouldAvoidTriggerChange = avoidTriggerChange;\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n    var button = event.target;\n    var initialButton = button;\n\n    if (!$__default['default'](button).hasClass(CLASS_NAME_BUTTON)) {\n      button = $__default['default'](button).closest(SELECTOR_BUTTON)[0];\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault(); // work around Firefox bug #1540995\n    } else {\n      var inputBtn = button.querySelector(SELECTOR_INPUT);\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault(); // work around Firefox bug #1540995\n\n        return;\n      }\n\n      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n        Button._jQueryInterface.call($__default['default'](button), 'toggle', initialButton.tagName === 'INPUT');\n      }\n    }\n  }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n    var button = $__default['default'](event.target).closest(SELECTOR_BUTTON)[0];\n    $__default['default'](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  $__default['default'](window).on(EVENT_LOAD_DATA_API, function () {\n    // ensure correct active class is set to match the controls' actual values/states\n    // find all checkboxes/readio buttons inside data-toggle groups\n    var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));\n\n    for (var i = 0, len = buttons.length; i < len; i++) {\n      var button = buttons[i];\n      var input = button.querySelector(SELECTOR_INPUT);\n\n      if (input.checked || input.hasAttribute('checked')) {\n        button.classList.add(CLASS_NAME_ACTIVE);\n      } else {\n        button.classList.remove(CLASS_NAME_ACTIVE);\n      }\n    } // find all button toggles\n\n\n    buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));\n\n    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n      var _button = buttons[_i];\n\n      if (_button.getAttribute('aria-pressed') === 'true') {\n        _button.classList.add(CLASS_NAME_ACTIVE);\n      } else {\n        _button.classList.remove(CLASS_NAME_ACTIVE);\n      }\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$1] = Button._jQueryInterface;\n  $__default['default'].fn[NAME$1].Constructor = Button;\n\n  $__default['default'].fn[NAME$1].noConflict = function () {\n    $__default['default'].fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.5.3';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $__default['default'].fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var DIRECTION_NEXT = 'next';\n  var DIRECTION_PREV = 'prev';\n  var DIRECTION_LEFT = 'left';\n  var DIRECTION_RIGHT = 'right';\n  var EVENT_SLIDE = \"slide\" + EVENT_KEY$2;\n  var EVENT_SLID = \"slid\" + EVENT_KEY$2;\n  var EVENT_KEYDOWN = \"keydown\" + EVENT_KEY$2;\n  var EVENT_MOUSEENTER = \"mouseenter\" + EVENT_KEY$2;\n  var EVENT_MOUSELEAVE = \"mouseleave\" + EVENT_KEY$2;\n  var EVENT_TOUCHSTART = \"touchstart\" + EVENT_KEY$2;\n  var EVENT_TOUCHMOVE = \"touchmove\" + EVENT_KEY$2;\n  var EVENT_TOUCHEND = \"touchend\" + EVENT_KEY$2;\n  var EVENT_POINTERDOWN = \"pointerdown\" + EVENT_KEY$2;\n  var EVENT_POINTERUP = \"pointerup\" + EVENT_KEY$2;\n  var EVENT_DRAG_START = \"dragstart\" + EVENT_KEY$2;\n  var EVENT_LOAD_DATA_API$1 = \"load\" + EVENT_KEY$2 + DATA_API_KEY$2;\n  var EVENT_CLICK_DATA_API$2 = \"click\" + EVENT_KEY$2 + DATA_API_KEY$2;\n  var CLASS_NAME_CAROUSEL = 'carousel';\n  var CLASS_NAME_ACTIVE$1 = 'active';\n  var CLASS_NAME_SLIDE = 'slide';\n  var CLASS_NAME_RIGHT = 'carousel-item-right';\n  var CLASS_NAME_LEFT = 'carousel-item-left';\n  var CLASS_NAME_NEXT = 'carousel-item-next';\n  var CLASS_NAME_PREV = 'carousel-item-prev';\n  var CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  var SELECTOR_ACTIVE$1 = '.active';\n  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  var SELECTOR_ITEM = '.carousel-item';\n  var SELECTOR_ITEM_IMG = '.carousel-item img';\n  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  var SELECTOR_INDICATORS = '.carousel-indicators';\n  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';\n  var SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]';\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Carousel = /*#__PURE__*/function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype; // Public\n\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(DIRECTION_NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      var $element = $__default['default'](this._element); // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n\n      if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(DIRECTION_PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $__default['default'](this._element).one(EVENT_SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'](this._element).off(EVENT_KEY$2);\n      $__default['default'].removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $__default['default'](this._element).on(EVENT_KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $__default['default'](this._element).on(EVENT_MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(EVENT_MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $__default['default'](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $__default['default'](this._element).on(EVENT_POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $__default['default'](this._element).on(EVENT_POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        $__default['default'](this._element).on(EVENT_TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $__default['default'](this._element).on(EVENT_TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $__default['default'](this._element).on(EVENT_TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === DIRECTION_NEXT;\n      var isPrevDirection = direction === DIRECTION_PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === DIRECTION_PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));\n\n      var slideEvent = $__default['default'].Event(EVENT_SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $__default['default'](this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));\n        $__default['default'](indicators).removeClass(CLASS_NAME_ACTIVE$1);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $__default['default'](nextIndicator).addClass(CLASS_NAME_ACTIVE$1);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === DIRECTION_NEXT) {\n        directionalClassName = CLASS_NAME_LEFT;\n        orderClassName = CLASS_NAME_NEXT;\n        eventDirectionName = DIRECTION_LEFT;\n      } else {\n        directionalClassName = CLASS_NAME_RIGHT;\n        orderClassName = CLASS_NAME_PREV;\n        eventDirectionName = DIRECTION_RIGHT;\n      }\n\n      if (nextElement && $__default['default'](nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $__default['default'].Event(EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($__default['default'](this._element).hasClass(CLASS_NAME_SLIDE)) {\n        $__default['default'](nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $__default['default'](activeElement).addClass(directionalClassName);\n        $__default['default'](nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $__default['default'](activeElement).one(Util.TRANSITION_END, function () {\n          $__default['default'](nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(CLASS_NAME_ACTIVE$1);\n          $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE$1 + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $__default['default'](_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE$1);\n        $__default['default'](nextElement).addClass(CLASS_NAME_ACTIVE$1);\n        this._isSliding = false;\n        $__default['default'](this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$2);\n\n        var _config = _extends({}, Default, $__default['default'](this).data());\n\n        if (_typeof(config) === 'object') {\n          _config = _extends({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $__default['default'](this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $__default['default'](selector)[0];\n\n      if (!target || !$__default['default'](target).hasClass(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      var config = _extends({}, $__default['default'](target).data(), $__default['default'](this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($__default['default'](target), config);\n\n      if (slideIndex) {\n        $__default['default'](target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);\n  $__default['default'](window).on(EVENT_LOAD_DATA_API$1, function () {\n    var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $__default['default'](carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$2] = Carousel._jQueryInterface;\n  $__default['default'].fn[NAME$2].Constructor = Carousel;\n\n  $__default['default'].fn[NAME$2].noConflict = function () {\n    $__default['default'].fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.5.3';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $__default['default'].fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var EVENT_SHOW = \"show\" + EVENT_KEY$3;\n  var EVENT_SHOWN = \"shown\" + EVENT_KEY$3;\n  var EVENT_HIDE = \"hide\" + EVENT_KEY$3;\n  var EVENT_HIDDEN = \"hidden\" + EVENT_KEY$3;\n  var EVENT_CLICK_DATA_API$3 = \"click\" + EVENT_KEY$3 + DATA_API_KEY$3;\n  var CLASS_NAME_SHOW$1 = 'show';\n  var CLASS_NAME_COLLAPSE = 'collapse';\n  var CLASS_NAME_COLLAPSING = 'collapsing';\n  var CLASS_NAME_COLLAPSED = 'collapsed';\n  var DIMENSION_WIDTH = 'width';\n  var DIMENSION_HEIGHT = 'height';\n  var SELECTOR_ACTIVES = '.show, .collapsing';\n  var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Collapse = /*#__PURE__*/function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype; // Public\n\n    _proto.toggle = function toggle() {\n      if ($__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $__default['default'](actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $__default['default'].Event(EVENT_SHOW);\n      $__default['default'](this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($__default['default'](actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $__default['default'](actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $__default['default'](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $__default['default'](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $__default['default'](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$1);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $__default['default'](_this._element).trigger(EVENT_SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n        return;\n      }\n\n      var startEvent = $__default['default'].Event(EVENT_HIDE);\n      $__default['default'](this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $__default['default'](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$1);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $__default['default']([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {\n              $__default['default'](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $__default['default'](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $__default['default'](this._element).hasClass(DIMENSION_WIDTH);\n      return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $__default['default'](children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $__default['default'](element).hasClass(CLASS_NAME_SHOW$1);\n\n      if (triggerArray.length) {\n        $__default['default'](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY$3);\n\n        var _config = _extends({}, Default$1, $element.data(), _typeof(config) === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $element.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $__default['default'](this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $__default['default'](selectors).each(function () {\n      var $target = $__default['default'](this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$3] = Collapse._jQueryInterface;\n  $__default['default'].fn[NAME$3].Constructor = Collapse;\n\n  $__default['default'].fn[NAME$3].noConflict = function () {\n    $__default['default'].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.5.3';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $__default['default'].fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var EVENT_HIDE$1 = \"hide\" + EVENT_KEY$4;\n  var EVENT_HIDDEN$1 = \"hidden\" + EVENT_KEY$4;\n  var EVENT_SHOW$1 = \"show\" + EVENT_KEY$4;\n  var EVENT_SHOWN$1 = \"shown\" + EVENT_KEY$4;\n  var EVENT_CLICK = \"click\" + EVENT_KEY$4;\n  var EVENT_CLICK_DATA_API$4 = \"click\" + EVENT_KEY$4 + DATA_API_KEY$4;\n  var EVENT_KEYDOWN_DATA_API = \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4;\n  var EVENT_KEYUP_DATA_API = \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4;\n  var CLASS_NAME_DISABLED = 'disabled';\n  var CLASS_NAME_SHOW$2 = 'show';\n  var CLASS_NAME_DROPUP = 'dropup';\n  var CLASS_NAME_DROPRIGHT = 'dropright';\n  var CLASS_NAME_DROPLEFT = 'dropleft';\n  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';\n  var CLASS_NAME_POSITION_STATIC = 'position-static';\n  var SELECTOR_DATA_TOGGLE$2 = '[data-toggle=\"dropdown\"]';\n  var SELECTOR_FORM_CHILD = '.dropdown form';\n  var SELECTOR_MENU = '.dropdown-menu';\n  var SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  var PLACEMENT_TOP = 'top-start';\n  var PLACEMENT_TOPEND = 'top-end';\n  var PLACEMENT_BOTTOM = 'bottom-start';\n  var PLACEMENT_BOTTOMEND = 'bottom-end';\n  var PLACEMENT_RIGHT = 'right-start';\n  var PLACEMENT_LEFT = 'left-start';\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string',\n    popperConfig: '(null|object)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Dropdown = /*#__PURE__*/function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype; // Public\n\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {\n        return;\n      }\n\n      var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      this.show(true);\n    };\n\n    _proto.show = function show(usePopper) {\n      if (usePopper === void 0) {\n        usePopper = false;\n      }\n\n      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $__default['default'].Event(EVENT_SHOW$1, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $__default['default'](parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar && usePopper) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper__default['default'] === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);\n        }\n\n        this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n        $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW$2);\n      $__default['default'](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_SHOWN$1, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $__default['default'].Event(EVENT_HIDE$1, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $__default['default'](parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW$2);\n      $__default['default'](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_HIDDEN$1, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$4);\n      $__default['default'](this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $__default['default'](this._element).on(EVENT_CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(SELECTOR_MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $__default['default'](this._element.parentNode);\n      var placement = PLACEMENT_BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n        placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n        placement = PLACEMENT_RIGHT;\n      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n        placement = PLACEMENT_LEFT;\n      } else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n        placement = PLACEMENT_BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $__default['default'](this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        }\n      }; // Disable Popper.js if we have a static display\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return _extends({}, popperConfig, this._config.popperConfig);\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$4);\n\n        var _config = _typeof(config) === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $__default['default'](this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $__default['default'](toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW$2)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $__default['default'].Event(EVENT_HIDE$1, relatedTarget);\n        $__default['default'](parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n\n        if (context._popper) {\n          context._popper.destroy();\n        }\n\n        $__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW$2);\n        $__default['default'](parent).removeClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_HIDDEN$1, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default['default'](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW$2);\n\n      if (!isActive && event.which === ESCAPE_KEYCODE) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {\n        if (event.which === ESCAPE_KEYCODE) {\n          $__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');\n        }\n\n        $__default['default'](this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {\n        return $__default['default'](item).is(':visible');\n      });\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + \" \" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');\n  }).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$4] = Dropdown._jQueryInterface;\n  $__default['default'].fn[NAME$4].Constructor = Dropdown;\n\n  $__default['default'].fn[NAME$4].noConflict = function () {\n    $__default['default'].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.5.3';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $__default['default'].fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var EVENT_HIDE$2 = \"hide\" + EVENT_KEY$5;\n  var EVENT_HIDE_PREVENTED = \"hidePrevented\" + EVENT_KEY$5;\n  var EVENT_HIDDEN$2 = \"hidden\" + EVENT_KEY$5;\n  var EVENT_SHOW$2 = \"show\" + EVENT_KEY$5;\n  var EVENT_SHOWN$2 = \"shown\" + EVENT_KEY$5;\n  var EVENT_FOCUSIN = \"focusin\" + EVENT_KEY$5;\n  var EVENT_RESIZE = \"resize\" + EVENT_KEY$5;\n  var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY$5;\n  var EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\" + EVENT_KEY$5;\n  var EVENT_MOUSEUP_DISMISS = \"mouseup.dismiss\" + EVENT_KEY$5;\n  var EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\" + EVENT_KEY$5;\n  var EVENT_CLICK_DATA_API$5 = \"click\" + EVENT_KEY$5 + DATA_API_KEY$5;\n  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\n  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\n  var CLASS_NAME_BACKDROP = 'modal-backdrop';\n  var CLASS_NAME_OPEN = 'modal-open';\n  var CLASS_NAME_FADE$1 = 'fade';\n  var CLASS_NAME_SHOW$3 = 'show';\n  var CLASS_NAME_STATIC = 'modal-static';\n  var SELECTOR_DIALOG = '.modal-dialog';\n  var SELECTOR_MODAL_BODY = '.modal-body';\n  var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\"modal\"]';\n  var SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]';\n  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  var SELECTOR_STICKY_CONTENT = '.sticky-top';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Modal = /*#__PURE__*/function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(SELECTOR_DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype; // Public\n\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE$1)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $__default['default'].Event(EVENT_SHOW$2, {\n        relatedTarget: relatedTarget\n      });\n      $__default['default'](this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $__default['default'](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $__default['default'](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {\n        $__default['default'](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {\n          if ($__default['default'](event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $__default['default'].Event(EVENT_HIDE$2);\n      $__default['default'](this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $__default['default'](document).off(EVENT_FOCUSIN);\n      $__default['default'](this._element).removeClass(CLASS_NAME_SHOW$3);\n      $__default['default'](this._element).off(EVENT_CLICK_DISMISS);\n      $__default['default'](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default['default'](this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $__default['default'](htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      $__default['default'](document).off(EVENT_FOCUSIN);\n      $__default['default'].removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n      var _this3 = this;\n\n      if (this._config.backdrop === 'static') {\n        var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED);\n        $__default['default'](this._element).trigger(hideEventPrevented);\n\n        if (hideEventPrevented.isDefaultPrevented()) {\n          return;\n        }\n\n        var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n        if (!isModalOverflowing) {\n          this._element.style.overflowY = 'hidden';\n        }\n\n        this._element.classList.add(CLASS_NAME_STATIC);\n\n        var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $__default['default'](this._element).off(Util.TRANSITION_END);\n        $__default['default'](this._element).one(Util.TRANSITION_END, function () {\n          _this3._element.classList.remove(CLASS_NAME_STATIC);\n\n          if (!isModalOverflowing) {\n            $__default['default'](_this3._element).one(Util.TRANSITION_END, function () {\n              _this3._element.style.overflowY = '';\n            }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\n          }\n        }).emulateTransitionEnd(modalTransitionDuration);\n\n        this._element.focus();\n      } else {\n        this.hide();\n      }\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this4 = this;\n\n      var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1);\n      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      if ($__default['default'](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n        modalBody.scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $__default['default'](this._element).addClass(CLASS_NAME_SHOW$3);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $__default['default'].Event(EVENT_SHOWN$2, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this4._config.focus) {\n          _this4._element.focus();\n        }\n\n        _this4._isTransitioning = false;\n        $__default['default'](_this4._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $__default['default'](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this5 = this;\n\n      $__default['default'](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\n      .on(EVENT_FOCUSIN, function (event) {\n        if (document !== event.target && _this5._element !== event.target && $__default['default'](_this5._element).has(event.target).length === 0) {\n          _this5._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $__default['default'](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {\n          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this6.hide();\n          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {\n            _this6._triggerBackdropTransition();\n          }\n        });\n      } else if (!this._isShown) {\n        $__default['default'](this._element).off(EVENT_KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this7 = this;\n\n      if (this._isShown) {\n        $__default['default'](window).on(EVENT_RESIZE, function (event) {\n          return _this7.handleUpdate(event);\n        });\n      } else {\n        $__default['default'](window).off(EVENT_RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this8 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $__default['default'](document.body).removeClass(CLASS_NAME_OPEN);\n\n        _this8._resetAdjustments();\n\n        _this8._resetScrollbar();\n\n        $__default['default'](_this8._element).trigger(EVENT_HIDDEN$2);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $__default['default'](this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this9 = this;\n\n      var animate = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $__default['default'](this._backdrop).appendTo(document.body);\n        $__default['default'](this._element).on(EVENT_CLICK_DISMISS, function (event) {\n          if (_this9._ignoreBackdropClick) {\n            _this9._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          _this9._triggerBackdropTransition();\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $__default['default'](this._backdrop).addClass(CLASS_NAME_SHOW$3);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $__default['default'](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $__default['default'](this._backdrop).removeClass(CLASS_NAME_SHOW$3);\n\n        var callbackRemove = function callbackRemove() {\n          _this9._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE$1)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $__default['default'](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this10 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding\n\n        $__default['default'](fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $__default['default'](element).css('padding-right');\n          $__default['default'](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $__default['default'](stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $__default['default'](element).css('margin-right');\n          $__default['default'](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $__default['default'](document.body).css('padding-right');\n        $__default['default'](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $__default['default'](document.body).addClass(CLASS_NAME_OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n      $__default['default'](fixedContent).each(function (index, element) {\n        var padding = $__default['default'](element).data('padding-right');\n        $__default['default'](element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + SELECTOR_STICKY_CONTENT));\n      $__default['default'](elements).each(function (index, element) {\n        var margin = $__default['default'](element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $__default['default'](element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $__default['default'](document.body).data('padding-right');\n      $__default['default'](document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$5);\n\n        var _config = _extends({}, Default$3, $__default['default'](this).data(), _typeof(config) === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $__default['default'](this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) {\n    var _this11 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $__default['default'](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default['default'](target).data(), $__default['default'](this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $__default['default'](target).one(EVENT_SHOW$2, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(EVENT_HIDDEN$2, function () {\n        if ($__default['default'](_this11).is(':visible')) {\n          _this11.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($__default['default'](target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$5] = Modal._jQueryInterface;\n  $__default['default'].fn[NAME$5].Constructor = Modal;\n\n  $__default['default'].fn[NAME$5].noConflict = function () {\n    $__default['default'].fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.5.3): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, len = regExp.length; i < len; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.5.3';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $__default['default'].fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object',\n    popperConfig: '(null|object)'\n  };\n  var AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist,\n    popperConfig: null\n  };\n  var HOVER_STATE_SHOW = 'show';\n  var HOVER_STATE_OUT = 'out';\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var CLASS_NAME_FADE$2 = 'fade';\n  var CLASS_NAME_SHOW$4 = 'show';\n  var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  var SELECTOR_ARROW = '.arrow';\n  var TRIGGER_HOVER = 'hover';\n  var TRIGGER_FOCUS = 'focus';\n  var TRIGGER_CLICK = 'click';\n  var TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tooltip = /*#__PURE__*/function () {\n    function Tooltip(element, config) {\n      if (typeof Popper__default['default'] === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype; // Public\n\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $__default['default'](event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $__default['default'](event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($__default['default'](this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $__default['default'].removeData(this.element, this.constructor.DATA_KEY);\n      $__default['default'](this.element).off(this.constructor.EVENT_KEY);\n      $__default['default'](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        $__default['default'](this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($__default['default'](this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $__default['default'].Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $__default['default'](this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $__default['default'].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $__default['default'](tip).addClass(CLASS_NAME_FADE$2);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $__default['default'](tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$__default['default'].contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $__default['default'](tip).appendTo(container);\n        }\n\n        $__default['default'](this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper__default['default'](this.element, tip, this._getPopperConfig(attachment));\n        $__default['default'](tip).addClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $__default['default'](_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HOVER_STATE_OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE$2)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $__default['default'](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $__default['default'].Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $__default['default'](_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $__default['default'](this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $__default['default'](tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n\n      if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE$2)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $__default['default'](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $__default['default'](this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($__default['default'](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\n      $__default['default'](tip).removeClass(CLASS_NAME_FADE$2 + \" \" + CLASS_NAME_SHOW$4);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (_typeof(content) === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$__default['default'](content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($__default['default'](content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getPopperConfig = function _getPopperConfig(attachment) {\n      var _this3 = this;\n\n      var defaultBsConfig = {\n        placement: attachment,\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            behavior: this.config.fallbackPlacement\n          },\n          arrow: {\n            element: SELECTOR_ARROW\n          },\n          preventOverflow: {\n            boundariesElement: this.config.boundary\n          }\n        },\n        onCreate: function onCreate(data) {\n          if (data.originalPlacement !== data.placement) {\n            _this3._handlePopperPlacementChange(data);\n          }\n        },\n        onUpdate: function onUpdate(data) {\n          return _this3._handlePopperPlacementChange(data);\n        }\n      };\n      return _extends({}, defaultBsConfig, this.config.popperConfig);\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this4 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $__default['default'](this.config.container);\n      }\n\n      return $__default['default'](document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this5 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $__default['default'](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n            return _this5.toggle(event);\n          });\n        } else if (trigger !== TRIGGER_MANUAL) {\n          var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n          var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n          $__default['default'](_this5.element).on(eventIn, _this5.config.selector, function (event) {\n            return _this5._enter(event);\n          }).on(eventOut, _this5.config.selector, function (event) {\n            return _this5._leave(event);\n          });\n        }\n      });\n\n      this._hideModalHandler = function () {\n        if (_this5.element) {\n          _this5.hide();\n        }\n      };\n\n      $__default['default'](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n      if (this.config.selector) {\n        this.config = _extends({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = _typeof(this.element.getAttribute('data-original-title'));\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $__default['default'](event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $__default['default'](event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if ($__default['default'](context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $__default['default'](event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $__default['default'](event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $__default['default'](this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _extends({}, this.constructor.Default, dataAttributes, _typeof(config) === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $__default['default'](this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      this.tip = popperData.instance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $__default['default'](tip).removeClass(CLASS_NAME_FADE$2);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY$6);\n\n        var _config = _typeof(config) === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $element.data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'].fn[NAME$6] = Tooltip._jQueryInterface;\n  $__default['default'].fn[NAME$6].Constructor = Tooltip;\n\n  $__default['default'].fn[NAME$6].noConflict = function () {\n    $__default['default'].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.5.3';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $__default['default'].fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _extends({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _extends({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var CLASS_NAME_FADE$3 = 'fade';\n  var CLASS_NAME_SHOW$5 = 'show';\n  var SELECTOR_TITLE = '.popover-header';\n  var SELECTOR_CONTENT = '.popover-body';\n  var Event$1 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Popover = /*#__PURE__*/function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype; // Overrides\n\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $__default['default'](this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $__default['default'](this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(SELECTOR_CONTENT), content);\n      $tip.removeClass(CLASS_NAME_FADE$3 + \" \" + CLASS_NAME_SHOW$5);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $__default['default'](this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$7);\n\n        var _config = _typeof(config) === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $__default['default'](this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$1;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'].fn[NAME$7] = Popover._jQueryInterface;\n  $__default['default'].fn[NAME$7].Constructor = Popover;\n\n  $__default['default'].fn[NAME$7].noConflict = function () {\n    $__default['default'].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.5.3';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $__default['default'].fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var EVENT_ACTIVATE = \"activate\" + EVENT_KEY$8;\n  var EVENT_SCROLL = \"scroll\" + EVENT_KEY$8;\n  var EVENT_LOAD_DATA_API$2 = \"load\" + EVENT_KEY$8 + DATA_API_KEY$6;\n  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  var CLASS_NAME_ACTIVE$2 = 'active';\n  var SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]';\n  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  var SELECTOR_NAV_LINKS = '.nav-link';\n  var SELECTOR_NAV_ITEMS = '.nav-item';\n  var SELECTOR_LIST_ITEMS = '.list-group-item';\n  var SELECTOR_DROPDOWN = '.dropdown';\n  var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  var METHOD_OFFSET = 'offset';\n  var METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var ScrollSpy = /*#__PURE__*/function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + SELECTOR_NAV_LINKS + \",\" + (this._config.target + \" \" + SELECTOR_LIST_ITEMS + \",\") + (this._config.target + \" \" + SELECTOR_DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $__default['default'](this._scrollElement).on(EVENT_SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype; // Public\n\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$__default['default'](target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$8);\n      $__default['default'](this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$6, _typeof(config) === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n        var id = $__default['default'](config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $__default['default'](config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (var i = this._offsets.length; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $__default['default']([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n        $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);\n        $link.addClass(CLASS_NAME_ACTIVE$2);\n      } else {\n        // Set triggered link as active\n        $link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + \", \" + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);\n      }\n\n      $__default['default'](this._scrollElement).trigger(EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(CLASS_NAME_ACTIVE$2);\n      }).forEach(function (node) {\n        return node.classList.remove(CLASS_NAME_ACTIVE$2);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$8);\n\n        var _config = _typeof(config) === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $__default['default'](this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](window).on(EVENT_LOAD_DATA_API$2, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $__default['default'](scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $__default['default'].fn[NAME$8].Constructor = ScrollSpy;\n\n  $__default['default'].fn[NAME$8].noConflict = function () {\n    $__default['default'].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.5.3';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $__default['default'].fn[NAME$9];\n  var EVENT_HIDE$3 = \"hide\" + EVENT_KEY$9;\n  var EVENT_HIDDEN$3 = \"hidden\" + EVENT_KEY$9;\n  var EVENT_SHOW$3 = \"show\" + EVENT_KEY$9;\n  var EVENT_SHOWN$3 = \"shown\" + EVENT_KEY$9;\n  var EVENT_CLICK_DATA_API$6 = \"click\" + EVENT_KEY$9 + DATA_API_KEY$7;\n  var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  var CLASS_NAME_ACTIVE$3 = 'active';\n  var CLASS_NAME_DISABLED$1 = 'disabled';\n  var CLASS_NAME_FADE$4 = 'fade';\n  var CLASS_NAME_SHOW$6 = 'show';\n  var SELECTOR_DROPDOWN$1 = '.dropdown';\n  var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  var SELECTOR_ACTIVE$2 = '.active';\n  var SELECTOR_ACTIVE_UL = '> li > .active';\n  var SELECTOR_DATA_TOGGLE$4 = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]';\n  var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tab = /*#__PURE__*/function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype; // Public\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default['default'](this._element).hasClass(CLASS_NAME_ACTIVE$3) || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED$1)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $__default['default'](this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$2;\n        previous = $__default['default'].makeArray($__default['default'](listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $__default['default'].Event(EVENT_HIDE$3, {\n        relatedTarget: this._element\n      });\n      var showEvent = $__default['default'].Event(EVENT_SHOW$3, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $__default['default'](previous).trigger(hideEvent);\n      }\n\n      $__default['default'](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $__default['default'].Event(EVENT_HIDDEN$3, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $__default['default'].Event(EVENT_SHOWN$3, {\n          relatedTarget: previous\n        });\n        $__default['default'](previous).trigger(hiddenEvent);\n        $__default['default'](_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default['default'](container).find(SELECTOR_ACTIVE_UL) : $__default['default'](container).children(SELECTOR_ACTIVE$2);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $__default['default'](active).hasClass(CLASS_NAME_FADE$4);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $__default['default'](active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $__default['default'](active).removeClass(CLASS_NAME_ACTIVE$3);\n        var dropdownChild = $__default['default'](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $__default['default'](dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $__default['default'](element).addClass(CLASS_NAME_ACTIVE$3);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$4)) {\n        element.classList.add(CLASS_NAME_SHOW$6);\n      }\n\n      if (element.parentNode && $__default['default'](element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n        var dropdownElement = $__default['default'](element).closest(SELECTOR_DROPDOWN$1)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));\n          $__default['default'](dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $__default['default'](this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($__default['default'](this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$9] = Tab._jQueryInterface;\n  $__default['default'].fn[NAME$9].Constructor = Tab;\n\n  $__default['default'].fn[NAME$9].noConflict = function () {\n    $__default['default'].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.5.3';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $__default['default'].fn[NAME$a];\n  var EVENT_CLICK_DISMISS$1 = \"click.dismiss\" + EVENT_KEY$a;\n  var EVENT_HIDE$4 = \"hide\" + EVENT_KEY$a;\n  var EVENT_HIDDEN$4 = \"hidden\" + EVENT_KEY$a;\n  var EVENT_SHOW$4 = \"show\" + EVENT_KEY$a;\n  var EVENT_SHOWN$4 = \"shown\" + EVENT_KEY$a;\n  var CLASS_NAME_FADE$5 = 'fade';\n  var CLASS_NAME_HIDE = 'hide';\n  var CLASS_NAME_SHOW$7 = 'show';\n  var CLASS_NAME_SHOWING = 'showing';\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Toast = /*#__PURE__*/function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype; // Public\n\n    _proto.show = function show() {\n      var _this = this;\n\n      var showEvent = $__default['default'].Event(EVENT_SHOW$4);\n      $__default['default'](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        _this._element.classList.add(CLASS_NAME_SHOW$7);\n\n        $__default['default'](_this._element).trigger(EVENT_SHOWN$4);\n\n        if (_this._config.autohide) {\n          _this._timeout = setTimeout(function () {\n            _this.hide();\n          }, _this._config.delay);\n        }\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      Util.reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      var hideEvent = $__default['default'].Event(EVENT_HIDE$4);\n      $__default['default'](this._element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._close();\n    };\n\n    _proto.dispose = function dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        this._element.classList.remove(CLASS_NAME_SHOW$7);\n      }\n\n      $__default['default'](this._element).off(EVENT_CLICK_DISMISS$1);\n      $__default['default'].removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$7, $__default['default'](this._element).data(), _typeof(config) === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this2 = this;\n\n      $__default['default'](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {\n        return _this2.hide();\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this3 = this;\n\n      var complete = function complete() {\n        _this3._element.classList.add(CLASS_NAME_HIDE);\n\n        $__default['default'](_this3._element).trigger(EVENT_HIDDEN$4);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._clearTimeout = function _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = _typeof(config) === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'].fn[NAME$a] = Toast._jQueryInterface;\n  $__default['default'].fn[NAME$a].Constructor = Toast;\n\n  $__default['default'].fn[NAME$a].noConflict = function () {\n    $__default['default'].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n  exports.Util = Util;\n  Object.defineProperty(exports, '__esModule', {\n    value: true\n  });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    define(['jquery'], factory);\n  } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') {\n    factory(require('jquery'));\n  } else {\n    factory(jQuery);\n  }\n})(function ($, undefined) {\n  function UTCDate() {\n    return new Date(Date.UTC.apply(Date, arguments));\n  }\n\n  function UTCToday() {\n    var today = new Date();\n    return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n  }\n\n  function isUTCEquals(date1, date2) {\n    return date1.getUTCFullYear() === date2.getUTCFullYear() && date1.getUTCMonth() === date2.getUTCMonth() && date1.getUTCDate() === date2.getUTCDate();\n  }\n\n  function alias(method, deprecationMsg) {\n    return function () {\n      if (deprecationMsg !== undefined) {\n        $.fn.datepicker.deprecated(deprecationMsg);\n      }\n\n      return this[method].apply(this, arguments);\n    };\n  }\n\n  function isValidDate(d) {\n    return d && !isNaN(d.getTime());\n  }\n\n  var DateArray = function () {\n    var extras = {\n      get: function get(i) {\n        return this.slice(i)[0];\n      },\n      contains: function contains(d) {\n        // Array.indexOf is not cross-browser;\n        // $.inArray doesn't work with Dates\n        var val = d && d.valueOf();\n\n        for (var i = 0, l = this.length; i < l; i++) {\n          // Use date arithmetic to allow dates with different times to match\n          if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000 * 60 * 60 * 24) return i;\n        }\n\n        return -1;\n      },\n      remove: function remove(i) {\n        this.splice(i, 1);\n      },\n      replace: function replace(new_array) {\n        if (!new_array) return;\n        if (!$.isArray(new_array)) new_array = [new_array];\n        this.clear();\n        this.push.apply(this, new_array);\n      },\n      clear: function clear() {\n        this.length = 0;\n      },\n      copy: function copy() {\n        var a = new DateArray();\n        a.replace(this);\n        return a;\n      }\n    };\n    return function () {\n      var a = [];\n      a.push.apply(a, arguments);\n      $.extend(a, extras);\n      return a;\n    };\n  }(); // Picker object\n\n\n  var Datepicker = function Datepicker(element, options) {\n    $.data(element, 'datepicker', this);\n    this._events = [];\n    this._secondaryEvents = [];\n\n    this._process_options(options);\n\n    this.dates = new DateArray();\n    this.viewDate = this.o.defaultViewDate;\n    this.focusDate = null;\n    this.element = $(element);\n    this.isInput = this.element.is('input');\n    this.inputField = this.isInput ? this.element : this.element.find('input');\n    this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n    if (this.component && this.component.length === 0) this.component = false;\n    this.isInline = !this.component && this.element.is('div');\n    this.picker = $(DPGlobal.template); // Checking templates and inserting\n\n    if (this._check_template(this.o.templates.leftArrow)) {\n      this.picker.find('.prev').html(this.o.templates.leftArrow);\n    }\n\n    if (this._check_template(this.o.templates.rightArrow)) {\n      this.picker.find('.next').html(this.o.templates.rightArrow);\n    }\n\n    this._buildEvents();\n\n    this._attachEvents();\n\n    if (this.isInline) {\n      this.picker.addClass('datepicker-inline').appendTo(this.element);\n    } else {\n      this.picker.addClass('datepicker-dropdown dropdown-menu');\n    }\n\n    if (this.o.rtl) {\n      this.picker.addClass('datepicker-rtl');\n    }\n\n    if (this.o.calendarWeeks) {\n      this.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear').attr('colspan', function (i, val) {\n        return Number(val) + 1;\n      });\n    }\n\n    this._process_options({\n      startDate: this._o.startDate,\n      endDate: this._o.endDate,\n      daysOfWeekDisabled: this.o.daysOfWeekDisabled,\n      daysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n      datesDisabled: this.o.datesDisabled\n    });\n\n    this._allow_update = false;\n    this.setViewMode(this.o.startView);\n    this._allow_update = true;\n    this.fillDow();\n    this.fillMonths();\n    this.update();\n\n    if (this.isInline) {\n      this.show();\n    }\n  };\n\n  Datepicker.prototype = {\n    constructor: Datepicker,\n    _resolveViewName: function _resolveViewName(view) {\n      $.each(DPGlobal.viewModes, function (i, viewMode) {\n        if (view === i || $.inArray(view, viewMode.names) !== -1) {\n          view = i;\n          return false;\n        }\n      });\n      return view;\n    },\n    _resolveDaysOfWeek: function _resolveDaysOfWeek(daysOfWeek) {\n      if (!$.isArray(daysOfWeek)) daysOfWeek = daysOfWeek.split(/[,\\s]*/);\n      return $.map(daysOfWeek, Number);\n    },\n    _check_template: function _check_template(tmp) {\n      try {\n        // If empty\n        if (tmp === undefined || tmp === \"\") {\n          return false;\n        } // If no html, everything ok\n\n\n        if ((tmp.match(/[<>]/g) || []).length <= 0) {\n          return true;\n        } // Checking if html is fine\n\n\n        var jDom = $(tmp);\n        return jDom.length > 0;\n      } catch (ex) {\n        return false;\n      }\n    },\n    _process_options: function _process_options(opts) {\n      // Store raw options for reference\n      this._o = $.extend({}, this._o, opts); // Processed options\n\n      var o = this.o = $.extend({}, this._o); // Check if \"de-DE\" style date is available, if not language should\n      // fallback to 2 letter code eg \"de\"\n\n      var lang = o.language;\n\n      if (!dates[lang]) {\n        lang = lang.split('-')[0];\n        if (!dates[lang]) lang = defaults.language;\n      }\n\n      o.language = lang; // Retrieve view index from any aliases\n\n      o.startView = this._resolveViewName(o.startView);\n      o.minViewMode = this._resolveViewName(o.minViewMode);\n      o.maxViewMode = this._resolveViewName(o.maxViewMode); // Check view is between min and max\n\n      o.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView)); // true, false, or Number > 0\n\n      if (o.multidate !== true) {\n        o.multidate = Number(o.multidate) || false;\n        if (o.multidate !== false) o.multidate = Math.max(0, o.multidate);\n      }\n\n      o.multidateSeparator = String(o.multidateSeparator);\n      o.weekStart %= 7;\n      o.weekEnd = (o.weekStart + 6) % 7;\n      var format = DPGlobal.parseFormat(o.format);\n\n      if (o.startDate !== -Infinity) {\n        if (!!o.startDate) {\n          if (o.startDate instanceof Date) o.startDate = this._local_to_utc(this._zero_time(o.startDate));else o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n        } else {\n          o.startDate = -Infinity;\n        }\n      }\n\n      if (o.endDate !== Infinity) {\n        if (!!o.endDate) {\n          if (o.endDate instanceof Date) o.endDate = this._local_to_utc(this._zero_time(o.endDate));else o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n        } else {\n          o.endDate = Infinity;\n        }\n      }\n\n      o.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled || []);\n      o.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted || []);\n      o.datesDisabled = o.datesDisabled || [];\n\n      if (!$.isArray(o.datesDisabled)) {\n        o.datesDisabled = o.datesDisabled.split(',');\n      }\n\n      o.datesDisabled = $.map(o.datesDisabled, function (d) {\n        return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n      });\n\n      var plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n          _plc = o.orientation.toLowerCase();\n\n      plc = $.grep(plc, function (word) {\n        return /^auto|left|right|top|bottom$/.test(word);\n      });\n      o.orientation = {\n        x: 'auto',\n        y: 'auto'\n      };\n      if (!_plc || _plc === 'auto') ; // no action\n      else if (plc.length === 1) {\n          switch (plc[0]) {\n            case 'top':\n            case 'bottom':\n              o.orientation.y = plc[0];\n              break;\n\n            case 'left':\n            case 'right':\n              o.orientation.x = plc[0];\n              break;\n          }\n        } else {\n          _plc = $.grep(plc, function (word) {\n            return /^left|right$/.test(word);\n          });\n          o.orientation.x = _plc[0] || 'auto';\n          _plc = $.grep(plc, function (word) {\n            return /^top|bottom$/.test(word);\n          });\n          o.orientation.y = _plc[0] || 'auto';\n        }\n\n      if (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n        o.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n      } else if (o.defaultViewDate) {\n        var year = o.defaultViewDate.year || new Date().getFullYear();\n        var month = o.defaultViewDate.month || 0;\n        var day = o.defaultViewDate.day || 1;\n        o.defaultViewDate = UTCDate(year, month, day);\n      } else {\n        o.defaultViewDate = UTCToday();\n      }\n    },\n    _applyEvents: function _applyEvents(evs) {\n      for (var i = 0, el, ch, ev; i < evs.length; i++) {\n        el = evs[i][0];\n\n        if (evs[i].length === 2) {\n          ch = undefined;\n          ev = evs[i][1];\n        } else if (evs[i].length === 3) {\n          ch = evs[i][1];\n          ev = evs[i][2];\n        }\n\n        el.on(ev, ch);\n      }\n    },\n    _unapplyEvents: function _unapplyEvents(evs) {\n      for (var i = 0, el, ev, ch; i < evs.length; i++) {\n        el = evs[i][0];\n\n        if (evs[i].length === 2) {\n          ch = undefined;\n          ev = evs[i][1];\n        } else if (evs[i].length === 3) {\n          ch = evs[i][1];\n          ev = evs[i][2];\n        }\n\n        el.off(ev, ch);\n      }\n    },\n    _buildEvents: function _buildEvents() {\n      var events = {\n        keyup: $.proxy(function (e) {\n          if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1) this.update();\n        }, this),\n        keydown: $.proxy(this.keydown, this),\n        paste: $.proxy(this.paste, this)\n      };\n\n      if (this.o.showOnFocus === true) {\n        events.focus = $.proxy(this.show, this);\n      }\n\n      if (this.isInput) {\n        // single input\n        this._events = [[this.element, events]];\n      } // component: input + button\n      else if (this.component && this.inputField.length) {\n          this._events = [// For components that are not readonly, allow keyboard nav\n          [this.inputField, events], [this.component, {\n            click: $.proxy(this.show, this)\n          }]];\n        } else {\n          this._events = [[this.element, {\n            click: $.proxy(this.show, this),\n            keydown: $.proxy(this.keydown, this)\n          }]];\n        }\n\n      this._events.push( // Component: listen for blur on element descendants\n      [this.element, '*', {\n        blur: $.proxy(function (e) {\n          this._focused_from = e.target;\n        }, this)\n      }], // Input: listen for blur on element\n      [this.element, {\n        blur: $.proxy(function (e) {\n          this._focused_from = e.target;\n        }, this)\n      }]);\n\n      if (this.o.immediateUpdates) {\n        // Trigger input updates immediately on changed year/month\n        this._events.push([this.element, {\n          'changeYear changeMonth': $.proxy(function (e) {\n            this.update(e.date);\n          }, this)\n        }]);\n      }\n\n      this._secondaryEvents = [[this.picker, {\n        click: $.proxy(this.click, this)\n      }], [this.picker, '.prev, .next', {\n        click: $.proxy(this.navArrowsClick, this)\n      }], [this.picker, '.day:not(.disabled)', {\n        click: $.proxy(this.dayCellClick, this)\n      }], [$(window), {\n        resize: $.proxy(this.place, this)\n      }], [$(document), {\n        'mousedown touchstart': $.proxy(function (e) {\n          // Clicked outside the datepicker, hide it\n          if (!(this.element.is(e.target) || this.element.find(e.target).length || this.picker.is(e.target) || this.picker.find(e.target).length || this.isInline)) {\n            this.hide();\n          }\n        }, this)\n      }]];\n    },\n    _attachEvents: function _attachEvents() {\n      this._detachEvents();\n\n      this._applyEvents(this._events);\n    },\n    _detachEvents: function _detachEvents() {\n      this._unapplyEvents(this._events);\n    },\n    _attachSecondaryEvents: function _attachSecondaryEvents() {\n      this._detachSecondaryEvents();\n\n      this._applyEvents(this._secondaryEvents);\n    },\n    _detachSecondaryEvents: function _detachSecondaryEvents() {\n      this._unapplyEvents(this._secondaryEvents);\n    },\n    _trigger: function _trigger(event, altdate) {\n      var date = altdate || this.dates.get(-1),\n          local_date = this._utc_to_local(date);\n\n      this.element.trigger({\n        type: event,\n        date: local_date,\n        viewMode: this.viewMode,\n        dates: $.map(this.dates, this._utc_to_local),\n        format: $.proxy(function (ix, format) {\n          if (arguments.length === 0) {\n            ix = this.dates.length - 1;\n            format = this.o.format;\n          } else if (typeof ix === 'string') {\n            format = ix;\n            ix = this.dates.length - 1;\n          }\n\n          format = format || this.o.format;\n          var date = this.dates.get(ix);\n          return DPGlobal.formatDate(date, format, this.o.language);\n        }, this)\n      });\n    },\n    show: function show() {\n      if (this.inputField.is(':disabled') || this.inputField.prop('readonly') && this.o.enableOnReadonly === false) return;\n      if (!this.isInline) this.picker.appendTo(this.o.container);\n      this.place();\n      this.picker.show();\n\n      this._attachSecondaryEvents();\n\n      this._trigger('show');\n\n      if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n        $(this.element).blur();\n      }\n\n      return this;\n    },\n    hide: function hide() {\n      if (this.isInline || !this.picker.is(':visible')) return this;\n      this.focusDate = null;\n      this.picker.hide().detach();\n\n      this._detachSecondaryEvents();\n\n      this.setViewMode(this.o.startView);\n      if (this.o.forceParse && this.inputField.val()) this.setValue();\n\n      this._trigger('hide');\n\n      return this;\n    },\n    destroy: function destroy() {\n      this.hide();\n\n      this._detachEvents();\n\n      this._detachSecondaryEvents();\n\n      this.picker.remove();\n      delete this.element.data().datepicker;\n\n      if (!this.isInput) {\n        delete this.element.data().date;\n      }\n\n      return this;\n    },\n    paste: function paste(e) {\n      var dateString;\n\n      if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types && $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n        dateString = e.originalEvent.clipboardData.getData('text/plain');\n      } else if (window.clipboardData) {\n        dateString = window.clipboardData.getData('Text');\n      } else {\n        return;\n      }\n\n      this.setDate(dateString);\n      this.update();\n      e.preventDefault();\n    },\n    _utc_to_local: function _utc_to_local(utc) {\n      if (!utc) {\n        return utc;\n      }\n\n      var local = new Date(utc.getTime() + utc.getTimezoneOffset() * 60000);\n\n      if (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n        local = new Date(utc.getTime() + local.getTimezoneOffset() * 60000);\n      }\n\n      return local;\n    },\n    _local_to_utc: function _local_to_utc(local) {\n      return local && new Date(local.getTime() - local.getTimezoneOffset() * 60000);\n    },\n    _zero_time: function _zero_time(local) {\n      return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n    },\n    _zero_utc_time: function _zero_utc_time(utc) {\n      return utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n    },\n    getDates: function getDates() {\n      return $.map(this.dates, this._utc_to_local);\n    },\n    getUTCDates: function getUTCDates() {\n      return $.map(this.dates, function (d) {\n        return new Date(d);\n      });\n    },\n    getDate: function getDate() {\n      return this._utc_to_local(this.getUTCDate());\n    },\n    getUTCDate: function getUTCDate() {\n      var selected_date = this.dates.get(-1);\n\n      if (selected_date !== undefined) {\n        return new Date(selected_date);\n      } else {\n        return null;\n      }\n    },\n    clearDates: function clearDates() {\n      this.inputField.val('');\n      this.update();\n\n      this._trigger('changeDate');\n\n      if (this.o.autoclose) {\n        this.hide();\n      }\n    },\n    setDates: function setDates() {\n      var args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n      this.update.apply(this, args);\n\n      this._trigger('changeDate');\n\n      this.setValue();\n      return this;\n    },\n    setUTCDates: function setUTCDates() {\n      var args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n      this.setDates.apply(this, $.map(args, this._utc_to_local));\n      return this;\n    },\n    setDate: alias('setDates'),\n    setUTCDate: alias('setUTCDates'),\n    remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n    setValue: function setValue() {\n      var formatted = this.getFormattedDate();\n      this.inputField.val(formatted);\n      return this;\n    },\n    getFormattedDate: function getFormattedDate(format) {\n      if (format === undefined) format = this.o.format;\n      var lang = this.o.language;\n      return $.map(this.dates, function (d) {\n        return DPGlobal.formatDate(d, format, lang);\n      }).join(this.o.multidateSeparator);\n    },\n    getStartDate: function getStartDate() {\n      return this.o.startDate;\n    },\n    setStartDate: function setStartDate(startDate) {\n      this._process_options({\n        startDate: startDate\n      });\n\n      this.update();\n      this.updateNavArrows();\n      return this;\n    },\n    getEndDate: function getEndDate() {\n      return this.o.endDate;\n    },\n    setEndDate: function setEndDate(endDate) {\n      this._process_options({\n        endDate: endDate\n      });\n\n      this.update();\n      this.updateNavArrows();\n      return this;\n    },\n    setDaysOfWeekDisabled: function setDaysOfWeekDisabled(daysOfWeekDisabled) {\n      this._process_options({\n        daysOfWeekDisabled: daysOfWeekDisabled\n      });\n\n      this.update();\n      return this;\n    },\n    setDaysOfWeekHighlighted: function setDaysOfWeekHighlighted(daysOfWeekHighlighted) {\n      this._process_options({\n        daysOfWeekHighlighted: daysOfWeekHighlighted\n      });\n\n      this.update();\n      return this;\n    },\n    setDatesDisabled: function setDatesDisabled(datesDisabled) {\n      this._process_options({\n        datesDisabled: datesDisabled\n      });\n\n      this.update();\n      return this;\n    },\n    place: function place() {\n      if (this.isInline) return this;\n      var calendarWidth = this.picker.outerWidth(),\n          calendarHeight = this.picker.outerHeight(),\n          visualPadding = 10,\n          container = $(this.o.container),\n          windowWidth = container.width(),\n          scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n          appendOffset = container.offset();\n      var parentsZindex = [0];\n      this.element.parents().each(function () {\n        var itemZIndex = $(this).css('z-index');\n        if (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n      });\n      var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n      var offset = this.component ? this.component.parent().offset() : this.element.offset();\n      var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n      var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n      var left = offset.left - appendOffset.left;\n      var top = offset.top - appendOffset.top;\n\n      if (this.o.container !== 'body') {\n        top += scrollTop;\n      }\n\n      this.picker.removeClass('datepicker-orient-top datepicker-orient-bottom ' + 'datepicker-orient-right datepicker-orient-left');\n\n      if (this.o.orientation.x !== 'auto') {\n        this.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n        if (this.o.orientation.x === 'right') left -= calendarWidth - width;\n      } // auto x orientation is best-placement: if it crosses a window\n      // edge, fudge it sideways\n      else {\n          if (offset.left < 0) {\n            // component is outside the window on the left side. Move it into visible range\n            this.picker.addClass('datepicker-orient-left');\n            left -= offset.left - visualPadding;\n          } else if (left + calendarWidth > windowWidth) {\n            // the calendar passes the widow right edge. Align it to component right side\n            this.picker.addClass('datepicker-orient-right');\n            left += width - calendarWidth;\n          } else {\n            if (this.o.rtl) {\n              // Default to right\n              this.picker.addClass('datepicker-orient-right');\n            } else {\n              // Default to left\n              this.picker.addClass('datepicker-orient-left');\n            }\n          }\n        } // auto y orientation is best-situation: top or bottom, no fudging,\n      // decision based on which shows more of the calendar\n\n\n      var yorient = this.o.orientation.y,\n          top_overflow;\n\n      if (yorient === 'auto') {\n        top_overflow = -scrollTop + top - calendarHeight;\n        yorient = top_overflow < 0 ? 'bottom' : 'top';\n      }\n\n      this.picker.addClass('datepicker-orient-' + yorient);\n      if (yorient === 'top') top -= calendarHeight + parseInt(this.picker.css('padding-top'));else top += height;\n\n      if (this.o.rtl) {\n        var right = windowWidth - (left + width);\n        this.picker.css({\n          top: top,\n          right: right,\n          zIndex: zIndex\n        });\n      } else {\n        this.picker.css({\n          top: top,\n          left: left,\n          zIndex: zIndex\n        });\n      }\n\n      return this;\n    },\n    _allow_update: true,\n    update: function update() {\n      if (!this._allow_update) return this;\n      var oldDates = this.dates.copy(),\n          dates = [],\n          fromArgs = false;\n\n      if (arguments.length) {\n        $.each(arguments, $.proxy(function (i, date) {\n          if (date instanceof Date) date = this._local_to_utc(date);\n          dates.push(date);\n        }, this));\n        fromArgs = true;\n      } else {\n        dates = this.isInput ? this.element.val() : this.element.data('date') || this.inputField.val();\n        if (dates && this.o.multidate) dates = dates.split(this.o.multidateSeparator);else dates = [dates];\n        delete this.element.data().date;\n      }\n\n      dates = $.map(dates, $.proxy(function (date) {\n        return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n      }, this));\n      dates = $.grep(dates, $.proxy(function (date) {\n        return !this.dateWithinRange(date) || !date;\n      }, this), true);\n      this.dates.replace(dates);\n\n      if (this.o.updateViewDate) {\n        if (this.dates.length) this.viewDate = new Date(this.dates.get(-1));else if (this.viewDate < this.o.startDate) this.viewDate = new Date(this.o.startDate);else if (this.viewDate > this.o.endDate) this.viewDate = new Date(this.o.endDate);else this.viewDate = this.o.defaultViewDate;\n      }\n\n      if (fromArgs) {\n        // setting date by clicking\n        this.setValue();\n        this.element.change();\n      } else if (this.dates.length) {\n        // setting date by typing\n        if (String(oldDates) !== String(this.dates) && fromArgs) {\n          this._trigger('changeDate');\n\n          this.element.change();\n        }\n      }\n\n      if (!this.dates.length && oldDates.length) {\n        this._trigger('clearDate');\n\n        this.element.change();\n      }\n\n      this.fill();\n      return this;\n    },\n    fillDow: function fillDow() {\n      if (this.o.showWeekDays) {\n        var dowCnt = this.o.weekStart,\n            html = '<tr>';\n\n        if (this.o.calendarWeeks) {\n          html += '<th class=\"cw\">&#160;</th>';\n        }\n\n        while (dowCnt < this.o.weekStart + 7) {\n          html += '<th class=\"dow';\n          if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1) html += ' disabled';\n          html += '\">' + dates[this.o.language].daysMin[dowCnt++ % 7] + '</th>';\n        }\n\n        html += '</tr>';\n        this.picker.find('.datepicker-days thead').append(html);\n      }\n    },\n    fillMonths: function fillMonths() {\n      var localDate = this._utc_to_local(this.viewDate);\n\n      var html = '';\n      var focused;\n\n      for (var i = 0; i < 12; i++) {\n        focused = localDate && localDate.getMonth() === i ? ' focused' : '';\n        html += '<span class=\"month' + focused + '\">' + dates[this.o.language].monthsShort[i] + '</span>';\n      }\n\n      this.picker.find('.datepicker-months td').html(html);\n    },\n    setRange: function setRange(range) {\n      if (!range || !range.length) delete this.range;else this.range = $.map(range, function (d) {\n        return d.valueOf();\n      });\n      this.fill();\n    },\n    getClassNames: function getClassNames(date) {\n      var cls = [],\n          year = this.viewDate.getUTCFullYear(),\n          month = this.viewDate.getUTCMonth(),\n          today = UTCToday();\n\n      if (date.getUTCFullYear() < year || date.getUTCFullYear() === year && date.getUTCMonth() < month) {\n        cls.push('old');\n      } else if (date.getUTCFullYear() > year || date.getUTCFullYear() === year && date.getUTCMonth() > month) {\n        cls.push('new');\n      }\n\n      if (this.focusDate && date.valueOf() === this.focusDate.valueOf()) cls.push('focused'); // Compare internal UTC date with UTC today, not local today\n\n      if (this.o.todayHighlight && isUTCEquals(date, today)) {\n        cls.push('today');\n      }\n\n      if (this.dates.contains(date) !== -1) cls.push('active');\n\n      if (!this.dateWithinRange(date)) {\n        cls.push('disabled');\n      }\n\n      if (this.dateIsDisabled(date)) {\n        cls.push('disabled', 'disabled-date');\n      }\n\n      if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1) {\n        cls.push('highlighted');\n      }\n\n      if (this.range) {\n        if (date > this.range[0] && date < this.range[this.range.length - 1]) {\n          cls.push('range');\n        }\n\n        if ($.inArray(date.valueOf(), this.range) !== -1) {\n          cls.push('selected');\n        }\n\n        if (date.valueOf() === this.range[0]) {\n          cls.push('range-start');\n        }\n\n        if (date.valueOf() === this.range[this.range.length - 1]) {\n          cls.push('range-end');\n        }\n      }\n\n      return cls;\n    },\n    _fill_yearsView: function _fill_yearsView(selector, cssClass, factor, year, startYear, endYear, beforeFn) {\n      var html = '';\n      var step = factor / 10;\n      var view = this.picker.find(selector);\n      var startVal = Math.floor(year / factor) * factor;\n      var endVal = startVal + step * 9;\n      var focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n      var selected = $.map(this.dates, function (d) {\n        return Math.floor(d.getUTCFullYear() / step) * step;\n      });\n      var classes, tooltip, before;\n\n      for (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n        classes = [cssClass];\n        tooltip = null;\n\n        if (currVal === startVal - step) {\n          classes.push('old');\n        } else if (currVal === endVal + step) {\n          classes.push('new');\n        }\n\n        if ($.inArray(currVal, selected) !== -1) {\n          classes.push('active');\n        }\n\n        if (currVal < startYear || currVal > endYear) {\n          classes.push('disabled');\n        }\n\n        if (currVal === focusedVal) {\n          classes.push('focused');\n        }\n\n        if (beforeFn !== $.noop) {\n          before = beforeFn(new Date(currVal, 0, 1));\n\n          if (before === undefined) {\n            before = {};\n          } else if (typeof before === 'boolean') {\n            before = {\n              enabled: before\n            };\n          } else if (typeof before === 'string') {\n            before = {\n              classes: before\n            };\n          }\n\n          if (before.enabled === false) {\n            classes.push('disabled');\n          }\n\n          if (before.classes) {\n            classes = classes.concat(before.classes.split(/\\s+/));\n          }\n\n          if (before.tooltip) {\n            tooltip = before.tooltip;\n          }\n        }\n\n        html += '<span class=\"' + classes.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + '>' + currVal + '</span>';\n      }\n\n      view.find('.datepicker-switch').text(startVal + '-' + endVal);\n      view.find('td').html(html);\n    },\n    fill: function fill() {\n      var d = new Date(this.viewDate),\n          year = d.getUTCFullYear(),\n          month = d.getUTCMonth(),\n          startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n          startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n          endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n          endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n          todaytxt = dates[this.o.language].today || dates['en'].today || '',\n          cleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n          titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n          todayDate = UTCToday(),\n          titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n          tooltip,\n          before;\n      if (isNaN(year) || isNaN(month)) return;\n      this.picker.find('.datepicker-days .datepicker-switch').text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n      this.picker.find('tfoot .today').text(todaytxt).css('display', titleBtnVisible ? 'table-cell' : 'none');\n      this.picker.find('tfoot .clear').text(cleartxt).css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n      this.picker.find('thead .datepicker-title').text(this.o.title).css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n      this.updateNavArrows();\n      this.fillMonths();\n      var prevMonth = UTCDate(year, month, 0),\n          day = prevMonth.getUTCDate();\n      prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7) % 7);\n      var nextMonth = new Date(prevMonth);\n\n      if (prevMonth.getUTCFullYear() < 100) {\n        nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n      }\n\n      nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n      nextMonth = nextMonth.valueOf();\n      var html = [];\n      var weekDay, clsName;\n\n      while (prevMonth.valueOf() < nextMonth) {\n        weekDay = prevMonth.getUTCDay();\n\n        if (weekDay === this.o.weekStart) {\n          html.push('<tr>');\n\n          if (this.o.calendarWeeks) {\n            // ISO 8601: First week contains first thursday.\n            // ISO also states week starts on Monday, but we can be more abstract here.\n            var // Start of current week: based on weekstart/current date\n            ws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n                // Thursday of this week\n            th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n                // First Thursday of year, year from thursday\n            yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n                // Calendar week: ms between thursdays, div ms per day, div 7 days\n            calWeek = (th - yth) / 864e5 / 7 + 1;\n            html.push('<td class=\"cw\">' + calWeek + '</td>');\n          }\n        }\n\n        clsName = this.getClassNames(prevMonth);\n        clsName.push('day');\n        var content = prevMonth.getUTCDate();\n\n        if (this.o.beforeShowDay !== $.noop) {\n          before = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n          if (before === undefined) before = {};else if (typeof before === 'boolean') before = {\n            enabled: before\n          };else if (typeof before === 'string') before = {\n            classes: before\n          };\n          if (before.enabled === false) clsName.push('disabled');\n          if (before.classes) clsName = clsName.concat(before.classes.split(/\\s+/));\n          if (before.tooltip) tooltip = before.tooltip;\n          if (before.content) content = before.content;\n        } //Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n        //Fallback to unique function for older jquery versions\n\n\n        if ($.isFunction($.uniqueSort)) {\n          clsName = $.uniqueSort(clsName);\n        } else {\n          clsName = $.unique(clsName);\n        }\n\n        html.push('<td class=\"' + clsName.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + ' data-date=\"' + prevMonth.getTime().toString() + '\">' + content + '</td>');\n        tooltip = null;\n\n        if (weekDay === this.o.weekEnd) {\n          html.push('</tr>');\n        }\n\n        prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n      }\n\n      this.picker.find('.datepicker-days tbody').html(html.join(''));\n      var monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n      var months = this.picker.find('.datepicker-months').find('.datepicker-switch').text(this.o.maxViewMode < 2 ? monthsTitle : year).end().find('tbody span').removeClass('active');\n      $.each(this.dates, function (i, d) {\n        if (d.getUTCFullYear() === year) months.eq(d.getUTCMonth()).addClass('active');\n      });\n\n      if (year < startYear || year > endYear) {\n        months.addClass('disabled');\n      }\n\n      if (year === startYear) {\n        months.slice(0, startMonth).addClass('disabled');\n      }\n\n      if (year === endYear) {\n        months.slice(endMonth + 1).addClass('disabled');\n      }\n\n      if (this.o.beforeShowMonth !== $.noop) {\n        var that = this;\n        $.each(months, function (i, month) {\n          var moDate = new Date(year, i, 1);\n          var before = that.o.beforeShowMonth(moDate);\n          if (before === undefined) before = {};else if (typeof before === 'boolean') before = {\n            enabled: before\n          };else if (typeof before === 'string') before = {\n            classes: before\n          };\n          if (before.enabled === false && !$(month).hasClass('disabled')) $(month).addClass('disabled');\n          if (before.classes) $(month).addClass(before.classes);\n          if (before.tooltip) $(month).prop('title', before.tooltip);\n        });\n      } // Generating decade/years picker\n\n\n      this._fill_yearsView('.datepicker-years', 'year', 10, year, startYear, endYear, this.o.beforeShowYear); // Generating century/decades picker\n\n\n      this._fill_yearsView('.datepicker-decades', 'decade', 100, year, startYear, endYear, this.o.beforeShowDecade); // Generating millennium/centuries picker\n\n\n      this._fill_yearsView('.datepicker-centuries', 'century', 1000, year, startYear, endYear, this.o.beforeShowCentury);\n    },\n    updateNavArrows: function updateNavArrows() {\n      if (!this._allow_update) return;\n      var d = new Date(this.viewDate),\n          year = d.getUTCFullYear(),\n          month = d.getUTCMonth(),\n          startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n          startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n          endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n          endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n          prevIsDisabled,\n          nextIsDisabled,\n          factor = 1;\n\n      switch (this.viewMode) {\n        case 4:\n          factor *= 10;\n\n        /* falls through */\n\n        case 3:\n          factor *= 10;\n\n        /* falls through */\n\n        case 2:\n          factor *= 10;\n\n        /* falls through */\n\n        case 1:\n          prevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n          nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n          break;\n\n        case 0:\n          prevIsDisabled = year <= startYear && month <= startMonth;\n          nextIsDisabled = year >= endYear && month >= endMonth;\n          break;\n      }\n\n      this.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n      this.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n    },\n    click: function click(e) {\n      e.preventDefault();\n      e.stopPropagation();\n      var target, dir, day, year, month;\n      target = $(e.target); // Clicked on the switch\n\n      if (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode) {\n        this.setViewMode(this.viewMode + 1);\n      } // Clicked on today button\n\n\n      if (target.hasClass('today') && !target.hasClass('day')) {\n        this.setViewMode(0);\n\n        this._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n      } // Clicked on clear button\n\n\n      if (target.hasClass('clear')) {\n        this.clearDates();\n      }\n\n      if (!target.hasClass('disabled')) {\n        // Clicked on a month, year, decade, century\n        if (target.hasClass('month') || target.hasClass('year') || target.hasClass('decade') || target.hasClass('century')) {\n          this.viewDate.setUTCDate(1);\n          day = 1;\n\n          if (this.viewMode === 1) {\n            month = target.parent().find('span').index(target);\n            year = this.viewDate.getUTCFullYear();\n            this.viewDate.setUTCMonth(month);\n          } else {\n            month = 0;\n            year = Number(target.text());\n            this.viewDate.setUTCFullYear(year);\n          }\n\n          this._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n          if (this.viewMode === this.o.minViewMode) {\n            this._setDate(UTCDate(year, month, day));\n          } else {\n            this.setViewMode(this.viewMode - 1);\n            this.fill();\n          }\n        }\n      }\n\n      if (this.picker.is(':visible') && this._focused_from) {\n        this._focused_from.focus();\n      }\n\n      delete this._focused_from;\n    },\n    dayCellClick: function dayCellClick(e) {\n      var $target = $(e.currentTarget);\n      var timestamp = $target.data('date');\n      var date = new Date(timestamp);\n\n      if (this.o.updateViewDate) {\n        if (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n          this._trigger('changeYear', this.viewDate);\n        }\n\n        if (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n          this._trigger('changeMonth', this.viewDate);\n        }\n      }\n\n      this._setDate(date);\n    },\n    // Clicked on prev or next\n    navArrowsClick: function navArrowsClick(e) {\n      var $target = $(e.currentTarget);\n      var dir = $target.hasClass('prev') ? -1 : 1;\n\n      if (this.viewMode !== 0) {\n        dir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n      }\n\n      this.viewDate = this.moveMonth(this.viewDate, dir);\n\n      this._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\n      this.fill();\n    },\n    _toggle_multidate: function _toggle_multidate(date) {\n      var ix = this.dates.contains(date);\n\n      if (!date) {\n        this.dates.clear();\n      }\n\n      if (ix !== -1) {\n        if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive) {\n          this.dates.remove(ix);\n        }\n      } else if (this.o.multidate === false) {\n        this.dates.clear();\n        this.dates.push(date);\n      } else {\n        this.dates.push(date);\n      }\n\n      if (typeof this.o.multidate === 'number') while (this.dates.length > this.o.multidate) {\n        this.dates.remove(0);\n      }\n    },\n    _setDate: function _setDate(date, which) {\n      if (!which || which === 'date') this._toggle_multidate(date && new Date(date));\n      if (!which && this.o.updateViewDate || which === 'view') this.viewDate = date && new Date(date);\n      this.fill();\n      this.setValue();\n\n      if (!which || which !== 'view') {\n        this._trigger('changeDate');\n      }\n\n      this.inputField.trigger('change');\n\n      if (this.o.autoclose && (!which || which === 'date')) {\n        this.hide();\n      }\n    },\n    moveDay: function moveDay(date, dir) {\n      var newDate = new Date(date);\n      newDate.setUTCDate(date.getUTCDate() + dir);\n      return newDate;\n    },\n    moveWeek: function moveWeek(date, dir) {\n      return this.moveDay(date, dir * 7);\n    },\n    moveMonth: function moveMonth(date, dir) {\n      if (!isValidDate(date)) return this.o.defaultViewDate;\n      if (!dir) return date;\n      var new_date = new Date(date.valueOf()),\n          day = new_date.getUTCDate(),\n          month = new_date.getUTCMonth(),\n          mag = Math.abs(dir),\n          new_month,\n          test;\n      dir = dir > 0 ? 1 : -1;\n\n      if (mag === 1) {\n        test = dir === -1 // If going back one month, make sure month is not current month\n        // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n        ? function () {\n          return new_date.getUTCMonth() === month;\n        } // If going forward one month, make sure month is as expected\n        // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n        : function () {\n          return new_date.getUTCMonth() !== new_month;\n        };\n        new_month = month + dir;\n        new_date.setUTCMonth(new_month); // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\n        new_month = (new_month + 12) % 12;\n      } else {\n        // For magnitudes >1, move one month at a time...\n        for (var i = 0; i < mag; i++) {\n          // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n          new_date = this.moveMonth(new_date, dir);\n        } // ...then reset the day, keeping it in the new month\n\n\n        new_month = new_date.getUTCMonth();\n        new_date.setUTCDate(day);\n\n        test = function test() {\n          return new_month !== new_date.getUTCMonth();\n        };\n      } // Common date-resetting loop -- if date is beyond end of month, make it\n      // end of month\n\n\n      while (test()) {\n        new_date.setUTCDate(--day);\n        new_date.setUTCMonth(new_month);\n      }\n\n      return new_date;\n    },\n    moveYear: function moveYear(date, dir) {\n      return this.moveMonth(date, dir * 12);\n    },\n    moveAvailableDate: function moveAvailableDate(date, dir, fn) {\n      do {\n        date = this[fn](date, dir);\n        if (!this.dateWithinRange(date)) return false;\n        fn = 'moveDay';\n      } while (this.dateIsDisabled(date));\n\n      return date;\n    },\n    weekOfDateIsDisabled: function weekOfDateIsDisabled(date) {\n      return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n    },\n    dateIsDisabled: function dateIsDisabled(date) {\n      return this.weekOfDateIsDisabled(date) || $.grep(this.o.datesDisabled, function (d) {\n        return isUTCEquals(date, d);\n      }).length > 0;\n    },\n    dateWithinRange: function dateWithinRange(date) {\n      return date >= this.o.startDate && date <= this.o.endDate;\n    },\n    keydown: function keydown(e) {\n      if (!this.picker.is(':visible')) {\n        if (e.keyCode === 40 || e.keyCode === 27) {\n          // allow down to re-show picker\n          this.show();\n          e.stopPropagation();\n        }\n\n        return;\n      }\n\n      var dateChanged = false,\n          dir,\n          newViewDate,\n          focusDate = this.focusDate || this.viewDate;\n\n      switch (e.keyCode) {\n        case 27:\n          // escape\n          if (this.focusDate) {\n            this.focusDate = null;\n            this.viewDate = this.dates.get(-1) || this.viewDate;\n            this.fill();\n          } else this.hide();\n\n          e.preventDefault();\n          e.stopPropagation();\n          break;\n\n        case 37: // left\n\n        case 38: // up\n\n        case 39: // right\n\n        case 40:\n          // down\n          if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7) break;\n          dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n\n          if (this.viewMode === 0) {\n            if (e.ctrlKey) {\n              newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n              if (newViewDate) this._trigger('changeYear', this.viewDate);\n            } else if (e.shiftKey) {\n              newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n              if (newViewDate) this._trigger('changeMonth', this.viewDate);\n            } else if (e.keyCode === 37 || e.keyCode === 39) {\n              newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n            } else if (!this.weekOfDateIsDisabled(focusDate)) {\n              newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n            }\n          } else if (this.viewMode === 1) {\n            if (e.keyCode === 38 || e.keyCode === 40) {\n              dir = dir * 4;\n            }\n\n            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n          } else if (this.viewMode === 2) {\n            if (e.keyCode === 38 || e.keyCode === 40) {\n              dir = dir * 4;\n            }\n\n            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n          }\n\n          if (newViewDate) {\n            this.focusDate = this.viewDate = newViewDate;\n            this.setValue();\n            this.fill();\n            e.preventDefault();\n          }\n\n          break;\n\n        case 13:\n          // enter\n          if (!this.o.forceParse) break;\n          focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\n          if (this.o.keyboardNavigation) {\n            this._toggle_multidate(focusDate);\n\n            dateChanged = true;\n          }\n\n          this.focusDate = null;\n          this.viewDate = this.dates.get(-1) || this.viewDate;\n          this.setValue();\n          this.fill();\n\n          if (this.picker.is(':visible')) {\n            e.preventDefault();\n            e.stopPropagation();\n            if (this.o.autoclose) this.hide();\n          }\n\n          break;\n\n        case 9:\n          // tab\n          this.focusDate = null;\n          this.viewDate = this.dates.get(-1) || this.viewDate;\n          this.fill();\n          this.hide();\n          break;\n      }\n\n      if (dateChanged) {\n        if (this.dates.length) this._trigger('changeDate');else this._trigger('clearDate');\n        this.inputField.trigger('change');\n      }\n    },\n    setViewMode: function setViewMode(viewMode) {\n      this.viewMode = viewMode;\n      this.picker.children('div').hide().filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName).show();\n      this.updateNavArrows();\n\n      this._trigger('changeViewMode', new Date(this.viewDate));\n    }\n  };\n\n  var DateRangePicker = function DateRangePicker(element, options) {\n    $.data(element, 'datepicker', this);\n    this.element = $(element);\n    this.inputs = $.map(options.inputs, function (i) {\n      return i.jquery ? i[0] : i;\n    });\n    delete options.inputs;\n    this.keepEmptyValues = options.keepEmptyValues;\n    delete options.keepEmptyValues;\n    datepickerPlugin.call($(this.inputs), options).on('changeDate', $.proxy(this.dateUpdated, this));\n    this.pickers = $.map(this.inputs, function (i) {\n      return $.data(i, 'datepicker');\n    });\n    this.updateDates();\n  };\n\n  DateRangePicker.prototype = {\n    updateDates: function updateDates() {\n      this.dates = $.map(this.pickers, function (i) {\n        return i.getUTCDate();\n      });\n      this.updateRanges();\n    },\n    updateRanges: function updateRanges() {\n      var range = $.map(this.dates, function (d) {\n        return d.valueOf();\n      });\n      $.each(this.pickers, function (i, p) {\n        p.setRange(range);\n      });\n    },\n    clearDates: function clearDates() {\n      $.each(this.pickers, function (i, p) {\n        p.clearDates();\n      });\n    },\n    dateUpdated: function dateUpdated(e) {\n      // `this.updating` is a workaround for preventing infinite recursion\n      // between `changeDate` triggering and `setUTCDate` calling.  Until\n      // there is a better mechanism.\n      if (this.updating) return;\n      this.updating = true;\n      var dp = $.data(e.target, 'datepicker');\n\n      if (dp === undefined) {\n        return;\n      }\n\n      var new_date = dp.getUTCDate(),\n          keep_empty_values = this.keepEmptyValues,\n          i = $.inArray(e.target, this.inputs),\n          j = i - 1,\n          k = i + 1,\n          l = this.inputs.length;\n      if (i === -1) return;\n      $.each(this.pickers, function (i, p) {\n        if (!p.getUTCDate() && (p === dp || !keep_empty_values)) p.setUTCDate(new_date);\n      });\n\n      if (new_date < this.dates[j]) {\n        // Date being moved earlier/left\n        while (j >= 0 && new_date < this.dates[j]) {\n          this.pickers[j--].setUTCDate(new_date);\n        }\n      } else if (new_date > this.dates[k]) {\n        // Date being moved later/right\n        while (k < l && new_date > this.dates[k]) {\n          this.pickers[k++].setUTCDate(new_date);\n        }\n      }\n\n      this.updateDates();\n      delete this.updating;\n    },\n    destroy: function destroy() {\n      $.map(this.pickers, function (p) {\n        p.destroy();\n      });\n      $(this.inputs).off('changeDate', this.dateUpdated);\n      delete this.element.data().datepicker;\n    },\n    remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n  };\n\n  function opts_from_el(el, prefix) {\n    // Derive options from element data-attrs\n    var data = $(el).data(),\n        out = {},\n        inkey,\n        replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n    prefix = new RegExp('^' + prefix.toLowerCase());\n\n    function re_lower(_, a) {\n      return a.toLowerCase();\n    }\n\n    for (var key in data) {\n      if (prefix.test(key)) {\n        inkey = key.replace(replace, re_lower);\n        out[inkey] = data[key];\n      }\n    }\n\n    return out;\n  }\n\n  function opts_from_locale(lang) {\n    // Derive options from locale plugins\n    var out = {}; // Check if \"de-DE\" style date is available, if not language should\n    // fallback to 2 letter code eg \"de\"\n\n    if (!dates[lang]) {\n      lang = lang.split('-')[0];\n      if (!dates[lang]) return;\n    }\n\n    var d = dates[lang];\n    $.each(locale_opts, function (i, k) {\n      if (k in d) out[k] = d[k];\n    });\n    return out;\n  }\n\n  var old = $.fn.datepicker;\n\n  var datepickerPlugin = function datepickerPlugin(option) {\n    var args = Array.apply(null, arguments);\n    args.shift();\n    var internal_return;\n    this.each(function () {\n      var $this = $(this),\n          data = $this.data('datepicker'),\n          options = _typeof(option) === 'object' && option;\n\n      if (!data) {\n        var elopts = opts_from_el(this, 'date'),\n            // Preliminary otions\n        xopts = $.extend({}, defaults, elopts, options),\n            locopts = opts_from_locale(xopts.language),\n            // Options priority: js args, data-attrs, locales, defaults\n        opts = $.extend({}, defaults, locopts, elopts, options);\n\n        if ($this.hasClass('input-daterange') || opts.inputs) {\n          $.extend(opts, {\n            inputs: opts.inputs || $this.find('input').toArray()\n          });\n          data = new DateRangePicker(this, opts);\n        } else {\n          data = new Datepicker(this, opts);\n        }\n\n        $this.data('datepicker', data);\n      }\n\n      if (typeof option === 'string' && typeof data[option] === 'function') {\n        internal_return = data[option].apply(data, args);\n      }\n    });\n    if (internal_return === undefined || internal_return instanceof Datepicker || internal_return instanceof DateRangePicker) return this;\n    if (this.length > 1) throw new Error('Using only allowed for the collection of a single element (' + option + ' function)');else return internal_return;\n  };\n\n  $.fn.datepicker = datepickerPlugin;\n  var defaults = $.fn.datepicker.defaults = {\n    assumeNearbyYear: false,\n    autoclose: false,\n    beforeShowDay: $.noop,\n    beforeShowMonth: $.noop,\n    beforeShowYear: $.noop,\n    beforeShowDecade: $.noop,\n    beforeShowCentury: $.noop,\n    calendarWeeks: false,\n    clearBtn: false,\n    toggleActive: false,\n    daysOfWeekDisabled: [],\n    daysOfWeekHighlighted: [],\n    datesDisabled: [],\n    endDate: Infinity,\n    forceParse: true,\n    format: 'mm/dd/yyyy',\n    keepEmptyValues: false,\n    keyboardNavigation: true,\n    language: 'en',\n    minViewMode: 0,\n    maxViewMode: 4,\n    multidate: false,\n    multidateSeparator: ',',\n    orientation: \"auto\",\n    rtl: false,\n    startDate: -Infinity,\n    startView: 0,\n    todayBtn: false,\n    todayHighlight: false,\n    updateViewDate: true,\n    weekStart: 0,\n    disableTouchKeyboard: false,\n    enableOnReadonly: true,\n    showOnFocus: true,\n    zIndexOffset: 10,\n    container: 'body',\n    immediateUpdates: false,\n    title: '',\n    templates: {\n      leftArrow: '&#x00AB;',\n      rightArrow: '&#x00BB;'\n    },\n    showWeekDays: true\n  };\n  var locale_opts = $.fn.datepicker.locale_opts = ['format', 'rtl', 'weekStart'];\n  $.fn.datepicker.Constructor = Datepicker;\n  var dates = $.fn.datepicker.dates = {\n    en: {\n      days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n      daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n      daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n      months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n      monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n      today: \"Today\",\n      clear: \"Clear\",\n      titleFormat: \"MM yyyy\"\n    }\n  };\n  var DPGlobal = {\n    viewModes: [{\n      names: ['days', 'month'],\n      clsName: 'days',\n      e: 'changeMonth'\n    }, {\n      names: ['months', 'year'],\n      clsName: 'months',\n      e: 'changeYear',\n      navStep: 1\n    }, {\n      names: ['years', 'decade'],\n      clsName: 'years',\n      e: 'changeDecade',\n      navStep: 10\n    }, {\n      names: ['decades', 'century'],\n      clsName: 'decades',\n      e: 'changeCentury',\n      navStep: 100\n    }, {\n      names: ['centuries', 'millennium'],\n      clsName: 'centuries',\n      e: 'changeMillennium',\n      navStep: 1000\n    }],\n    validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n    nonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n    parseFormat: function parseFormat(format) {\n      if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function') return format; // IE treats \\0 as a string end in inputs (truncating the value),\n      // so it's a bad format delimiter, anyway\n\n      var separators = format.replace(this.validParts, '\\0').split('\\0'),\n          parts = format.match(this.validParts);\n\n      if (!separators || !separators.length || !parts || parts.length === 0) {\n        throw new Error(\"Invalid date format.\");\n      }\n\n      return {\n        separators: separators,\n        parts: parts\n      };\n    },\n    parseDate: function parseDate(date, format, language, assumeNearby) {\n      if (!date) return undefined;\n      if (date instanceof Date) return date;\n      if (typeof format === 'string') format = DPGlobal.parseFormat(format);\n      if (format.toValue) return format.toValue(date, format, language);\n      var fn_map = {\n        d: 'moveDay',\n        m: 'moveMonth',\n        w: 'moveWeek',\n        y: 'moveYear'\n      },\n          dateAliases = {\n        yesterday: '-1d',\n        today: '+0d',\n        tomorrow: '+1d'\n      },\n          parts,\n          part,\n          dir,\n          i,\n          fn;\n\n      if (date in dateAliases) {\n        date = dateAliases[date];\n      }\n\n      if (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)) {\n        parts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n        date = new Date();\n\n        for (i = 0; i < parts.length; i++) {\n          part = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n          dir = Number(part[1]);\n          fn = fn_map[part[2].toLowerCase()];\n          date = Datepicker.prototype[fn](date, dir);\n        }\n\n        return Datepicker.prototype._zero_utc_time(date);\n      }\n\n      parts = date && date.match(this.nonpunctuation) || [];\n\n      function applyNearbyYear(year, threshold) {\n        if (threshold === true) threshold = 10; // if year is 2 digits or less, than the user most likely is trying to get a recent century\n\n        if (year < 100) {\n          year += 2000; // if the new year is more than threshold years in advance, use last century\n\n          if (year > new Date().getFullYear() + threshold) {\n            year -= 100;\n          }\n        }\n\n        return year;\n      }\n\n      var parsed = {},\n          setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n          setters_map = {\n        yyyy: function yyyy(d, v) {\n          return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n        },\n        m: function m(d, v) {\n          if (isNaN(d)) return d;\n          v -= 1;\n\n          while (v < 0) {\n            v += 12;\n          }\n\n          v %= 12;\n          d.setUTCMonth(v);\n\n          while (d.getUTCMonth() !== v) {\n            d.setUTCDate(d.getUTCDate() - 1);\n          }\n\n          return d;\n        },\n        d: function d(_d, v) {\n          return _d.setUTCDate(v);\n        }\n      },\n          val,\n          filtered;\n      setters_map['yy'] = setters_map['yyyy'];\n      setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n      setters_map['dd'] = setters_map['d'];\n      date = UTCToday();\n      var fparts = format.parts.slice(); // Remove noop parts\n\n      if (parts.length !== fparts.length) {\n        fparts = $(fparts).filter(function (i, p) {\n          return $.inArray(p, setters_order) !== -1;\n        }).toArray();\n      } // Process remainder\n\n\n      function match_part() {\n        var m = this.slice(0, parts[i].length),\n            p = parts[i].slice(0, m.length);\n        return m.toLowerCase() === p.toLowerCase();\n      }\n\n      if (parts.length === fparts.length) {\n        var cnt;\n\n        for (i = 0, cnt = fparts.length; i < cnt; i++) {\n          val = parseInt(parts[i], 10);\n          part = fparts[i];\n\n          if (isNaN(val)) {\n            switch (part) {\n              case 'MM':\n                filtered = $(dates[language].months).filter(match_part);\n                val = $.inArray(filtered[0], dates[language].months) + 1;\n                break;\n\n              case 'M':\n                filtered = $(dates[language].monthsShort).filter(match_part);\n                val = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n                break;\n            }\n          }\n\n          parsed[part] = val;\n        }\n\n        var _date, s;\n\n        for (i = 0; i < setters_order.length; i++) {\n          s = setters_order[i];\n\n          if (s in parsed && !isNaN(parsed[s])) {\n            _date = new Date(date);\n            setters_map[s](_date, parsed[s]);\n            if (!isNaN(_date)) date = _date;\n          }\n        }\n      }\n\n      return date;\n    },\n    formatDate: function formatDate(date, format, language) {\n      if (!date) return '';\n      if (typeof format === 'string') format = DPGlobal.parseFormat(format);\n      if (format.toDisplay) return format.toDisplay(date, format, language);\n      var val = {\n        d: date.getUTCDate(),\n        D: dates[language].daysShort[date.getUTCDay()],\n        DD: dates[language].days[date.getUTCDay()],\n        m: date.getUTCMonth() + 1,\n        M: dates[language].monthsShort[date.getUTCMonth()],\n        MM: dates[language].months[date.getUTCMonth()],\n        yy: date.getUTCFullYear().toString().substring(2),\n        yyyy: date.getUTCFullYear()\n      };\n      val.dd = (val.d < 10 ? '0' : '') + val.d;\n      val.mm = (val.m < 10 ? '0' : '') + val.m;\n      date = [];\n      var seps = $.extend([], format.separators);\n\n      for (var i = 0, cnt = format.parts.length; i <= cnt; i++) {\n        if (seps.length) date.push(seps.shift());\n        date.push(val[format.parts[i]]);\n      }\n\n      return date.join('');\n    },\n    headTemplate: '<thead>' + '<tr>' + '<th colspan=\"7\" class=\"datepicker-title\"></th>' + '</tr>' + '<tr>' + '<th class=\"prev\">' + defaults.templates.leftArrow + '</th>' + '<th colspan=\"5\" class=\"datepicker-switch\"></th>' + '<th class=\"next\">' + defaults.templates.rightArrow + '</th>' + '</tr>' + '</thead>',\n    contTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n    footTemplate: '<tfoot>' + '<tr>' + '<th colspan=\"7\" class=\"today\"></th>' + '</tr>' + '<tr>' + '<th colspan=\"7\" class=\"clear\"></th>' + '</tr>' + '</tfoot>'\n  };\n  DPGlobal.template = '<div class=\"datepicker\">' + '<div class=\"datepicker-days\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + '<tbody></tbody>' + DPGlobal.footTemplate + '</table>' + '</div>' + '<div class=\"datepicker-months\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table>' + '</div>' + '<div class=\"datepicker-years\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table>' + '</div>' + '<div class=\"datepicker-decades\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table>' + '</div>' + '<div class=\"datepicker-centuries\">' + '<table class=\"table-condensed\">' + DPGlobal.headTemplate + DPGlobal.contTemplate + DPGlobal.footTemplate + '</table>' + '</div>' + '</div>';\n  $.fn.datepicker.DPGlobal = DPGlobal;\n  /* DATEPICKER NO CONFLICT\n  * =================== */\n\n  $.fn.datepicker.noConflict = function () {\n    $.fn.datepicker = old;\n    return this;\n  };\n  /* DATEPICKER VERSION\n   * =================== */\n\n\n  $.fn.datepicker.version = '1.9.0';\n\n  $.fn.datepicker.deprecated = function (msg) {\n    var console = window.console;\n\n    if (console && console.warn) {\n      console.warn('DEPRECATED: ' + msg);\n    }\n  };\n  /* DATEPICKER DATA-API\n  * ================== */\n\n\n  $(document).on('focus.datepicker.data-api click.datepicker.data-api', '[data-provide=\"datepicker\"]', function (e) {\n    var $this = $(this);\n    if ($this.data('datepicker')) return;\n    e.preventDefault(); // component click requires us to explicitly show it\n\n    datepickerPlugin.call($this, 'show');\n  });\n  $(function () {\n    datepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n  });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\n * jQuery File Upload Plugin\n * https://github.com/blueimp/jQuery-File-Upload\n *\n * Copyright 2010, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n */\n\n/* jshint nomen:false */\n\n/* global define, require, window, document, location, Blob, FormData */\n;\n\n(function (factory) {\n  'use strict';\n\n  if (typeof define === 'function' && define.amd) {\n    // Register as an anonymous AMD module:\n    define(['jquery', 'jquery-ui/ui/widget'], factory);\n  } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') {\n    // Node/CommonJS:\n    factory(require('jquery'), require('./vendor/jquery.ui.widget'));\n  } else {\n    // Browser globals:\n    factory(window.jQuery);\n  }\n})(function ($) {\n  'use strict'; // Detect file input support, based on\n  // http://viljamis.com/blog/2012/file-upload-support-on-mobile/\n\n  $.support.fileInput = !(new RegExp( // Handle devices which give false positives for the feature detection:\n  '(Android (1\\\\.[0156]|2\\\\.[01]))' + '|(Windows Phone (OS 7|8\\\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' + '|(w(eb)?OSBrowser)|(webOS)' + '|(Kindle/(1\\\\.0|2\\\\.[05]|3\\\\.0))').test(window.navigator.userAgent) || // Feature detection for all other devices:\n  $('<input type=\"file\"/>').prop('disabled')); // The FileReader API is not actually used, but works as feature detection,\n  // as some Safari versions (5?) support XHR file uploads via the FormData API,\n  // but not non-multipart XHR file uploads.\n  // window.XMLHttpRequestUpload is not available on IE10, so we check for\n  // window.ProgressEvent instead to detect XHR2 file upload capability:\n\n  $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);\n  $.support.xhrFormDataFileUpload = !!window.FormData; // Detect support for Blob slicing (required for chunked uploads):\n\n  $.support.blobSlice = window.Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice); // Helper function to create drag handlers for dragover/dragenter/dragleave:\n\n  function getDragHandler(type) {\n    var isDragOver = type === 'dragover';\n    return function (e) {\n      e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n      var dataTransfer = e.dataTransfer;\n\n      if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 && this._trigger(type, $.Event(type, {\n        delegatedEvent: e\n      })) !== false) {\n        e.preventDefault();\n\n        if (isDragOver) {\n          dataTransfer.dropEffect = 'copy';\n        }\n      }\n    };\n  } // The fileupload widget listens for change events on file input fields defined\n  // via fileInput setting and paste or drop events of the given dropZone.\n  // In addition to the default jQuery Widget methods, the fileupload widget\n  // exposes the \"add\" and \"send\" methods, to add or directly send files using\n  // the fileupload API.\n  // By default, files added via file input selection, paste, drag & drop or\n  // \"add\" method are uploaded immediately, but it is possible to override\n  // the \"add\" callback option to queue file uploads.\n\n\n  $.widget('blueimp.fileupload', {\n    options: {\n      // The drop target element(s), by the default the complete document.\n      // Set to null to disable drag & drop support:\n      dropZone: $(document),\n      // The paste target element(s), by the default undefined.\n      // Set to a DOM node or jQuery object to enable file pasting:\n      pasteZone: undefined,\n      // The file input field(s), that are listened to for change events.\n      // If undefined, it is set to the file input fields inside\n      // of the widget element on plugin initialization.\n      // Set to null to disable the change listener.\n      fileInput: undefined,\n      // By default, the file input field is replaced with a clone after\n      // each input field change event. This is required for iframe transport\n      // queues and allows change events to be fired for the same file\n      // selection, but can be disabled by setting the following option to false:\n      replaceFileInput: true,\n      // The parameter name for the file form data (the request argument name).\n      // If undefined or empty, the name property of the file input field is\n      // used, or \"files[]\" if the file input name property is also empty,\n      // can be a string or an array of strings:\n      paramName: undefined,\n      // By default, each file of a selection is uploaded using an individual\n      // request for XHR type uploads. Set to false to upload file\n      // selections in one request each:\n      singleFileUploads: true,\n      // To limit the number of files uploaded with one XHR request,\n      // set the following option to an integer greater than 0:\n      limitMultiFileUploads: undefined,\n      // The following option limits the number of files uploaded with one\n      // XHR request to keep the request size under or equal to the defined\n      // limit in bytes:\n      limitMultiFileUploadSize: undefined,\n      // Multipart file uploads add a number of bytes to each uploaded file,\n      // therefore the following option adds an overhead for each file used\n      // in the limitMultiFileUploadSize configuration:\n      limitMultiFileUploadSizeOverhead: 512,\n      // Set the following option to true to issue all file upload requests\n      // in a sequential order:\n      sequentialUploads: false,\n      // To limit the number of concurrent uploads,\n      // set the following option to an integer greater than 0:\n      limitConcurrentUploads: undefined,\n      // Set the following option to true to force iframe transport uploads:\n      forceIframeTransport: false,\n      // Set the following option to the location of a redirect url on the\n      // origin server, for cross-domain iframe transport uploads:\n      redirect: undefined,\n      // The parameter name for the redirect url, sent as part of the form\n      // data and set to 'redirect' if this option is empty:\n      redirectParamName: undefined,\n      // Set the following option to the location of a postMessage window,\n      // to enable postMessage transport uploads:\n      postMessage: undefined,\n      // By default, XHR file uploads are sent as multipart/form-data.\n      // The iframe transport is always using multipart/form-data.\n      // Set to false to enable non-multipart XHR uploads:\n      multipart: true,\n      // To upload large files in smaller chunks, set the following option\n      // to a preferred maximum chunk size. If set to 0, null or undefined,\n      // or the browser does not support the required Blob API, files will\n      // be uploaded as a whole.\n      maxChunkSize: undefined,\n      // When a non-multipart upload or a chunked multipart upload has been\n      // aborted, this option can be used to resume the upload by setting\n      // it to the size of the already uploaded bytes. This option is most\n      // useful when modifying the options object inside of the \"add\" or\n      // \"send\" callbacks, as the options are cloned for each file upload.\n      uploadedBytes: undefined,\n      // By default, failed (abort or error) file uploads are removed from the\n      // global progress calculation. Set the following option to false to\n      // prevent recalculating the global progress data:\n      recalculateProgress: true,\n      // Interval in milliseconds to calculate and trigger progress events:\n      progressInterval: 100,\n      // Interval in milliseconds to calculate progress bitrate:\n      bitrateInterval: 500,\n      // By default, uploads are started automatically when adding files:\n      autoUpload: true,\n      // By default, duplicate file names are expected to be handled on\n      // the server-side. If this is not possible (e.g. when uploading\n      // files directly to Amazon S3), the following option can be set to\n      // an empty object or an object mapping existing filenames, e.g.:\n      // { \"image.jpg\": true, \"image (1).jpg\": true }\n      // If it is set, all files will be uploaded with unique filenames,\n      // adding increasing number suffixes if necessary, e.g.:\n      // \"image (2).jpg\"\n      uniqueFilenames: undefined,\n      // Error and info messages:\n      messages: {\n        uploadedBytes: 'Uploaded bytes exceed file size'\n      },\n      // Translation function, gets the message key to be translated\n      // and an object with context specific data as arguments:\n      i18n: function i18n(message, context) {\n        message = this.messages[message] || message.toString();\n\n        if (context) {\n          $.each(context, function (key, value) {\n            message = message.replace('{' + key + '}', value);\n          });\n        }\n\n        return message;\n      },\n      // Additional form data to be sent along with the file uploads can be set\n      // using this option, which accepts an array of objects with name and\n      // value properties, a function returning such an array, a FormData\n      // object (for XHR file uploads), or a simple object.\n      // The form of the first fileInput is given as parameter to the function:\n      formData: function formData(form) {\n        return form.serializeArray();\n      },\n      // The add callback is invoked as soon as files are added to the fileupload\n      // widget (via file input selection, drag & drop, paste or add API call).\n      // If the singleFileUploads option is enabled, this callback will be\n      // called once for each file in the selection for XHR file uploads, else\n      // once for each file selection.\n      //\n      // The upload starts when the submit method is invoked on the data parameter.\n      // The data object contains a files property holding the added files\n      // and allows you to override plugin options as well as define ajax settings.\n      //\n      // Listeners for this callback can also be bound the following way:\n      // .bind('fileuploadadd', func);\n      //\n      // data.submit() returns a Promise object and allows to attach additional\n      // handlers using jQuery's Deferred callbacks:\n      // data.submit().done(func).fail(func).always(func);\n      add: function add(e, data) {\n        if (e.isDefaultPrevented()) {\n          return false;\n        }\n\n        if (data.autoUpload || data.autoUpload !== false && $(this).fileupload('option', 'autoUpload')) {\n          data.process().done(function () {\n            data.submit();\n          });\n        }\n      },\n      // Other callbacks:\n      // Callback for the submit event of each file upload:\n      // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);\n      // Callback for the start of each file upload request:\n      // send: function (e, data) {}, // .bind('fileuploadsend', func);\n      // Callback for successful uploads:\n      // done: function (e, data) {}, // .bind('fileuploaddone', func);\n      // Callback for failed (abort or error) uploads:\n      // fail: function (e, data) {}, // .bind('fileuploadfail', func);\n      // Callback for completed (success, abort or error) requests:\n      // always: function (e, data) {}, // .bind('fileuploadalways', func);\n      // Callback for upload progress events:\n      // progress: function (e, data) {}, // .bind('fileuploadprogress', func);\n      // Callback for global upload progress events:\n      // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);\n      // Callback for uploads start, equivalent to the global ajaxStart event:\n      // start: function (e) {}, // .bind('fileuploadstart', func);\n      // Callback for uploads stop, equivalent to the global ajaxStop event:\n      // stop: function (e) {}, // .bind('fileuploadstop', func);\n      // Callback for change events of the fileInput(s):\n      // change: function (e, data) {}, // .bind('fileuploadchange', func);\n      // Callback for paste events to the pasteZone(s):\n      // paste: function (e, data) {}, // .bind('fileuploadpaste', func);\n      // Callback for drop events of the dropZone(s):\n      // drop: function (e, data) {}, // .bind('fileuploaddrop', func);\n      // Callback for dragover events of the dropZone(s):\n      // dragover: function (e) {}, // .bind('fileuploaddragover', func);\n      // Callback before the start of each chunk upload request (before form data initialization):\n      // chunkbeforesend: function (e, data) {}, // .bind('fileuploadchunkbeforesend', func);\n      // Callback for the start of each chunk upload request:\n      // chunksend: function (e, data) {}, // .bind('fileuploadchunksend', func);\n      // Callback for successful chunk uploads:\n      // chunkdone: function (e, data) {}, // .bind('fileuploadchunkdone', func);\n      // Callback for failed (abort or error) chunk uploads:\n      // chunkfail: function (e, data) {}, // .bind('fileuploadchunkfail', func);\n      // Callback for completed (success, abort or error) chunk upload requests:\n      // chunkalways: function (e, data) {}, // .bind('fileuploadchunkalways', func);\n      // The plugin options are used as settings object for the ajax calls.\n      // The following are jQuery ajax settings required for the file uploads:\n      processData: false,\n      contentType: false,\n      cache: false,\n      timeout: 0\n    },\n    // A list of options that require reinitializing event listeners and/or\n    // special initialization code:\n    _specialOptions: ['fileInput', 'dropZone', 'pasteZone', 'multipart', 'forceIframeTransport'],\n    _blobSlice: $.support.blobSlice && function () {\n      var slice = this.slice || this.webkitSlice || this.mozSlice;\n      return slice.apply(this, arguments);\n    },\n    _BitrateTimer: function _BitrateTimer() {\n      this.timestamp = Date.now ? Date.now() : new Date().getTime();\n      this.loaded = 0;\n      this.bitrate = 0;\n\n      this.getBitrate = function (now, loaded, interval) {\n        var timeDiff = now - this.timestamp;\n\n        if (!this.bitrate || !interval || timeDiff > interval) {\n          this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;\n          this.loaded = loaded;\n          this.timestamp = now;\n        }\n\n        return this.bitrate;\n      };\n    },\n    _isXHRUpload: function _isXHRUpload(options) {\n      return !options.forceIframeTransport && (!options.multipart && $.support.xhrFileUpload || $.support.xhrFormDataFileUpload);\n    },\n    _getFormData: function _getFormData(options) {\n      var formData;\n\n      if ($.type(options.formData) === 'function') {\n        return options.formData(options.form);\n      }\n\n      if ($.isArray(options.formData)) {\n        return options.formData;\n      }\n\n      if ($.type(options.formData) === 'object') {\n        formData = [];\n        $.each(options.formData, function (name, value) {\n          formData.push({\n            name: name,\n            value: value\n          });\n        });\n        return formData;\n      }\n\n      return [];\n    },\n    _getTotal: function _getTotal(files) {\n      var total = 0;\n      $.each(files, function (index, file) {\n        total += file.size || 1;\n      });\n      return total;\n    },\n    _initProgressObject: function _initProgressObject(obj) {\n      var progress = {\n        loaded: 0,\n        total: 0,\n        bitrate: 0\n      };\n\n      if (obj._progress) {\n        $.extend(obj._progress, progress);\n      } else {\n        obj._progress = progress;\n      }\n    },\n    _initResponseObject: function _initResponseObject(obj) {\n      var prop;\n\n      if (obj._response) {\n        for (prop in obj._response) {\n          if (obj._response.hasOwnProperty(prop)) {\n            delete obj._response[prop];\n          }\n        }\n      } else {\n        obj._response = {};\n      }\n    },\n    _onProgress: function _onProgress(e, data) {\n      if (e.lengthComputable) {\n        var now = Date.now ? Date.now() : new Date().getTime(),\n            loaded;\n\n        if (data._time && data.progressInterval && now - data._time < data.progressInterval && e.loaded !== e.total) {\n          return;\n        }\n\n        data._time = now;\n        loaded = Math.floor(e.loaded / e.total * (data.chunkSize || data._progress.total)) + (data.uploadedBytes || 0); // Add the difference from the previously loaded state\n        // to the global loaded counter:\n\n        this._progress.loaded += loaded - data._progress.loaded;\n        this._progress.bitrate = this._bitrateTimer.getBitrate(now, this._progress.loaded, data.bitrateInterval);\n        data._progress.loaded = data.loaded = loaded;\n        data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(now, loaded, data.bitrateInterval); // Trigger a custom progress event with a total data property set\n        // to the file size(s) of the current upload and a loaded data\n        // property calculated accordingly:\n\n        this._trigger('progress', $.Event('progress', {\n          delegatedEvent: e\n        }), data); // Trigger a global progress event for all current file uploads,\n        // including ajax calls queued for sequential file uploads:\n\n\n        this._trigger('progressall', $.Event('progressall', {\n          delegatedEvent: e\n        }), this._progress);\n      }\n    },\n    _initProgressListener: function _initProgressListener(options) {\n      var that = this,\n          xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); // Accesss to the native XHR object is required to add event listeners\n      // for the upload progress event:\n\n      if (xhr.upload) {\n        $(xhr.upload).bind('progress', function (e) {\n          var oe = e.originalEvent; // Make sure the progress event properties get copied over:\n\n          e.lengthComputable = oe.lengthComputable;\n          e.loaded = oe.loaded;\n          e.total = oe.total;\n\n          that._onProgress(e, options);\n        });\n\n        options.xhr = function () {\n          return xhr;\n        };\n      }\n    },\n    _deinitProgressListener: function _deinitProgressListener(options) {\n      var xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();\n\n      if (xhr.upload) {\n        $(xhr.upload).unbind('progress');\n      }\n    },\n    _isInstanceOf: function _isInstanceOf(type, obj) {\n      // Cross-frame instanceof check\n      return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n    },\n    _getUniqueFilename: function _getUniqueFilename(name, map) {\n      name = String(name);\n\n      if (map[name]) {\n        name = name.replace(/(?: \\(([\\d]+)\\))?(\\.[^.]+)?$/, function (_, p1, p2) {\n          var index = p1 ? Number(p1) + 1 : 1;\n          var ext = p2 || '';\n          return ' (' + index + ')' + ext;\n        });\n        return this._getUniqueFilename(name, map);\n      }\n\n      map[name] = true;\n      return name;\n    },\n    _initXHRData: function _initXHRData(options) {\n      var that = this,\n          formData,\n          file = options.files[0],\n          // Ignore non-multipart setting if not supported:\n      multipart = options.multipart || !$.support.xhrFileUpload,\n          paramName = $.type(options.paramName) === 'array' ? options.paramName[0] : options.paramName;\n      options.headers = $.extend({}, options.headers);\n\n      if (options.contentRange) {\n        options.headers['Content-Range'] = options.contentRange;\n      }\n\n      if (!multipart || options.blob || !this._isInstanceOf('File', file)) {\n        options.headers['Content-Disposition'] = 'attachment; filename=\"' + encodeURI(file.uploadName || file.name) + '\"';\n      }\n\n      if (!multipart) {\n        options.contentType = file.type || 'application/octet-stream';\n        options.data = options.blob || file;\n      } else if ($.support.xhrFormDataFileUpload) {\n        if (options.postMessage) {\n          // window.postMessage does not allow sending FormData\n          // objects, so we just add the File/Blob objects to\n          // the formData array and let the postMessage window\n          // create the FormData object out of this array:\n          formData = this._getFormData(options);\n\n          if (options.blob) {\n            formData.push({\n              name: paramName,\n              value: options.blob\n            });\n          } else {\n            $.each(options.files, function (index, file) {\n              formData.push({\n                name: $.type(options.paramName) === 'array' && options.paramName[index] || paramName,\n                value: file\n              });\n            });\n          }\n        } else {\n          if (that._isInstanceOf('FormData', options.formData)) {\n            formData = options.formData;\n          } else {\n            formData = new FormData();\n            $.each(this._getFormData(options), function (index, field) {\n              formData.append(field.name, field.value);\n            });\n          }\n\n          if (options.blob) {\n            formData.append(paramName, options.blob, file.uploadName || file.name);\n          } else {\n            $.each(options.files, function (index, file) {\n              // This check allows the tests to run with\n              // dummy objects:\n              if (that._isInstanceOf('File', file) || that._isInstanceOf('Blob', file)) {\n                var fileName = file.uploadName || file.name;\n\n                if (options.uniqueFilenames) {\n                  fileName = that._getUniqueFilename(fileName, options.uniqueFilenames);\n                }\n\n                formData.append($.type(options.paramName) === 'array' && options.paramName[index] || paramName, file, fileName);\n              }\n            });\n          }\n        }\n\n        options.data = formData;\n      } // Blob reference is not needed anymore, free memory:\n\n\n      options.blob = null;\n    },\n    _initIframeSettings: function _initIframeSettings(options) {\n      var targetHost = $('<a></a>').prop('href', options.url).prop('host'); // Setting the dataType to iframe enables the iframe transport:\n\n      options.dataType = 'iframe ' + (options.dataType || ''); // The iframe transport accepts a serialized array as form data:\n\n      options.formData = this._getFormData(options); // Add redirect url to form data on cross-domain uploads:\n\n      if (options.redirect && targetHost && targetHost !== location.host) {\n        options.formData.push({\n          name: options.redirectParamName || 'redirect',\n          value: options.redirect\n        });\n      }\n    },\n    _initDataSettings: function _initDataSettings(options) {\n      if (this._isXHRUpload(options)) {\n        if (!this._chunkedUpload(options, true)) {\n          if (!options.data) {\n            this._initXHRData(options);\n          }\n\n          this._initProgressListener(options);\n        }\n\n        if (options.postMessage) {\n          // Setting the dataType to postmessage enables the\n          // postMessage transport:\n          options.dataType = 'postmessage ' + (options.dataType || '');\n        }\n      } else {\n        this._initIframeSettings(options);\n      }\n    },\n    _getParamName: function _getParamName(options) {\n      var fileInput = $(options.fileInput),\n          paramName = options.paramName;\n\n      if (!paramName) {\n        paramName = [];\n        fileInput.each(function () {\n          var input = $(this),\n              name = input.prop('name') || 'files[]',\n              i = (input.prop('files') || [1]).length;\n\n          while (i) {\n            paramName.push(name);\n            i -= 1;\n          }\n        });\n\n        if (!paramName.length) {\n          paramName = [fileInput.prop('name') || 'files[]'];\n        }\n      } else if (!$.isArray(paramName)) {\n        paramName = [paramName];\n      }\n\n      return paramName;\n    },\n    _initFormSettings: function _initFormSettings(options) {\n      // Retrieve missing options from the input field and the\n      // associated form, if available:\n      if (!options.form || !options.form.length) {\n        options.form = $(options.fileInput.prop('form')); // If the given file input doesn't have an associated form,\n        // use the default widget file input's form:\n\n        if (!options.form.length) {\n          options.form = $(this.options.fileInput.prop('form'));\n        }\n      }\n\n      options.paramName = this._getParamName(options);\n\n      if (!options.url) {\n        options.url = options.form.prop('action') || location.href;\n      } // The HTTP request method must be \"POST\" or \"PUT\":\n\n\n      options.type = (options.type || $.type(options.form.prop('method')) === 'string' && options.form.prop('method') || '').toUpperCase();\n\n      if (options.type !== 'POST' && options.type !== 'PUT' && options.type !== 'PATCH') {\n        options.type = 'POST';\n      }\n\n      if (!options.formAcceptCharset) {\n        options.formAcceptCharset = options.form.attr('accept-charset');\n      }\n    },\n    _getAJAXSettings: function _getAJAXSettings(data) {\n      var options = $.extend({}, this.options, data);\n\n      this._initFormSettings(options);\n\n      this._initDataSettings(options);\n\n      return options;\n    },\n    // jQuery 1.6 doesn't provide .state(),\n    // while jQuery 1.8+ removed .isRejected() and .isResolved():\n    _getDeferredState: function _getDeferredState(deferred) {\n      if (deferred.state) {\n        return deferred.state();\n      }\n\n      if (deferred.isResolved()) {\n        return 'resolved';\n      }\n\n      if (deferred.isRejected()) {\n        return 'rejected';\n      }\n\n      return 'pending';\n    },\n    // Maps jqXHR callbacks to the equivalent\n    // methods of the given Promise object:\n    _enhancePromise: function _enhancePromise(promise) {\n      promise.success = promise.done;\n      promise.error = promise.fail;\n      promise.complete = promise.always;\n      return promise;\n    },\n    // Creates and returns a Promise object enhanced with\n    // the jqXHR methods abort, success, error and complete:\n    _getXHRPromise: function _getXHRPromise(resolveOrReject, context, args) {\n      var dfd = $.Deferred(),\n          promise = dfd.promise();\n      context = context || this.options.context || promise;\n\n      if (resolveOrReject === true) {\n        dfd.resolveWith(context, args);\n      } else if (resolveOrReject === false) {\n        dfd.rejectWith(context, args);\n      }\n\n      promise.abort = dfd.promise;\n      return this._enhancePromise(promise);\n    },\n    // Adds convenience methods to the data callback argument:\n    _addConvenienceMethods: function _addConvenienceMethods(e, data) {\n      var that = this,\n          getPromise = function getPromise(args) {\n        return $.Deferred().resolveWith(that, args).promise();\n      };\n\n      data.process = function (resolveFunc, rejectFunc) {\n        if (resolveFunc || rejectFunc) {\n          data._processQueue = this._processQueue = (this._processQueue || getPromise([this])).then(function () {\n            if (data.errorThrown) {\n              return $.Deferred().rejectWith(that, [data]).promise();\n            }\n\n            return getPromise(arguments);\n          }).then(resolveFunc, rejectFunc);\n        }\n\n        return this._processQueue || getPromise([this]);\n      };\n\n      data.submit = function () {\n        if (this.state() !== 'pending') {\n          data.jqXHR = this.jqXHR = that._trigger('submit', $.Event('submit', {\n            delegatedEvent: e\n          }), this) !== false && that._onSend(e, this);\n        }\n\n        return this.jqXHR || that._getXHRPromise();\n      };\n\n      data.abort = function () {\n        if (this.jqXHR) {\n          return this.jqXHR.abort();\n        }\n\n        this.errorThrown = 'abort';\n\n        that._trigger('fail', null, this);\n\n        return that._getXHRPromise(false);\n      };\n\n      data.state = function () {\n        if (this.jqXHR) {\n          return that._getDeferredState(this.jqXHR);\n        }\n\n        if (this._processQueue) {\n          return that._getDeferredState(this._processQueue);\n        }\n      };\n\n      data.processing = function () {\n        return !this.jqXHR && this._processQueue && that._getDeferredState(this._processQueue) === 'pending';\n      };\n\n      data.progress = function () {\n        return this._progress;\n      };\n\n      data.response = function () {\n        return this._response;\n      };\n    },\n    // Parses the Range header from the server response\n    // and returns the uploaded bytes:\n    _getUploadedBytes: function _getUploadedBytes(jqXHR) {\n      var range = jqXHR.getResponseHeader('Range'),\n          parts = range && range.split('-'),\n          upperBytesPos = parts && parts.length > 1 && parseInt(parts[1], 10);\n      return upperBytesPos && upperBytesPos + 1;\n    },\n    // Uploads a file in multiple, sequential requests\n    // by splitting the file up in multiple blob chunks.\n    // If the second parameter is true, only tests if the file\n    // should be uploaded in chunks, but does not invoke any\n    // upload requests:\n    _chunkedUpload: function _chunkedUpload(options, testOnly) {\n      options.uploadedBytes = options.uploadedBytes || 0;\n\n      var that = this,\n          file = options.files[0],\n          fs = file.size,\n          ub = options.uploadedBytes,\n          mcs = options.maxChunkSize || fs,\n          slice = this._blobSlice,\n          dfd = $.Deferred(),\n          promise = dfd.promise(),\n          jqXHR,\n          _upload;\n\n      if (!(this._isXHRUpload(options) && slice && (ub || ($.type(mcs) === 'function' ? mcs(options) : mcs) < fs)) || options.data) {\n        return false;\n      }\n\n      if (testOnly) {\n        return true;\n      }\n\n      if (ub >= fs) {\n        file.error = options.i18n('uploadedBytes');\n        return this._getXHRPromise(false, options.context, [null, 'error', file.error]);\n      } // The chunk upload method:\n\n\n      _upload = function upload() {\n        // Clone the options object for each chunk upload:\n        var o = $.extend({}, options),\n            currentLoaded = o._progress.loaded;\n        o.blob = slice.call(file, ub, ub + ($.type(mcs) === 'function' ? mcs(o) : mcs), file.type); // Store the current chunk size, as the blob itself\n        // will be dereferenced after data processing:\n\n        o.chunkSize = o.blob.size; // Expose the chunk bytes position range:\n\n        o.contentRange = 'bytes ' + ub + '-' + (ub + o.chunkSize - 1) + '/' + fs; // Trigger chunkbeforesend to allow form data to be updated for this chunk\n\n        that._trigger('chunkbeforesend', null, o); // Process the upload data (the blob and potential form data):\n\n\n        that._initXHRData(o); // Add progress listeners for this chunk upload:\n\n\n        that._initProgressListener(o);\n\n        jqXHR = (that._trigger('chunksend', null, o) !== false && $.ajax(o) || that._getXHRPromise(false, o.context)).done(function (result, textStatus, jqXHR) {\n          ub = that._getUploadedBytes(jqXHR) || ub + o.chunkSize; // Create a progress event if no final progress event\n          // with loaded equaling total has been triggered\n          // for this chunk:\n\n          if (currentLoaded + o.chunkSize - o._progress.loaded) {\n            that._onProgress($.Event('progress', {\n              lengthComputable: true,\n              loaded: ub - o.uploadedBytes,\n              total: ub - o.uploadedBytes\n            }), o);\n          }\n\n          options.uploadedBytes = o.uploadedBytes = ub;\n          o.result = result;\n          o.textStatus = textStatus;\n          o.jqXHR = jqXHR;\n\n          that._trigger('chunkdone', null, o);\n\n          that._trigger('chunkalways', null, o);\n\n          if (ub < fs) {\n            // File upload not yet complete,\n            // continue with the next chunk:\n            _upload();\n          } else {\n            dfd.resolveWith(o.context, [result, textStatus, jqXHR]);\n          }\n        }).fail(function (jqXHR, textStatus, errorThrown) {\n          o.jqXHR = jqXHR;\n          o.textStatus = textStatus;\n          o.errorThrown = errorThrown;\n\n          that._trigger('chunkfail', null, o);\n\n          that._trigger('chunkalways', null, o);\n\n          dfd.rejectWith(o.context, [jqXHR, textStatus, errorThrown]);\n        }).always(function () {\n          that._deinitProgressListener(o);\n        });\n      };\n\n      this._enhancePromise(promise);\n\n      promise.abort = function () {\n        return jqXHR.abort();\n      };\n\n      _upload();\n\n      return promise;\n    },\n    _beforeSend: function _beforeSend(e, data) {\n      if (this._active === 0) {\n        // the start callback is triggered when an upload starts\n        // and no other uploads are currently running,\n        // equivalent to the global ajaxStart event:\n        this._trigger('start'); // Set timer for global bitrate progress calculation:\n\n\n        this._bitrateTimer = new this._BitrateTimer(); // Reset the global progress values:\n\n        this._progress.loaded = this._progress.total = 0;\n        this._progress.bitrate = 0;\n      } // Make sure the container objects for the .response() and\n      // .progress() methods on the data object are available\n      // and reset to their initial state:\n\n\n      this._initResponseObject(data);\n\n      this._initProgressObject(data);\n\n      data._progress.loaded = data.loaded = data.uploadedBytes || 0;\n      data._progress.total = data.total = this._getTotal(data.files) || 1;\n      data._progress.bitrate = data.bitrate = 0;\n      this._active += 1; // Initialize the global progress values:\n\n      this._progress.loaded += data.loaded;\n      this._progress.total += data.total;\n    },\n    _onDone: function _onDone(result, textStatus, jqXHR, options) {\n      var total = options._progress.total,\n          response = options._response;\n\n      if (options._progress.loaded < total) {\n        // Create a progress event if no final progress event\n        // with loaded equaling total has been triggered:\n        this._onProgress($.Event('progress', {\n          lengthComputable: true,\n          loaded: total,\n          total: total\n        }), options);\n      }\n\n      response.result = options.result = result;\n      response.textStatus = options.textStatus = textStatus;\n      response.jqXHR = options.jqXHR = jqXHR;\n\n      this._trigger('done', null, options);\n    },\n    _onFail: function _onFail(jqXHR, textStatus, errorThrown, options) {\n      var response = options._response;\n\n      if (options.recalculateProgress) {\n        // Remove the failed (error or abort) file upload from\n        // the global progress calculation:\n        this._progress.loaded -= options._progress.loaded;\n        this._progress.total -= options._progress.total;\n      }\n\n      response.jqXHR = options.jqXHR = jqXHR;\n      response.textStatus = options.textStatus = textStatus;\n      response.errorThrown = options.errorThrown = errorThrown;\n\n      this._trigger('fail', null, options);\n    },\n    _onAlways: function _onAlways(jqXHRorResult, textStatus, jqXHRorError, options) {\n      // jqXHRorResult, textStatus and jqXHRorError are added to the\n      // options object via done and fail callbacks\n      this._trigger('always', null, options);\n    },\n    _onSend: function _onSend(e, data) {\n      if (!data.submit) {\n        this._addConvenienceMethods(e, data);\n      }\n\n      var that = this,\n          jqXHR,\n          aborted,\n          slot,\n          pipe,\n          options = that._getAJAXSettings(data),\n          send = function send() {\n        that._sending += 1; // Set timer for bitrate progress calculation:\n\n        options._bitrateTimer = new that._BitrateTimer();\n        jqXHR = jqXHR || ((aborted || that._trigger('send', $.Event('send', {\n          delegatedEvent: e\n        }), options) === false) && that._getXHRPromise(false, options.context, aborted) || that._chunkedUpload(options) || $.ajax(options)).done(function (result, textStatus, jqXHR) {\n          that._onDone(result, textStatus, jqXHR, options);\n        }).fail(function (jqXHR, textStatus, errorThrown) {\n          that._onFail(jqXHR, textStatus, errorThrown, options);\n        }).always(function (jqXHRorResult, textStatus, jqXHRorError) {\n          that._deinitProgressListener(options);\n\n          that._onAlways(jqXHRorResult, textStatus, jqXHRorError, options);\n\n          that._sending -= 1;\n          that._active -= 1;\n\n          if (options.limitConcurrentUploads && options.limitConcurrentUploads > that._sending) {\n            // Start the next queued upload,\n            // that has not been aborted:\n            var nextSlot = that._slots.shift();\n\n            while (nextSlot) {\n              if (that._getDeferredState(nextSlot) === 'pending') {\n                nextSlot.resolve();\n                break;\n              }\n\n              nextSlot = that._slots.shift();\n            }\n          }\n\n          if (that._active === 0) {\n            // The stop callback is triggered when all uploads have\n            // been completed, equivalent to the global ajaxStop event:\n            that._trigger('stop');\n          }\n        });\n        return jqXHR;\n      };\n\n      this._beforeSend(e, options);\n\n      if (this.options.sequentialUploads || this.options.limitConcurrentUploads && this.options.limitConcurrentUploads <= this._sending) {\n        if (this.options.limitConcurrentUploads > 1) {\n          slot = $.Deferred();\n\n          this._slots.push(slot);\n\n          pipe = slot.then(send);\n        } else {\n          this._sequence = this._sequence.then(send, send);\n          pipe = this._sequence;\n        } // Return the piped Promise object, enhanced with an abort method,\n        // which is delegated to the jqXHR object of the current upload,\n        // and jqXHR callbacks mapped to the equivalent Promise methods:\n\n\n        pipe.abort = function () {\n          aborted = [undefined, 'abort', 'abort'];\n\n          if (!jqXHR) {\n            if (slot) {\n              slot.rejectWith(options.context, aborted);\n            }\n\n            return send();\n          }\n\n          return jqXHR.abort();\n        };\n\n        return this._enhancePromise(pipe);\n      }\n\n      return send();\n    },\n    _onAdd: function _onAdd(e, data) {\n      var that = this,\n          result = true,\n          options = $.extend({}, this.options, data),\n          files = data.files,\n          filesLength = files.length,\n          limit = options.limitMultiFileUploads,\n          limitSize = options.limitMultiFileUploadSize,\n          overhead = options.limitMultiFileUploadSizeOverhead,\n          batchSize = 0,\n          paramName = this._getParamName(options),\n          paramNameSet,\n          paramNameSlice,\n          fileSet,\n          i,\n          j = 0;\n\n      if (!filesLength) {\n        return false;\n      }\n\n      if (limitSize && files[0].size === undefined) {\n        limitSize = undefined;\n      }\n\n      if (!(options.singleFileUploads || limit || limitSize) || !this._isXHRUpload(options)) {\n        fileSet = [files];\n        paramNameSet = [paramName];\n      } else if (!(options.singleFileUploads || limitSize) && limit) {\n        fileSet = [];\n        paramNameSet = [];\n\n        for (i = 0; i < filesLength; i += limit) {\n          fileSet.push(files.slice(i, i + limit));\n          paramNameSlice = paramName.slice(i, i + limit);\n\n          if (!paramNameSlice.length) {\n            paramNameSlice = paramName;\n          }\n\n          paramNameSet.push(paramNameSlice);\n        }\n      } else if (!options.singleFileUploads && limitSize) {\n        fileSet = [];\n        paramNameSet = [];\n\n        for (i = 0; i < filesLength; i = i + 1) {\n          batchSize += files[i].size + overhead;\n\n          if (i + 1 === filesLength || batchSize + files[i + 1].size + overhead > limitSize || limit && i + 1 - j >= limit) {\n            fileSet.push(files.slice(j, i + 1));\n            paramNameSlice = paramName.slice(j, i + 1);\n\n            if (!paramNameSlice.length) {\n              paramNameSlice = paramName;\n            }\n\n            paramNameSet.push(paramNameSlice);\n            j = i + 1;\n            batchSize = 0;\n          }\n        }\n      } else {\n        paramNameSet = paramName;\n      }\n\n      data.originalFiles = files;\n      $.each(fileSet || files, function (index, element) {\n        var newData = $.extend({}, data);\n        newData.files = fileSet ? element : [element];\n        newData.paramName = paramNameSet[index];\n\n        that._initResponseObject(newData);\n\n        that._initProgressObject(newData);\n\n        that._addConvenienceMethods(e, newData);\n\n        result = that._trigger('add', $.Event('add', {\n          delegatedEvent: e\n        }), newData);\n        return result;\n      });\n      return result;\n    },\n    _replaceFileInput: function _replaceFileInput(data) {\n      var input = data.fileInput,\n          inputClone = input.clone(true),\n          restoreFocus = input.is(document.activeElement); // Add a reference for the new cloned file input to the data argument:\n\n      data.fileInputClone = inputClone;\n      $('<form></form>').append(inputClone)[0].reset(); // Detaching allows to insert the fileInput on another form\n      // without loosing the file input value:\n\n      input.after(inputClone).detach(); // If the fileInput had focus before it was detached,\n      // restore focus to the inputClone.\n\n      if (restoreFocus) {\n        inputClone.focus();\n      } // Avoid memory leaks with the detached file input:\n\n\n      $.cleanData(input.unbind('remove')); // Replace the original file input element in the fileInput\n      // elements set with the clone, which has been copied including\n      // event handlers:\n\n      this.options.fileInput = this.options.fileInput.map(function (i, el) {\n        if (el === input[0]) {\n          return inputClone[0];\n        }\n\n        return el;\n      }); // If the widget has been initialized on the file input itself,\n      // override this.element with the file input clone:\n\n      if (input[0] === this.element[0]) {\n        this.element = inputClone;\n      }\n    },\n    _handleFileTreeEntry: function _handleFileTreeEntry(entry, path) {\n      var that = this,\n          dfd = $.Deferred(),\n          entries = [],\n          dirReader,\n          errorHandler = function errorHandler(e) {\n        if (e && !e.entry) {\n          e.entry = entry;\n        } // Since $.when returns immediately if one\n        // Deferred is rejected, we use resolve instead.\n        // This allows valid files and invalid items\n        // to be returned together in one set:\n\n\n        dfd.resolve([e]);\n      },\n          successHandler = function successHandler(entries) {\n        that._handleFileTreeEntries(entries, path + entry.name + '/').done(function (files) {\n          dfd.resolve(files);\n        }).fail(errorHandler);\n      },\n          readEntries = function readEntries() {\n        dirReader.readEntries(function (results) {\n          if (!results.length) {\n            successHandler(entries);\n          } else {\n            entries = entries.concat(results);\n            readEntries();\n          }\n        }, errorHandler);\n      };\n\n      path = path || '';\n\n      if (entry.isFile) {\n        if (entry._file) {\n          // Workaround for Chrome bug #149735\n          entry._file.relativePath = path;\n          dfd.resolve(entry._file);\n        } else {\n          entry.file(function (file) {\n            file.relativePath = path;\n            dfd.resolve(file);\n          }, errorHandler);\n        }\n      } else if (entry.isDirectory) {\n        dirReader = entry.createReader();\n        readEntries();\n      } else {\n        // Return an empty list for file system items\n        // other than files or directories:\n        dfd.resolve([]);\n      }\n\n      return dfd.promise();\n    },\n    _handleFileTreeEntries: function _handleFileTreeEntries(entries, path) {\n      var that = this;\n      return $.when.apply($, $.map(entries, function (entry) {\n        return that._handleFileTreeEntry(entry, path);\n      })).then(function () {\n        return Array.prototype.concat.apply([], arguments);\n      });\n    },\n    _getDroppedFiles: function _getDroppedFiles(dataTransfer) {\n      dataTransfer = dataTransfer || {};\n      var items = dataTransfer.items;\n\n      if (items && items.length && (items[0].webkitGetAsEntry || items[0].getAsEntry)) {\n        return this._handleFileTreeEntries($.map(items, function (item) {\n          var entry;\n\n          if (item.webkitGetAsEntry) {\n            entry = item.webkitGetAsEntry();\n\n            if (entry) {\n              // Workaround for Chrome bug #149735:\n              entry._file = item.getAsFile();\n            }\n\n            return entry;\n          }\n\n          return item.getAsEntry();\n        }));\n      }\n\n      return $.Deferred().resolve($.makeArray(dataTransfer.files)).promise();\n    },\n    _getSingleFileInputFiles: function _getSingleFileInputFiles(fileInput) {\n      fileInput = $(fileInput);\n      var entries = fileInput.prop('webkitEntries') || fileInput.prop('entries'),\n          files,\n          value;\n\n      if (entries && entries.length) {\n        return this._handleFileTreeEntries(entries);\n      }\n\n      files = $.makeArray(fileInput.prop('files'));\n\n      if (!files.length) {\n        value = fileInput.prop('value');\n\n        if (!value) {\n          return $.Deferred().resolve([]).promise();\n        } // If the files property is not available, the browser does not\n        // support the File API and we add a pseudo File object with\n        // the input value as name with path information removed:\n\n\n        files = [{\n          name: value.replace(/^.*\\\\/, '')\n        }];\n      } else if (files[0].name === undefined && files[0].fileName) {\n        // File normalization for Safari 4 and Firefox 3:\n        $.each(files, function (index, file) {\n          file.name = file.fileName;\n          file.size = file.fileSize;\n        });\n      }\n\n      return $.Deferred().resolve(files).promise();\n    },\n    _getFileInputFiles: function _getFileInputFiles(fileInput) {\n      if (!(fileInput instanceof $) || fileInput.length === 1) {\n        return this._getSingleFileInputFiles(fileInput);\n      }\n\n      return $.when.apply($, $.map(fileInput, this._getSingleFileInputFiles)).then(function () {\n        return Array.prototype.concat.apply([], arguments);\n      });\n    },\n    _onChange: function _onChange(e) {\n      var that = this,\n          data = {\n        fileInput: $(e.target),\n        form: $(e.target.form)\n      };\n\n      this._getFileInputFiles(data.fileInput).always(function (files) {\n        data.files = files;\n\n        if (that.options.replaceFileInput) {\n          that._replaceFileInput(data);\n        }\n\n        if (that._trigger('change', $.Event('change', {\n          delegatedEvent: e\n        }), data) !== false) {\n          that._onAdd(e, data);\n        }\n      });\n    },\n    _onPaste: function _onPaste(e) {\n      var items = e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.items,\n          data = {\n        files: []\n      };\n\n      if (items && items.length) {\n        $.each(items, function (index, item) {\n          var file = item.getAsFile && item.getAsFile();\n\n          if (file) {\n            data.files.push(file);\n          }\n        });\n\n        if (this._trigger('paste', $.Event('paste', {\n          delegatedEvent: e\n        }), data) !== false) {\n          this._onAdd(e, data);\n        }\n      }\n    },\n    _onDrop: function _onDrop(e) {\n      e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;\n      var that = this,\n          dataTransfer = e.dataTransfer,\n          data = {};\n\n      if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n        e.preventDefault();\n\n        this._getDroppedFiles(dataTransfer).always(function (files) {\n          data.files = files;\n\n          if (that._trigger('drop', $.Event('drop', {\n            delegatedEvent: e\n          }), data) !== false) {\n            that._onAdd(e, data);\n          }\n        });\n      }\n    },\n    _onDragOver: getDragHandler('dragover'),\n    _onDragEnter: getDragHandler('dragenter'),\n    _onDragLeave: getDragHandler('dragleave'),\n    _initEventHandlers: function _initEventHandlers() {\n      if (this._isXHRUpload(this.options)) {\n        this._on(this.options.dropZone, {\n          dragover: this._onDragOver,\n          drop: this._onDrop,\n          // event.preventDefault() on dragenter is required for IE10+:\n          dragenter: this._onDragEnter,\n          // dragleave is not required, but added for completeness:\n          dragleave: this._onDragLeave\n        });\n\n        this._on(this.options.pasteZone, {\n          paste: this._onPaste\n        });\n      }\n\n      if ($.support.fileInput) {\n        this._on(this.options.fileInput, {\n          change: this._onChange\n        });\n      }\n    },\n    _destroyEventHandlers: function _destroyEventHandlers() {\n      this._off(this.options.dropZone, 'dragenter dragleave dragover drop');\n\n      this._off(this.options.pasteZone, 'paste');\n\n      this._off(this.options.fileInput, 'change');\n    },\n    _destroy: function _destroy() {\n      this._destroyEventHandlers();\n    },\n    _setOption: function _setOption(key, value) {\n      var reinit = $.inArray(key, this._specialOptions) !== -1;\n\n      if (reinit) {\n        this._destroyEventHandlers();\n      }\n\n      this._super(key, value);\n\n      if (reinit) {\n        this._initSpecialOptions();\n\n        this._initEventHandlers();\n      }\n    },\n    _initSpecialOptions: function _initSpecialOptions() {\n      var options = this.options;\n\n      if (options.fileInput === undefined) {\n        options.fileInput = this.element.is('input[type=\"file\"]') ? this.element : this.element.find('input[type=\"file\"]');\n      } else if (!(options.fileInput instanceof $)) {\n        options.fileInput = $(options.fileInput);\n      }\n\n      if (!(options.dropZone instanceof $)) {\n        options.dropZone = $(options.dropZone);\n      }\n\n      if (!(options.pasteZone instanceof $)) {\n        options.pasteZone = $(options.pasteZone);\n      }\n    },\n    _getRegExp: function _getRegExp(str) {\n      var parts = str.split('/'),\n          modifiers = parts.pop();\n      parts.shift();\n      return new RegExp(parts.join('/'), modifiers);\n    },\n    _isRegExpOption: function _isRegExpOption(key, value) {\n      return key !== 'url' && $.type(value) === 'string' && /^\\/.*\\/[igm]{0,3}$/.test(value);\n    },\n    _initDataAttributes: function _initDataAttributes() {\n      var that = this,\n          options = this.options,\n          data = this.element.data(); // Initialize options set via HTML5 data-attributes:\n\n      $.each(this.element[0].attributes, function (index, attr) {\n        var key = attr.name.toLowerCase(),\n            value;\n\n        if (/^data-/.test(key)) {\n          // Convert hyphen-ated key to camelCase:\n          key = key.slice(5).replace(/-[a-z]/g, function (str) {\n            return str.charAt(1).toUpperCase();\n          });\n          value = data[key];\n\n          if (that._isRegExpOption(key, value)) {\n            value = that._getRegExp(value);\n          }\n\n          options[key] = value;\n        }\n      });\n    },\n    _create: function _create() {\n      this._initDataAttributes();\n\n      this._initSpecialOptions();\n\n      this._slots = [];\n      this._sequence = this._getXHRPromise(true);\n      this._sending = this._active = 0;\n\n      this._initProgressObject(this);\n\n      this._initEventHandlers();\n    },\n    // This method is exposed to the widget API and allows to query\n    // the number of active uploads:\n    active: function active() {\n      return this._active;\n    },\n    // This method is exposed to the widget API and allows to query\n    // the widget upload progress.\n    // It returns an object with loaded, total and bitrate properties\n    // for the running uploads:\n    progress: function progress() {\n      return this._progress;\n    },\n    // This method is exposed to the widget API and allows adding files\n    // using the fileupload API. The data parameter accepts an object which\n    // must have a files property and can contain additional options:\n    // .fileupload('add', {files: filesList});\n    add: function add(data) {\n      var that = this;\n\n      if (!data || this.options.disabled) {\n        return;\n      }\n\n      if (data.fileInput && !data.files) {\n        this._getFileInputFiles(data.fileInput).always(function (files) {\n          data.files = files;\n\n          that._onAdd(null, data);\n        });\n      } else {\n        data.files = $.makeArray(data.files);\n\n        this._onAdd(null, data);\n      }\n    },\n    // This method is exposed to the widget API and allows sending files\n    // using the fileupload API. The data parameter accepts an object which\n    // must have a files or fileInput property and can contain additional options:\n    // .fileupload('send', {files: filesList});\n    // The method returns a Promise object for the file upload call.\n    send: function send(data) {\n      if (data && !this.options.disabled) {\n        if (data.fileInput && !data.files) {\n          var that = this,\n              dfd = $.Deferred(),\n              promise = dfd.promise(),\n              jqXHR,\n              aborted;\n\n          promise.abort = function () {\n            aborted = true;\n\n            if (jqXHR) {\n              return jqXHR.abort();\n            }\n\n            dfd.reject(null, 'abort', 'abort');\n            return promise;\n          };\n\n          this._getFileInputFiles(data.fileInput).always(function (files) {\n            if (aborted) {\n              return;\n            }\n\n            if (!files.length) {\n              dfd.reject();\n              return;\n            }\n\n            data.files = files;\n            jqXHR = that._onSend(null, data);\n            jqXHR.then(function (result, textStatus, jqXHR) {\n              dfd.resolve(result, textStatus, jqXHR);\n            }, function (jqXHR, textStatus, errorThrown) {\n              dfd.reject(jqXHR, textStatus, errorThrown);\n            });\n          });\n\n          return this._enhancePromise(promise);\n        }\n\n        data.files = $.makeArray(data.files);\n\n        if (data.files.length) {\n          return this._onSend(null, data);\n        }\n      }\n\n      return this._getXHRPromise(false, data && data.context);\n    }\n  });\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*! jQuery UI - v1.12.1+CommonJS - 2018-02-10\n * http://jqueryui.com\n * Includes: widget.js\n * Copyright jQuery Foundation and other contributors; Licensed MIT */\n(function (factory) {\n  if (typeof define === \"function\" && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([\"jquery\"], factory);\n  } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\") {\n    // Node/CommonJS\n    factory(require(\"jquery\"));\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n})(function ($) {\n  $.ui = $.ui || {};\n  var version = $.ui.version = \"1.12.1\";\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  //>>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  var widgetUuid = 0;\n  var widgetSlice = Array.prototype.slice;\n\n  $.cleanData = function (orig) {\n    return function (elems) {\n      var events, elem, i;\n\n      for (i = 0; (elem = elems[i]) != null; i++) {\n        try {\n          // Only trigger remove when necessary to save time\n          events = $._data(elem, \"events\");\n\n          if (events && events.remove) {\n            $(elem).triggerHandler(\"remove\");\n          } // Http://bugs.jquery.com/ticket/8235\n\n        } catch (e) {}\n      }\n\n      orig(elems);\n    };\n  }($.cleanData);\n\n  $.widget = function (name, base, prototype) {\n    var existingConstructor, constructor, basePrototype; // ProxiedPrototype allows the provided prototype to remain unmodified\n    // so that it can be used as a mixin for multiple widgets (#8876)\n\n    var proxiedPrototype = {};\n    var namespace = name.split(\".\")[0];\n    name = name.split(\".\")[1];\n    var fullName = namespace + \"-\" + name;\n\n    if (!prototype) {\n      prototype = base;\n      base = $.Widget;\n    }\n\n    if ($.isArray(prototype)) {\n      prototype = $.extend.apply(null, [{}].concat(prototype));\n    } // Create selector for plugin\n\n\n    $.expr[\":\"][fullName.toLowerCase()] = function (elem) {\n      return !!$.data(elem, fullName);\n    };\n\n    $[namespace] = $[namespace] || {};\n    existingConstructor = $[namespace][name];\n\n    constructor = $[namespace][name] = function (options, element) {\n      // Allow instantiation without \"new\" keyword\n      if (!this._createWidget) {\n        return new constructor(options, element);\n      } // Allow instantiation without initializing for simple inheritance\n      // must use \"new\" keyword (the code above always passes args)\n\n\n      if (arguments.length) {\n        this._createWidget(options, element);\n      }\n    }; // Extend with the existing constructor to carry over any static properties\n\n\n    $.extend(constructor, existingConstructor, {\n      version: prototype.version,\n      // Copy the object used to create the prototype in case we need to\n      // redefine the widget later\n      _proto: $.extend({}, prototype),\n      // Track widgets that inherit from this widget in case this widget is\n      // redefined after a widget inherits from it\n      _childConstructors: []\n    });\n    basePrototype = new base(); // We need to make the options hash a property directly on the new instance\n    // otherwise we'll modify the options hash on the prototype that we're\n    // inheriting from\n\n    basePrototype.options = $.widget.extend({}, basePrototype.options);\n    $.each(prototype, function (prop, value) {\n      if (!$.isFunction(value)) {\n        proxiedPrototype[prop] = value;\n        return;\n      }\n\n      proxiedPrototype[prop] = function () {\n        function _super() {\n          return base.prototype[prop].apply(this, arguments);\n        }\n\n        function _superApply(args) {\n          return base.prototype[prop].apply(this, args);\n        }\n\n        return function () {\n          var __super = this._super;\n          var __superApply = this._superApply;\n          var returnValue;\n          this._super = _super;\n          this._superApply = _superApply;\n          returnValue = value.apply(this, arguments);\n          this._super = __super;\n          this._superApply = __superApply;\n          return returnValue;\n        };\n      }();\n    });\n    constructor.prototype = $.widget.extend(basePrototype, {\n      // TODO: remove support for widgetEventPrefix\n      // always use the name + a colon as the prefix, e.g., draggable:start\n      // don't prefix for widgets that aren't DOM-based\n      widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix || name : name\n    }, proxiedPrototype, {\n      constructor: constructor,\n      namespace: namespace,\n      widgetName: name,\n      widgetFullName: fullName\n    }); // If this widget is being redefined then we need to find all widgets that\n    // are inheriting from it and redefine all of them so that they inherit from\n    // the new version of this widget. We're essentially trying to replace one\n    // level in the prototype chain.\n\n    if (existingConstructor) {\n      $.each(existingConstructor._childConstructors, function (i, child) {\n        var childPrototype = child.prototype; // Redefine the child widget using the same prototype that was\n        // originally used, but inherit from the new version of the base\n\n        $.widget(childPrototype.namespace + \".\" + childPrototype.widgetName, constructor, child._proto);\n      }); // Remove the list of existing child constructors from the old constructor\n      // so the old child constructors can be garbage collected\n\n      delete existingConstructor._childConstructors;\n    } else {\n      base._childConstructors.push(constructor);\n    }\n\n    $.widget.bridge(name, constructor);\n    return constructor;\n  };\n\n  $.widget.extend = function (target) {\n    var input = widgetSlice.call(arguments, 1);\n    var inputIndex = 0;\n    var inputLength = input.length;\n    var key;\n    var value;\n\n    for (; inputIndex < inputLength; inputIndex++) {\n      for (key in input[inputIndex]) {\n        value = input[inputIndex][key];\n\n        if (input[inputIndex].hasOwnProperty(key) && value !== undefined) {\n          // Clone objects\n          if ($.isPlainObject(value)) {\n            target[key] = $.isPlainObject(target[key]) ? $.widget.extend({}, target[key], value) : // Don't extend strings, arrays, etc. with objects\n            $.widget.extend({}, value); // Copy everything else by reference\n          } else {\n            target[key] = value;\n          }\n        }\n      }\n    }\n\n    return target;\n  };\n\n  $.widget.bridge = function (name, object) {\n    var fullName = object.prototype.widgetFullName || name;\n\n    $.fn[name] = function (options) {\n      var isMethodCall = typeof options === \"string\";\n      var args = widgetSlice.call(arguments, 1);\n      var returnValue = this;\n\n      if (isMethodCall) {\n        // If this is an empty collection, we need to have the instance method\n        // return undefined instead of the jQuery instance\n        if (!this.length && options === \"instance\") {\n          returnValue = undefined;\n        } else {\n          this.each(function () {\n            var methodValue;\n            var instance = $.data(this, fullName);\n\n            if (options === \"instance\") {\n              returnValue = instance;\n              return false;\n            }\n\n            if (!instance) {\n              return $.error(\"cannot call methods on \" + name + \" prior to initialization; \" + \"attempted to call method '\" + options + \"'\");\n            }\n\n            if (!$.isFunction(instance[options]) || options.charAt(0) === \"_\") {\n              return $.error(\"no such method '\" + options + \"' for \" + name + \" widget instance\");\n            }\n\n            methodValue = instance[options].apply(instance, args);\n\n            if (methodValue !== instance && methodValue !== undefined) {\n              returnValue = methodValue && methodValue.jquery ? returnValue.pushStack(methodValue.get()) : methodValue;\n              return false;\n            }\n          });\n        }\n      } else {\n        // Allow multiple hashes to be passed on init\n        if (args.length) {\n          options = $.widget.extend.apply(null, [options].concat(args));\n        }\n\n        this.each(function () {\n          var instance = $.data(this, fullName);\n\n          if (instance) {\n            instance.option(options || {});\n\n            if (instance._init) {\n              instance._init();\n            }\n          } else {\n            $.data(this, fullName, new object(options, this));\n          }\n        });\n      }\n\n      return returnValue;\n    };\n  };\n\n  $.Widget = function ()\n  /* options, element */\n  {};\n\n  $.Widget._childConstructors = [];\n  $.Widget.prototype = {\n    widgetName: \"widget\",\n    widgetEventPrefix: \"\",\n    defaultElement: \"<div>\",\n    options: {\n      classes: {},\n      disabled: false,\n      // Callbacks\n      create: null\n    },\n    _createWidget: function _createWidget(options, element) {\n      element = $(element || this.defaultElement || this)[0];\n      this.element = $(element);\n      this.uuid = widgetUuid++;\n      this.eventNamespace = \".\" + this.widgetName + this.uuid;\n      this.bindings = $();\n      this.hoverable = $();\n      this.focusable = $();\n      this.classesElementLookup = {};\n\n      if (element !== this) {\n        $.data(element, this.widgetFullName, this);\n\n        this._on(true, this.element, {\n          remove: function remove(event) {\n            if (event.target === element) {\n              this.destroy();\n            }\n          }\n        });\n\n        this.document = $(element.style ? // Element within the document\n        element.ownerDocument : // Element is window or document\n        element.document || element);\n        this.window = $(this.document[0].defaultView || this.document[0].parentWindow);\n      }\n\n      this.options = $.widget.extend({}, this.options, this._getCreateOptions(), options);\n\n      this._create();\n\n      if (this.options.disabled) {\n        this._setOptionDisabled(this.options.disabled);\n      }\n\n      this._trigger(\"create\", null, this._getCreateEventData());\n\n      this._init();\n    },\n    _getCreateOptions: function _getCreateOptions() {\n      return {};\n    },\n    _getCreateEventData: $.noop,\n    _create: $.noop,\n    _init: $.noop,\n    destroy: function destroy() {\n      var that = this;\n\n      this._destroy();\n\n      $.each(this.classesElementLookup, function (key, value) {\n        that._removeClass(value, key);\n      }); // We can probably remove the unbind calls in 2.0\n      // all event bindings should go through this._on()\n\n      this.element.off(this.eventNamespace).removeData(this.widgetFullName);\n      this.widget().off(this.eventNamespace).removeAttr(\"aria-disabled\"); // Clean up events and states\n\n      this.bindings.off(this.eventNamespace);\n    },\n    _destroy: $.noop,\n    widget: function widget() {\n      return this.element;\n    },\n    option: function option(key, value) {\n      var options = key;\n      var parts;\n      var curOption;\n      var i;\n\n      if (arguments.length === 0) {\n        // Don't return a reference to the internal hash\n        return $.widget.extend({}, this.options);\n      }\n\n      if (typeof key === \"string\") {\n        // Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n        options = {};\n        parts = key.split(\".\");\n        key = parts.shift();\n\n        if (parts.length) {\n          curOption = options[key] = $.widget.extend({}, this.options[key]);\n\n          for (i = 0; i < parts.length - 1; i++) {\n            curOption[parts[i]] = curOption[parts[i]] || {};\n            curOption = curOption[parts[i]];\n          }\n\n          key = parts.pop();\n\n          if (arguments.length === 1) {\n            return curOption[key] === undefined ? null : curOption[key];\n          }\n\n          curOption[key] = value;\n        } else {\n          if (arguments.length === 1) {\n            return this.options[key] === undefined ? null : this.options[key];\n          }\n\n          options[key] = value;\n        }\n      }\n\n      this._setOptions(options);\n\n      return this;\n    },\n    _setOptions: function _setOptions(options) {\n      var key;\n\n      for (key in options) {\n        this._setOption(key, options[key]);\n      }\n\n      return this;\n    },\n    _setOption: function _setOption(key, value) {\n      if (key === \"classes\") {\n        this._setOptionClasses(value);\n      }\n\n      this.options[key] = value;\n\n      if (key === \"disabled\") {\n        this._setOptionDisabled(value);\n      }\n\n      return this;\n    },\n    _setOptionClasses: function _setOptionClasses(value) {\n      var classKey, elements, currentElements;\n\n      for (classKey in value) {\n        currentElements = this.classesElementLookup[classKey];\n\n        if (value[classKey] === this.options.classes[classKey] || !currentElements || !currentElements.length) {\n          continue;\n        } // We are doing this to create a new jQuery object because the _removeClass() call\n        // on the next line is going to destroy the reference to the current elements being\n        // tracked. We need to save a copy of this collection so that we can add the new classes\n        // below.\n\n\n        elements = $(currentElements.get());\n\n        this._removeClass(currentElements, classKey); // We don't use _addClass() here, because that uses this.options.classes\n        // for generating the string of classes. We want to use the value passed in from\n        // _setOption(), this is the new value of the classes option which was passed to\n        // _setOption(). We pass this value directly to _classes().\n\n\n        elements.addClass(this._classes({\n          element: elements,\n          keys: classKey,\n          classes: value,\n          add: true\n        }));\n      }\n    },\n    _setOptionDisabled: function _setOptionDisabled(value) {\n      this._toggleClass(this.widget(), this.widgetFullName + \"-disabled\", null, !!value); // If the widget is becoming disabled, then nothing is interactive\n\n\n      if (value) {\n        this._removeClass(this.hoverable, null, \"ui-state-hover\");\n\n        this._removeClass(this.focusable, null, \"ui-state-focus\");\n      }\n    },\n    enable: function enable() {\n      return this._setOptions({\n        disabled: false\n      });\n    },\n    disable: function disable() {\n      return this._setOptions({\n        disabled: true\n      });\n    },\n    _classes: function _classes(options) {\n      var full = [];\n      var that = this;\n      options = $.extend({\n        element: this.element,\n        classes: this.options.classes || {}\n      }, options);\n\n      function processClassString(classes, checkOption) {\n        var current, i;\n\n        for (i = 0; i < classes.length; i++) {\n          current = that.classesElementLookup[classes[i]] || $();\n\n          if (options.add) {\n            current = $($.unique(current.get().concat(options.element.get())));\n          } else {\n            current = $(current.not(options.element).get());\n          }\n\n          that.classesElementLookup[classes[i]] = current;\n          full.push(classes[i]);\n\n          if (checkOption && options.classes[classes[i]]) {\n            full.push(options.classes[classes[i]]);\n          }\n        }\n      }\n\n      this._on(options.element, {\n        \"remove\": \"_untrackClassesElement\"\n      });\n\n      if (options.keys) {\n        processClassString(options.keys.match(/\\S+/g) || [], true);\n      }\n\n      if (options.extra) {\n        processClassString(options.extra.match(/\\S+/g) || []);\n      }\n\n      return full.join(\" \");\n    },\n    _untrackClassesElement: function _untrackClassesElement(event) {\n      var that = this;\n      $.each(that.classesElementLookup, function (key, value) {\n        if ($.inArray(event.target, value) !== -1) {\n          that.classesElementLookup[key] = $(value.not(event.target).get());\n        }\n      });\n    },\n    _removeClass: function _removeClass(element, keys, extra) {\n      return this._toggleClass(element, keys, extra, false);\n    },\n    _addClass: function _addClass(element, keys, extra) {\n      return this._toggleClass(element, keys, extra, true);\n    },\n    _toggleClass: function _toggleClass(element, keys, extra, add) {\n      add = typeof add === \"boolean\" ? add : extra;\n      var shift = typeof element === \"string\" || element === null,\n          options = {\n        extra: shift ? keys : extra,\n        keys: shift ? element : keys,\n        element: shift ? this.element : element,\n        add: add\n      };\n      options.element.toggleClass(this._classes(options), add);\n      return this;\n    },\n    _on: function _on(suppressDisabledCheck, element, handlers) {\n      var delegateElement;\n      var instance = this; // No suppressDisabledCheck flag, shuffle arguments\n\n      if (typeof suppressDisabledCheck !== \"boolean\") {\n        handlers = element;\n        element = suppressDisabledCheck;\n        suppressDisabledCheck = false;\n      } // No element argument, shuffle and use this.element\n\n\n      if (!handlers) {\n        handlers = element;\n        element = this.element;\n        delegateElement = this.widget();\n      } else {\n        element = delegateElement = $(element);\n        this.bindings = this.bindings.add(element);\n      }\n\n      $.each(handlers, function (event, handler) {\n        function handlerProxy() {\n          // Allow widgets to customize the disabled handling\n          // - disabled as an array instead of boolean\n          // - disabled class as method for disabling individual parts\n          if (!suppressDisabledCheck && (instance.options.disabled === true || $(this).hasClass(\"ui-state-disabled\"))) {\n            return;\n          }\n\n          return (typeof handler === \"string\" ? instance[handler] : handler).apply(instance, arguments);\n        } // Copy the guid so direct unbinding works\n\n\n        if (typeof handler !== \"string\") {\n          handlerProxy.guid = handler.guid = handler.guid || handlerProxy.guid || $.guid++;\n        }\n\n        var match = event.match(/^([\\w:-]*)\\s*(.*)$/);\n        var eventName = match[1] + instance.eventNamespace;\n        var selector = match[2];\n\n        if (selector) {\n          delegateElement.on(eventName, selector, handlerProxy);\n        } else {\n          element.on(eventName, handlerProxy);\n        }\n      });\n    },\n    _off: function _off(element, eventName) {\n      eventName = (eventName || \"\").split(\" \").join(this.eventNamespace + \" \") + this.eventNamespace;\n      element.off(eventName).off(eventName); // Clear the stack to avoid memory leaks (#10056)\n\n      this.bindings = $(this.bindings.not(element).get());\n      this.focusable = $(this.focusable.not(element).get());\n      this.hoverable = $(this.hoverable.not(element).get());\n    },\n    _delay: function _delay(handler, delay) {\n      function handlerProxy() {\n        return (typeof handler === \"string\" ? instance[handler] : handler).apply(instance, arguments);\n      }\n\n      var instance = this;\n      return setTimeout(handlerProxy, delay || 0);\n    },\n    _hoverable: function _hoverable(element) {\n      this.hoverable = this.hoverable.add(element);\n\n      this._on(element, {\n        mouseenter: function mouseenter(event) {\n          this._addClass($(event.currentTarget), null, \"ui-state-hover\");\n        },\n        mouseleave: function mouseleave(event) {\n          this._removeClass($(event.currentTarget), null, \"ui-state-hover\");\n        }\n      });\n    },\n    _focusable: function _focusable(element) {\n      this.focusable = this.focusable.add(element);\n\n      this._on(element, {\n        focusin: function focusin(event) {\n          this._addClass($(event.currentTarget), null, \"ui-state-focus\");\n        },\n        focusout: function focusout(event) {\n          this._removeClass($(event.currentTarget), null, \"ui-state-focus\");\n        }\n      });\n    },\n    _trigger: function _trigger(type, event, data) {\n      var prop, orig;\n      var callback = this.options[type];\n      data = data || {};\n      event = $.Event(event);\n      event.type = (type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type).toLowerCase(); // The original event may come from any element\n      // so we need to reset the target on the new event\n\n      event.target = this.element[0]; // Copy original event properties over to the new event\n\n      orig = event.originalEvent;\n\n      if (orig) {\n        for (prop in orig) {\n          if (!(prop in event)) {\n            event[prop] = orig[prop];\n          }\n        }\n      }\n\n      this.element.trigger(event, data);\n      return !($.isFunction(callback) && callback.apply(this.element[0], [event].concat(data)) === false || event.isDefaultPrevented());\n    }\n  };\n  $.each({\n    show: \"fadeIn\",\n    hide: \"fadeOut\"\n  }, function (method, defaultEffect) {\n    $.Widget.prototype[\"_\" + method] = function (element, options, callback) {\n      if (typeof options === \"string\") {\n        options = {\n          effect: options\n        };\n      }\n\n      var hasOptions;\n      var effectName = !options ? method : options === true || typeof options === \"number\" ? defaultEffect : options.effect || defaultEffect;\n      options = options || {};\n\n      if (typeof options === \"number\") {\n        options = {\n          duration: options\n        };\n      }\n\n      hasOptions = !$.isEmptyObject(options);\n      options.complete = callback;\n\n      if (options.delay) {\n        element.delay(options.delay);\n      }\n\n      if (hasOptions && $.effects && $.effects.effect[effectName]) {\n        element[method](options);\n      } else if (effectName !== method && element[effectName]) {\n        element[effectName](options.duration, options.easing, callback);\n      } else {\n        element.queue(function (next) {\n          $(this)[method]();\n\n          if (callback) {\n            callback.call(element[0]);\n          }\n\n          next();\n        });\n      }\n    };\n  });\n  var widget = $.widget;\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\r\n * Bootstrap-select v1.13.18 (https://developer.snapappointments.com/bootstrap-select)\r\n *\r\n * Copyright 2012-2020 SnapAppointments, LLC\r\n * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)\r\n */\n(function (root, factory) {\n  if (root === undefined && window !== undefined) root = window;\n\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 factory(a0);\n    });\n  } else if ((typeof module === \"undefined\" ? \"undefined\" : _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    factory(root[\"jQuery\"]);\n  }\n})(this, function (jQuery) {\n  (function ($) {\n    'use strict';\n\n    var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n    var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n    var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n    var DefaultWhitelist = {\n      // Global attributes allowed on any supplied element below.\n      '*': ['class', 'dir', 'id', 'lang', 'role', 'tabindex', 'style', ARIA_ATTRIBUTE_PATTERN],\n      a: ['target', 'href', 'title', 'rel'],\n      area: [],\n      b: [],\n      br: [],\n      col: [],\n      code: [],\n      div: [],\n      em: [],\n      hr: [],\n      h1: [],\n      h2: [],\n      h3: [],\n      h4: [],\n      h5: [],\n      h6: [],\n      i: [],\n      img: ['src', 'alt', 'title', 'width', 'height'],\n      li: [],\n      ol: [],\n      p: [],\n      pre: [],\n      s: [],\n      small: [],\n      span: [],\n      sub: [],\n      sup: [],\n      strong: [],\n      u: [],\n      ul: []\n    };\n    /**\r\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\r\n     *\r\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\r\n     */\n\n    var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n    /**\r\n     * A pattern that matches safe data URLs. Only matches image, video and audio types.\r\n     *\r\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\r\n     */\n\n    var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n    function allowedAttribute(attr, allowedAttributeList) {\n      var attrName = attr.nodeName.toLowerCase();\n\n      if ($.inArray(attrName, allowedAttributeList) !== -1) {\n        if ($.inArray(attrName, uriAttrs) !== -1) {\n          return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n        }\n\n        return true;\n      }\n\n      var regExp = $(allowedAttributeList).filter(function (index, value) {\n        return value instanceof RegExp;\n      }); // Check if a regular expression validates the attribute.\n\n      for (var i = 0, l = regExp.length; i < l; i++) {\n        if (attrName.match(regExp[i])) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    function sanitizeHtml(unsafeElements, whiteList, sanitizeFn) {\n      if (sanitizeFn && typeof sanitizeFn === 'function') {\n        return sanitizeFn(unsafeElements);\n      }\n\n      var whitelistKeys = Object.keys(whiteList);\n\n      for (var i = 0, len = unsafeElements.length; i < len; i++) {\n        var elements = unsafeElements[i].querySelectorAll('*');\n\n        for (var j = 0, len2 = elements.length; j < len2; j++) {\n          var el = elements[j];\n          var elName = el.nodeName.toLowerCase();\n\n          if (whitelistKeys.indexOf(elName) === -1) {\n            el.parentNode.removeChild(el);\n            continue;\n          }\n\n          var attributeList = [].slice.call(el.attributes);\n          var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n\n          for (var k = 0, len3 = attributeList.length; k < len3; k++) {\n            var attr = attributeList[k];\n\n            if (!allowedAttribute(attr, whitelistedAttributes)) {\n              el.removeAttribute(attr.nodeName);\n            }\n          }\n        }\n      }\n    } // Polyfill for browsers with no classList support\n    // Remove in v2\n\n\n    if (!('classList' in document.createElement('_'))) {\n      (function (view) {\n        if (!('Element' in view)) return;\n\n        var classListProp = 'classList',\n            protoProp = 'prototype',\n            elemCtrProto = view.Element[protoProp],\n            objCtr = Object,\n            classListGetter = function classListGetter() {\n          var $elem = $(this);\n          return {\n            add: function add(classes) {\n              classes = Array.prototype.slice.call(arguments).join(' ');\n              return $elem.addClass(classes);\n            },\n            remove: function remove(classes) {\n              classes = Array.prototype.slice.call(arguments).join(' ');\n              return $elem.removeClass(classes);\n            },\n            toggle: function toggle(classes, force) {\n              return $elem.toggleClass(classes, force);\n            },\n            contains: function contains(classes) {\n              return $elem.hasClass(classes);\n            }\n          };\n        };\n\n        if (objCtr.defineProperty) {\n          var classListPropDesc = {\n            get: classListGetter,\n            enumerable: true,\n            configurable: true\n          };\n\n          try {\n            objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n          } catch (ex) {\n            // IE 8 doesn't support enumerable:true\n            // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36\n            // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n            if (ex.number === undefined || ex.number === -0x7FF5EC54) {\n              classListPropDesc.enumerable = false;\n              objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n            }\n          }\n        } else if (objCtr[protoProp].__defineGetter__) {\n          elemCtrProto.__defineGetter__(classListProp, classListGetter);\n        }\n      })(window);\n    }\n\n    var testElement = document.createElement('_');\n    testElement.classList.add('c1', 'c2');\n\n    if (!testElement.classList.contains('c2')) {\n      var _add = DOMTokenList.prototype.add,\n          _remove = DOMTokenList.prototype.remove;\n\n      DOMTokenList.prototype.add = function () {\n        Array.prototype.forEach.call(arguments, _add.bind(this));\n      };\n\n      DOMTokenList.prototype.remove = function () {\n        Array.prototype.forEach.call(arguments, _remove.bind(this));\n      };\n    }\n\n    testElement.classList.toggle('c3', false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n    // support the second argument.\n\n    if (testElement.classList.contains('c3')) {\n      var _toggle = DOMTokenList.prototype.toggle;\n\n      DOMTokenList.prototype.toggle = function (token, force) {\n        if (1 in arguments && !this.contains(token) === !force) {\n          return force;\n        } else {\n          return _toggle.call(this, token);\n        }\n      };\n    }\n\n    testElement = null; // shallow array comparison\n\n    function isEqual(array1, array2) {\n      return array1.length === array2.length && array1.every(function (element, index) {\n        return element === array2[index];\n      });\n    }\n\n    ; // <editor-fold desc=\"Shims\">\n\n    if (!String.prototype.startsWith) {\n      (function () {\n        'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n\n        var defineProperty = function () {\n          // IE 8 only supports `Object.defineProperty` on DOM elements\n          try {\n            var object = {};\n            var $defineProperty = Object.defineProperty;\n            var result = $defineProperty(object, object, object) && $defineProperty;\n          } catch (error) {}\n\n          return result;\n        }();\n\n        var toString = {}.toString;\n\n        var startsWith = function startsWith(search) {\n          if (this == null) {\n            throw new TypeError();\n          }\n\n          var string = String(this);\n\n          if (search && toString.call(search) == '[object RegExp]') {\n            throw new TypeError();\n          }\n\n          var stringLength = string.length;\n          var searchString = String(search);\n          var searchLength = searchString.length;\n          var position = arguments.length > 1 ? arguments[1] : undefined; // `ToInteger`\n\n          var pos = position ? Number(position) : 0;\n\n          if (pos != pos) {\n            // better `isNaN`\n            pos = 0;\n          }\n\n          var start = Math.min(Math.max(pos, 0), stringLength); // Avoid the `indexOf` call if no match is possible\n\n          if (searchLength + start > stringLength) {\n            return false;\n          }\n\n          var index = -1;\n\n          while (++index < searchLength) {\n            if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\n              return false;\n            }\n          }\n\n          return true;\n        };\n\n        if (defineProperty) {\n          defineProperty(String.prototype, 'startsWith', {\n            'value': startsWith,\n            'configurable': true,\n            'writable': true\n          });\n        } else {\n          String.prototype.startsWith = startsWith;\n        }\n      })();\n    }\n\n    if (!Object.keys) {\n      Object.keys = function (o, // object\n      k, // key\n      r // result array\n      ) {\n        // initialize object and result\n        r = []; // iterate over object keys\n\n        for (k in o) {\n          // fill result array with non-prototypical keys\n          r.hasOwnProperty.call(o, k) && r.push(k);\n        } // return result\n\n\n        return r;\n      };\n    }\n\n    if (HTMLSelectElement && !HTMLSelectElement.prototype.hasOwnProperty('selectedOptions')) {\n      Object.defineProperty(HTMLSelectElement.prototype, 'selectedOptions', {\n        get: function get() {\n          return this.querySelectorAll(':checked');\n        }\n      });\n    }\n\n    function getSelectedOptions(select, ignoreDisabled) {\n      var selectedOptions = select.selectedOptions,\n          options = [],\n          opt;\n\n      if (ignoreDisabled) {\n        for (var i = 0, len = selectedOptions.length; i < len; i++) {\n          opt = selectedOptions[i];\n\n          if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\n            options.push(opt);\n          }\n        }\n\n        return options;\n      }\n\n      return selectedOptions;\n    } // much faster than $.val()\n\n\n    function getSelectValues(select, selectedOptions) {\n      var value = [],\n          options = selectedOptions || select.selectedOptions,\n          opt;\n\n      for (var i = 0, len = options.length; i < len; i++) {\n        opt = options[i];\n\n        if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\n          value.push(opt.value);\n        }\n      }\n\n      if (!select.multiple) {\n        return !value.length ? null : value[0];\n      }\n\n      return value;\n    } // set data-selected on select element if the value has been programmatically selected\n    // prior to initialization of bootstrap-select\n    // * consider removing or replacing an alternative method *\n\n\n    var valHooks = {\n      useDefault: false,\n      _set: $.valHooks.select.set\n    };\n\n    $.valHooks.select.set = function (elem, value) {\n      if (value && !valHooks.useDefault) $(elem).data('selected', true);\n      return valHooks._set.apply(this, arguments);\n    };\n\n    var changedArguments = null;\n\n    var EventIsSupported = function () {\n      try {\n        new Event('change');\n        return true;\n      } catch (e) {\n        return false;\n      }\n    }();\n\n    $.fn.triggerNative = function (eventName) {\n      var el = this[0],\n          event;\n\n      if (el.dispatchEvent) {\n        // for modern browsers & IE9+\n        if (EventIsSupported) {\n          // For modern browsers\n          event = new Event(eventName, {\n            bubbles: true\n          });\n        } else {\n          // For IE since it doesn't support Event constructor\n          event = document.createEvent('Event');\n          event.initEvent(eventName, true, false);\n        }\n\n        el.dispatchEvent(event);\n      } else if (el.fireEvent) {\n        // for IE8\n        event = document.createEventObject();\n        event.eventType = eventName;\n        el.fireEvent('on' + eventName, event);\n      } else {\n        // fall back to jQuery.trigger\n        this.trigger(eventName);\n      }\n    }; // </editor-fold>\n\n\n    function stringSearch(li, searchString, method, normalize) {\n      var stringTypes = ['display', 'subtext', 'tokens'],\n          searchSuccess = false;\n\n      for (var i = 0; i < stringTypes.length; i++) {\n        var stringType = stringTypes[i],\n            string = li[stringType];\n\n        if (string) {\n          string = string.toString(); // Strip HTML tags. This isn't perfect, but it's much faster than any other method\n\n          if (stringType === 'display') {\n            string = string.replace(/<[^>]+>/g, '');\n          }\n\n          if (normalize) string = normalizeToBase(string);\n          string = string.toUpperCase();\n\n          if (method === 'contains') {\n            searchSuccess = string.indexOf(searchString) >= 0;\n          } else {\n            searchSuccess = string.startsWith(searchString);\n          }\n\n          if (searchSuccess) break;\n        }\n      }\n\n      return searchSuccess;\n    }\n\n    function toInteger(value) {\n      return parseInt(value, 10) || 0;\n    } // Borrowed from Lodash (_.deburr)\n\n    /** Used to map Latin Unicode letters to basic Latin letters. */\n\n\n    var deburredLetters = {\n      // Latin-1 Supplement block.\n      '\\xc0': 'A',\n      '\\xc1': 'A',\n      '\\xc2': 'A',\n      '\\xc3': 'A',\n      '\\xc4': 'A',\n      '\\xc5': 'A',\n      '\\xe0': 'a',\n      '\\xe1': 'a',\n      '\\xe2': 'a',\n      '\\xe3': 'a',\n      '\\xe4': 'a',\n      '\\xe5': 'a',\n      '\\xc7': 'C',\n      '\\xe7': 'c',\n      '\\xd0': 'D',\n      '\\xf0': 'd',\n      '\\xc8': 'E',\n      '\\xc9': 'E',\n      '\\xca': 'E',\n      '\\xcb': 'E',\n      '\\xe8': 'e',\n      '\\xe9': 'e',\n      '\\xea': 'e',\n      '\\xeb': 'e',\n      '\\xcc': 'I',\n      '\\xcd': 'I',\n      '\\xce': 'I',\n      '\\xcf': 'I',\n      '\\xec': 'i',\n      '\\xed': 'i',\n      '\\xee': 'i',\n      '\\xef': 'i',\n      '\\xd1': 'N',\n      '\\xf1': 'n',\n      '\\xd2': 'O',\n      '\\xd3': 'O',\n      '\\xd4': 'O',\n      '\\xd5': 'O',\n      '\\xd6': 'O',\n      '\\xd8': 'O',\n      '\\xf2': 'o',\n      '\\xf3': 'o',\n      '\\xf4': 'o',\n      '\\xf5': 'o',\n      '\\xf6': 'o',\n      '\\xf8': 'o',\n      '\\xd9': 'U',\n      '\\xda': 'U',\n      '\\xdb': 'U',\n      '\\xdc': 'U',\n      '\\xf9': 'u',\n      '\\xfa': 'u',\n      '\\xfb': 'u',\n      '\\xfc': 'u',\n      '\\xdd': 'Y',\n      '\\xfd': 'y',\n      '\\xff': 'y',\n      '\\xc6': 'Ae',\n      '\\xe6': 'ae',\n      '\\xde': 'Th',\n      '\\xfe': 'th',\n      '\\xdf': 'ss',\n      // Latin Extended-A block.\n      \"\\u0100\": 'A',\n      \"\\u0102\": 'A',\n      \"\\u0104\": 'A',\n      \"\\u0101\": 'a',\n      \"\\u0103\": 'a',\n      \"\\u0105\": 'a',\n      \"\\u0106\": 'C',\n      \"\\u0108\": 'C',\n      \"\\u010A\": 'C',\n      \"\\u010C\": 'C',\n      \"\\u0107\": 'c',\n      \"\\u0109\": 'c',\n      \"\\u010B\": 'c',\n      \"\\u010D\": 'c',\n      \"\\u010E\": 'D',\n      \"\\u0110\": 'D',\n      \"\\u010F\": 'd',\n      \"\\u0111\": 'd',\n      \"\\u0112\": 'E',\n      \"\\u0114\": 'E',\n      \"\\u0116\": 'E',\n      \"\\u0118\": 'E',\n      \"\\u011A\": 'E',\n      \"\\u0113\": 'e',\n      \"\\u0115\": 'e',\n      \"\\u0117\": 'e',\n      \"\\u0119\": 'e',\n      \"\\u011B\": 'e',\n      \"\\u011C\": 'G',\n      \"\\u011E\": 'G',\n      \"\\u0120\": 'G',\n      \"\\u0122\": 'G',\n      \"\\u011D\": 'g',\n      \"\\u011F\": 'g',\n      \"\\u0121\": 'g',\n      \"\\u0123\": 'g',\n      \"\\u0124\": 'H',\n      \"\\u0126\": 'H',\n      \"\\u0125\": 'h',\n      \"\\u0127\": 'h',\n      \"\\u0128\": 'I',\n      \"\\u012A\": 'I',\n      \"\\u012C\": 'I',\n      \"\\u012E\": 'I',\n      \"\\u0130\": 'I',\n      \"\\u0129\": 'i',\n      \"\\u012B\": 'i',\n      \"\\u012D\": 'i',\n      \"\\u012F\": 'i',\n      \"\\u0131\": 'i',\n      \"\\u0134\": 'J',\n      \"\\u0135\": 'j',\n      \"\\u0136\": 'K',\n      \"\\u0137\": 'k',\n      \"\\u0138\": 'k',\n      \"\\u0139\": 'L',\n      \"\\u013B\": 'L',\n      \"\\u013D\": 'L',\n      \"\\u013F\": 'L',\n      \"\\u0141\": 'L',\n      \"\\u013A\": 'l',\n      \"\\u013C\": 'l',\n      \"\\u013E\": 'l',\n      \"\\u0140\": 'l',\n      \"\\u0142\": 'l',\n      \"\\u0143\": 'N',\n      \"\\u0145\": 'N',\n      \"\\u0147\": 'N',\n      \"\\u014A\": 'N',\n      \"\\u0144\": 'n',\n      \"\\u0146\": 'n',\n      \"\\u0148\": 'n',\n      \"\\u014B\": 'n',\n      \"\\u014C\": 'O',\n      \"\\u014E\": 'O',\n      \"\\u0150\": 'O',\n      \"\\u014D\": 'o',\n      \"\\u014F\": 'o',\n      \"\\u0151\": 'o',\n      \"\\u0154\": 'R',\n      \"\\u0156\": 'R',\n      \"\\u0158\": 'R',\n      \"\\u0155\": 'r',\n      \"\\u0157\": 'r',\n      \"\\u0159\": 'r',\n      \"\\u015A\": 'S',\n      \"\\u015C\": 'S',\n      \"\\u015E\": 'S',\n      \"\\u0160\": 'S',\n      \"\\u015B\": 's',\n      \"\\u015D\": 's',\n      \"\\u015F\": 's',\n      \"\\u0161\": 's',\n      \"\\u0162\": 'T',\n      \"\\u0164\": 'T',\n      \"\\u0166\": 'T',\n      \"\\u0163\": 't',\n      \"\\u0165\": 't',\n      \"\\u0167\": 't',\n      \"\\u0168\": 'U',\n      \"\\u016A\": 'U',\n      \"\\u016C\": 'U',\n      \"\\u016E\": 'U',\n      \"\\u0170\": 'U',\n      \"\\u0172\": 'U',\n      \"\\u0169\": 'u',\n      \"\\u016B\": 'u',\n      \"\\u016D\": 'u',\n      \"\\u016F\": 'u',\n      \"\\u0171\": 'u',\n      \"\\u0173\": 'u',\n      \"\\u0174\": 'W',\n      \"\\u0175\": 'w',\n      \"\\u0176\": 'Y',\n      \"\\u0177\": 'y',\n      \"\\u0178\": 'Y',\n      \"\\u0179\": 'Z',\n      \"\\u017B\": 'Z',\n      \"\\u017D\": 'Z',\n      \"\\u017A\": 'z',\n      \"\\u017C\": 'z',\n      \"\\u017E\": 'z',\n      \"\\u0132\": 'IJ',\n      \"\\u0133\": 'ij',\n      \"\\u0152\": 'Oe',\n      \"\\u0153\": 'oe',\n      \"\\u0149\": \"'n\",\n      \"\\u017F\": 's'\n    };\n    /** Used to match Latin Unicode letters (excluding mathematical operators). */\n\n    var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n    /** Used to compose unicode character classes. */\n\n    var rsComboMarksRange = \"\\\\u0300-\\\\u036f\",\n        reComboHalfMarksRange = \"\\\\ufe20-\\\\ufe2f\",\n        rsComboSymbolsRange = \"\\\\u20d0-\\\\u20ff\",\n        rsComboMarksExtendedRange = \"\\\\u1ab0-\\\\u1aff\",\n        rsComboMarksSupplementRange = \"\\\\u1dc0-\\\\u1dff\",\n        rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange;\n    /** Used to compose unicode capture groups. */\n\n    var rsCombo = '[' + rsComboRange + ']';\n    /**\r\n     * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\r\n     * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\r\n     */\n\n    var reComboMark = RegExp(rsCombo, 'g');\n\n    function deburrLetter(key) {\n      return deburredLetters[key];\n    }\n\n    ;\n\n    function normalizeToBase(string) {\n      string = string.toString();\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    } // List of HTML entities for escaping.\n\n\n    var escapeMap = {\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      \"'\": '&#x27;',\n      '`': '&#x60;'\n    }; // Functions for escaping and unescaping strings to/from HTML interpolation.\n\n    var createEscaper = function createEscaper(map) {\n      var escaper = function escaper(match) {\n        return map[match];\n      }; // Regexes for identifying a key that needs to be escaped.\n\n\n      var source = '(?:' + Object.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\n    var htmlEscape = createEscaper(escapeMap);\n    /**\r\n     * ------------------------------------------------------------------------\r\n     * Constants\r\n     * ------------------------------------------------------------------------\r\n     */\n\n    var keyCodeMap = {\n      32: ' ',\n      48: '0',\n      49: '1',\n      50: '2',\n      51: '3',\n      52: '4',\n      53: '5',\n      54: '6',\n      55: '7',\n      56: '8',\n      57: '9',\n      59: ';',\n      65: 'A',\n      66: 'B',\n      67: 'C',\n      68: 'D',\n      69: 'E',\n      70: 'F',\n      71: 'G',\n      72: 'H',\n      73: 'I',\n      74: 'J',\n      75: 'K',\n      76: 'L',\n      77: 'M',\n      78: 'N',\n      79: 'O',\n      80: 'P',\n      81: 'Q',\n      82: 'R',\n      83: 'S',\n      84: 'T',\n      85: 'U',\n      86: 'V',\n      87: 'W',\n      88: 'X',\n      89: 'Y',\n      90: 'Z',\n      96: '0',\n      97: '1',\n      98: '2',\n      99: '3',\n      100: '4',\n      101: '5',\n      102: '6',\n      103: '7',\n      104: '8',\n      105: '9'\n    };\n    var keyCodes = {\n      ESCAPE: 27,\n      // KeyboardEvent.which value for Escape (Esc) key\n      ENTER: 13,\n      // KeyboardEvent.which value for Enter key\n      SPACE: 32,\n      // KeyboardEvent.which value for space key\n      TAB: 9,\n      // KeyboardEvent.which value for tab key\n      ARROW_UP: 38,\n      // KeyboardEvent.which value for up arrow key\n      ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key\n\n    };\n    var version = {\n      success: false,\n      major: '3'\n    };\n\n    try {\n      version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\n      version.major = version.full[0];\n      version.success = true;\n    } catch (err) {// do nothing\n    }\n\n    var selectId = 0;\n    var EVENT_KEY = '.bs.select';\n    var classNames = {\n      DISABLED: 'disabled',\n      DIVIDER: 'divider',\n      SHOW: 'open',\n      DROPUP: 'dropup',\n      MENU: 'dropdown-menu',\n      MENURIGHT: 'dropdown-menu-right',\n      MENULEFT: 'dropdown-menu-left',\n      // to-do: replace with more advanced template/customization options\n      BUTTONCLASS: 'btn-default',\n      POPOVERHEADER: 'popover-title',\n      ICONBASE: 'glyphicon',\n      TICKICON: 'glyphicon-ok'\n    };\n    var Selector = {\n      MENU: '.' + classNames.MENU\n    };\n    var elementTemplates = {\n      div: document.createElement('div'),\n      span: document.createElement('span'),\n      i: document.createElement('i'),\n      subtext: document.createElement('small'),\n      a: document.createElement('a'),\n      li: document.createElement('li'),\n      whitespace: document.createTextNode(\"\\xA0\"),\n      fragment: document.createDocumentFragment()\n    };\n    elementTemplates.noResults = elementTemplates.li.cloneNode(false);\n    elementTemplates.noResults.className = 'no-results';\n    elementTemplates.a.setAttribute('role', 'option');\n    elementTemplates.a.className = 'dropdown-item';\n    elementTemplates.subtext.className = 'text-muted';\n    elementTemplates.text = elementTemplates.span.cloneNode(false);\n    elementTemplates.text.className = 'text';\n    elementTemplates.checkMark = elementTemplates.span.cloneNode(false);\n    var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN);\n    var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE);\n    var generateOption = {\n      li: function li(content, classes, optgroup) {\n        var li = elementTemplates.li.cloneNode(false);\n\n        if (content) {\n          if (content.nodeType === 1 || content.nodeType === 11) {\n            li.appendChild(content);\n          } else {\n            li.innerHTML = content;\n          }\n        }\n\n        if (typeof classes !== 'undefined' && classes !== '') li.className = classes;\n        if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup);\n        return li;\n      },\n      a: function a(text, classes, inline) {\n        var a = elementTemplates.a.cloneNode(true);\n\n        if (text) {\n          if (text.nodeType === 11) {\n            a.appendChild(text);\n          } else {\n            a.insertAdjacentHTML('beforeend', text);\n          }\n        }\n\n        if (typeof classes !== 'undefined' && classes !== '') a.classList.add.apply(a.classList, classes.split(/\\s+/));\n        if (inline) a.setAttribute('style', inline);\n        return a;\n      },\n      text: function text(options, useFragment) {\n        var textElement = elementTemplates.text.cloneNode(false),\n            subtextElement,\n            iconElement;\n\n        if (options.content) {\n          textElement.innerHTML = options.content;\n        } else {\n          textElement.textContent = options.text;\n\n          if (options.icon) {\n            var whitespace = elementTemplates.whitespace.cloneNode(false); // need to use <i> for icons in the button to prevent a breaking change\n            // note: switch to span in next major release\n\n            iconElement = (useFragment === true ? elementTemplates.i : elementTemplates.span).cloneNode(false);\n            iconElement.className = this.options.iconBase + ' ' + options.icon;\n            elementTemplates.fragment.appendChild(iconElement);\n            elementTemplates.fragment.appendChild(whitespace);\n          }\n\n          if (options.subtext) {\n            subtextElement = elementTemplates.subtext.cloneNode(false);\n            subtextElement.textContent = options.subtext;\n            textElement.appendChild(subtextElement);\n          }\n        }\n\n        if (useFragment === true) {\n          while (textElement.childNodes.length > 0) {\n            elementTemplates.fragment.appendChild(textElement.childNodes[0]);\n          }\n        } else {\n          elementTemplates.fragment.appendChild(textElement);\n        }\n\n        return elementTemplates.fragment;\n      },\n      label: function label(options) {\n        var textElement = elementTemplates.text.cloneNode(false),\n            subtextElement,\n            iconElement;\n        textElement.innerHTML = options.display;\n\n        if (options.icon) {\n          var whitespace = elementTemplates.whitespace.cloneNode(false);\n          iconElement = elementTemplates.span.cloneNode(false);\n          iconElement.className = this.options.iconBase + ' ' + options.icon;\n          elementTemplates.fragment.appendChild(iconElement);\n          elementTemplates.fragment.appendChild(whitespace);\n        }\n\n        if (options.subtext) {\n          subtextElement = elementTemplates.subtext.cloneNode(false);\n          subtextElement.textContent = options.subtext;\n          textElement.appendChild(subtextElement);\n        }\n\n        elementTemplates.fragment.appendChild(textElement);\n        return elementTemplates.fragment;\n      }\n    };\n\n    function showNoResults(searchMatch, searchValue) {\n      if (!searchMatch.length) {\n        elementTemplates.noResults.innerHTML = this.options.noneResultsText.replace('{0}', '\"' + htmlEscape(searchValue) + '\"');\n        this.$menuInner[0].firstChild.appendChild(elementTemplates.noResults);\n      }\n    }\n\n    var Selectpicker = function Selectpicker(element, options) {\n      var that = this; // bootstrap-select has been initialized - revert valHooks.select.set back to its original function\n\n      if (!valHooks.useDefault) {\n        $.valHooks.select.set = valHooks._set;\n        valHooks.useDefault = true;\n      }\n\n      this.$element = $(element);\n      this.$newElement = null;\n      this.$button = null;\n      this.$menu = null;\n      this.options = options;\n      this.selectpicker = {\n        main: {},\n        search: {},\n        current: {},\n        // current changes if a search is in progress\n        view: {},\n        isSearching: false,\n        keydown: {\n          keyHistory: '',\n          resetKeyHistory: {\n            start: function start() {\n              return setTimeout(function () {\n                that.selectpicker.keydown.keyHistory = '';\n              }, 800);\n            }\n          }\n        }\n      };\n      this.sizeInfo = {}; // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a\n      // data-attribute)\n\n      if (this.options.title === null) {\n        this.options.title = this.$element.attr('title');\n      } // Format window padding\n\n\n      var winPad = this.options.windowPadding;\n\n      if (typeof winPad === 'number') {\n        this.options.windowPadding = [winPad, winPad, winPad, winPad];\n      } // Expose public methods\n\n\n      this.val = Selectpicker.prototype.val;\n      this.render = Selectpicker.prototype.render;\n      this.refresh = Selectpicker.prototype.refresh;\n      this.setStyle = Selectpicker.prototype.setStyle;\n      this.selectAll = Selectpicker.prototype.selectAll;\n      this.deselectAll = Selectpicker.prototype.deselectAll;\n      this.destroy = Selectpicker.prototype.destroy;\n      this.remove = Selectpicker.prototype.remove;\n      this.show = Selectpicker.prototype.show;\n      this.hide = Selectpicker.prototype.hide;\n      this.init();\n    };\n\n    Selectpicker.VERSION = '1.13.18'; // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.\n\n    Selectpicker.DEFAULTS = {\n      noneSelectedText: 'Nothing selected',\n      noneResultsText: 'No results matched {0}',\n      countSelectedText: function countSelectedText(numSelected, numTotal) {\n        return numSelected == 1 ? '{0} item selected' : '{0} items selected';\n      },\n      maxOptionsText: function maxOptionsText(numAll, numGroup) {\n        return [numAll == 1 ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', numGroup == 1 ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'];\n      },\n      selectAllText: 'Select All',\n      deselectAllText: 'Deselect All',\n      doneButton: false,\n      doneButtonText: 'Close',\n      multipleSeparator: ', ',\n      styleBase: 'btn',\n      style: classNames.BUTTONCLASS,\n      size: 'auto',\n      title: null,\n      selectedTextFormat: 'values',\n      width: false,\n      container: false,\n      hideDisabled: false,\n      showSubtext: false,\n      showIcon: true,\n      showContent: true,\n      dropupAuto: true,\n      header: false,\n      liveSearch: false,\n      liveSearchPlaceholder: null,\n      liveSearchNormalize: false,\n      liveSearchStyle: 'contains',\n      actionsBox: false,\n      iconBase: classNames.ICONBASE,\n      tickIcon: classNames.TICKICON,\n      showTick: false,\n      template: {\n        caret: '<span class=\"caret\"></span>'\n      },\n      maxOptions: false,\n      mobile: false,\n      selectOnTab: false,\n      dropdownAlignRight: false,\n      windowPadding: 0,\n      virtualScroll: 600,\n      display: false,\n      sanitize: true,\n      sanitizeFn: null,\n      whiteList: DefaultWhitelist\n    };\n    Selectpicker.prototype = {\n      constructor: Selectpicker,\n      init: function init() {\n        var that = this,\n            id = this.$element.attr('id'),\n            element = this.$element[0],\n            form = element.form;\n        selectId++;\n        this.selectId = 'bs-select-' + selectId;\n        element.classList.add('bs-select-hidden');\n        this.multiple = this.$element.prop('multiple');\n        this.autofocus = this.$element.prop('autofocus');\n\n        if (element.classList.contains('show-tick')) {\n          this.options.showTick = true;\n        }\n\n        this.$newElement = this.createDropdown();\n        this.buildData();\n        this.$element.after(this.$newElement).prependTo(this.$newElement); // ensure select is associated with form element if it got unlinked after moving it inside newElement\n\n        if (form && element.form === null) {\n          if (!form.id) form.id = 'form-' + this.selectId;\n          element.setAttribute('form', form.id);\n        }\n\n        this.$button = this.$newElement.children('button');\n        this.$menu = this.$newElement.children(Selector.MENU);\n        this.$menuInner = this.$menu.children('.inner');\n        this.$searchbox = this.$menu.find('input');\n        element.classList.remove('bs-select-hidden');\n        if (this.options.dropdownAlignRight === true) this.$menu[0].classList.add(classNames.MENURIGHT);\n\n        if (typeof id !== 'undefined') {\n          this.$button.attr('data-id', id);\n        }\n\n        this.checkDisabled();\n        this.clickListener();\n\n        if (this.options.liveSearch) {\n          this.liveSearchListener();\n          this.focusedParent = this.$searchbox[0];\n        } else {\n          this.focusedParent = this.$menuInner[0];\n        }\n\n        this.setStyle();\n        this.render();\n        this.setWidth();\n\n        if (this.options.container) {\n          this.selectPosition();\n        } else {\n          this.$element.on('hide' + EVENT_KEY, function () {\n            if (that.isVirtual()) {\n              // empty menu on close\n              var menuInner = that.$menuInner[0],\n                  emptyMenu = menuInner.firstChild.cloneNode(false); // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = ''\n\n              menuInner.replaceChild(emptyMenu, menuInner.firstChild);\n              menuInner.scrollTop = 0;\n            }\n          });\n        }\n\n        this.$menu.data('this', this);\n        this.$newElement.data('this', this);\n        if (this.options.mobile) this.mobile();\n        this.$newElement.on({\n          'hide.bs.dropdown': function hideBsDropdown(e) {\n            that.$element.trigger('hide' + EVENT_KEY, e);\n          },\n          'hidden.bs.dropdown': function hiddenBsDropdown(e) {\n            that.$element.trigger('hidden' + EVENT_KEY, e);\n          },\n          'show.bs.dropdown': function showBsDropdown(e) {\n            that.$element.trigger('show' + EVENT_KEY, e);\n          },\n          'shown.bs.dropdown': function shownBsDropdown(e) {\n            that.$element.trigger('shown' + EVENT_KEY, e);\n          }\n        });\n\n        if (element.hasAttribute('required')) {\n          this.$element.on('invalid' + EVENT_KEY, function () {\n            that.$button[0].classList.add('bs-invalid');\n            that.$element.on('shown' + EVENT_KEY + '.invalid', function () {\n              that.$element.val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened\n              .off('shown' + EVENT_KEY + '.invalid');\n            }).on('rendered' + EVENT_KEY, function () {\n              // if select is no longer invalid, remove the bs-invalid class\n              if (this.validity.valid) that.$button[0].classList.remove('bs-invalid');\n              that.$element.off('rendered' + EVENT_KEY);\n            });\n            that.$button.on('blur' + EVENT_KEY, function () {\n              that.$element.trigger('focus').trigger('blur');\n              that.$button.off('blur' + EVENT_KEY);\n            });\n          });\n        }\n\n        setTimeout(function () {\n          that.buildList();\n          that.$element.trigger('loaded' + EVENT_KEY);\n        });\n      },\n      createDropdown: function createDropdown() {\n        // Options\n        // If we are multiple or showTick option is set, then add the show-tick class\n        var showTick = this.multiple || this.options.showTick ? ' show-tick' : '',\n            multiselectable = this.multiple ? ' aria-multiselectable=\"true\"' : '',\n            inputGroup = '',\n            autofocus = this.autofocus ? ' autofocus' : '';\n\n        if (version.major < 4 && this.$element.parent().hasClass('input-group')) {\n          inputGroup = ' input-group-btn';\n        } // Elements\n\n\n        var drop,\n            header = '',\n            searchbox = '',\n            actionsbox = '',\n            donebutton = '';\n\n        if (this.options.header) {\n          header = '<div class=\"' + classNames.POPOVERHEADER + '\">' + '<button type=\"button\" class=\"close\" aria-hidden=\"true\">&times;</button>' + this.options.header + '</div>';\n        }\n\n        if (this.options.liveSearch) {\n          searchbox = '<div class=\"bs-searchbox\">' + '<input type=\"search\" class=\"form-control\" autocomplete=\"off\"' + (this.options.liveSearchPlaceholder === null ? '' : ' placeholder=\"' + htmlEscape(this.options.liveSearchPlaceholder) + '\"') + ' role=\"combobox\" aria-label=\"Search\" aria-controls=\"' + this.selectId + '\" aria-autocomplete=\"list\">' + '</div>';\n        }\n\n        if (this.multiple && this.options.actionsBox) {\n          actionsbox = '<div class=\"bs-actionsbox\">' + '<div class=\"btn-group btn-group-sm btn-block\">' + '<button type=\"button\" class=\"actions-btn bs-select-all btn ' + classNames.BUTTONCLASS + '\">' + this.options.selectAllText + '</button>' + '<button type=\"button\" class=\"actions-btn bs-deselect-all btn ' + classNames.BUTTONCLASS + '\">' + this.options.deselectAllText + '</button>' + '</div>' + '</div>';\n        }\n\n        if (this.multiple && this.options.doneButton) {\n          donebutton = '<div class=\"bs-donebutton\">' + '<div class=\"btn-group btn-block\">' + '<button type=\"button\" class=\"btn btn-sm ' + classNames.BUTTONCLASS + '\">' + this.options.doneButtonText + '</button>' + '</div>' + '</div>';\n        }\n\n        drop = '<div class=\"dropdown bootstrap-select' + showTick + inputGroup + '\">' + '<button type=\"button\" tabindex=\"-1\" class=\"' + this.options.styleBase + ' dropdown-toggle\" ' + (this.options.display === 'static' ? 'data-display=\"static\"' : '') + 'data-toggle=\"dropdown\"' + autofocus + ' role=\"combobox\" aria-owns=\"' + this.selectId + '\" aria-haspopup=\"listbox\" aria-expanded=\"false\">' + '<div class=\"filter-option\">' + '<div class=\"filter-option-inner\">' + '<div class=\"filter-option-inner-inner\"></div>' + '</div> ' + '</div>' + (version.major === '4' ? '' : '<span class=\"bs-caret\">' + this.options.template.caret + '</span>') + '</button>' + '<div class=\"' + classNames.MENU + ' ' + (version.major === '4' ? '' : classNames.SHOW) + '\">' + header + searchbox + actionsbox + '<div class=\"inner ' + classNames.SHOW + '\" role=\"listbox\" id=\"' + this.selectId + '\" tabindex=\"-1\" ' + multiselectable + '>' + '<ul class=\"' + classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '') + '\" role=\"presentation\">' + '</ul>' + '</div>' + donebutton + '</div>' + '</div>';\n        return $(drop);\n      },\n      setPositionData: function setPositionData() {\n        this.selectpicker.view.canHighlight = [];\n        this.selectpicker.view.size = 0;\n        this.selectpicker.view.firstHighlightIndex = false;\n\n        for (var i = 0; i < this.selectpicker.current.data.length; i++) {\n          var li = this.selectpicker.current.data[i],\n              canHighlight = true;\n\n          if (li.type === 'divider') {\n            canHighlight = false;\n            li.height = this.sizeInfo.dividerHeight;\n          } else if (li.type === 'optgroup-label') {\n            canHighlight = false;\n            li.height = this.sizeInfo.dropdownHeaderHeight;\n          } else {\n            li.height = this.sizeInfo.liHeight;\n          }\n\n          if (li.disabled) canHighlight = false;\n          this.selectpicker.view.canHighlight.push(canHighlight);\n\n          if (canHighlight) {\n            this.selectpicker.view.size++;\n            li.posinset = this.selectpicker.view.size;\n            if (this.selectpicker.view.firstHighlightIndex === false) this.selectpicker.view.firstHighlightIndex = i;\n          }\n\n          li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height;\n        }\n      },\n      isVirtual: function isVirtual() {\n        return this.options.virtualScroll !== false && this.selectpicker.main.elements.length >= this.options.virtualScroll || this.options.virtualScroll === true;\n      },\n      createView: function createView(isSearching, setSize, refresh) {\n        var that = this,\n            scrollTop = 0,\n            active = [],\n            selected,\n            prevActive;\n        this.selectpicker.isSearching = isSearching;\n        this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main;\n        this.setPositionData();\n\n        if (setSize) {\n          if (refresh) {\n            scrollTop = this.$menuInner[0].scrollTop;\n          } else if (!that.multiple) {\n            var element = that.$element[0],\n                selectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\n\n            if (typeof selectedIndex === 'number' && that.options.size !== false) {\n              var selectedData = that.selectpicker.main.data[selectedIndex],\n                  position = selectedData && selectedData.position;\n\n              if (position) {\n                scrollTop = position - (that.sizeInfo.menuInnerHeight + that.sizeInfo.liHeight) / 2;\n              }\n            }\n          }\n        }\n\n        scroll(scrollTop, true);\n        this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) {\n          if (!that.noScroll) scroll(this.scrollTop, updateValue);\n          that.noScroll = false;\n        });\n\n        function scroll(scrollTop, init) {\n          var size = that.selectpicker.current.elements.length,\n              chunks = [],\n              chunkSize,\n              chunkCount,\n              firstChunk,\n              lastChunk,\n              currentChunk,\n              prevPositions,\n              positionIsDifferent,\n              previousElements,\n              menuIsDifferent = true,\n              isVirtual = that.isVirtual();\n          that.selectpicker.view.scrollTop = scrollTop;\n          chunkSize = Math.ceil(that.sizeInfo.menuInnerHeight / that.sizeInfo.liHeight * 1.5); // number of options in a chunk\n\n          chunkCount = Math.round(size / chunkSize) || 1; // number of chunks\n\n          for (var i = 0; i < chunkCount; i++) {\n            var endOfChunk = (i + 1) * chunkSize;\n\n            if (i === chunkCount - 1) {\n              endOfChunk = size;\n            }\n\n            chunks[i] = [i * chunkSize + (!i ? 0 : 1), endOfChunk];\n            if (!size) break;\n\n            if (currentChunk === undefined && scrollTop - 1 <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) {\n              currentChunk = i;\n            }\n          }\n\n          if (currentChunk === undefined) currentChunk = 0;\n          prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1]; // always display previous, current, and next chunks\n\n          firstChunk = Math.max(0, currentChunk - 1);\n          lastChunk = Math.min(chunkCount - 1, currentChunk + 1);\n          that.selectpicker.view.position0 = isVirtual === false ? 0 : Math.max(0, chunks[firstChunk][0]) || 0;\n          that.selectpicker.view.position1 = isVirtual === false ? size : Math.min(size, chunks[lastChunk][1]) || 0;\n          positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1;\n\n          if (that.activeIndex !== undefined) {\n            prevActive = that.selectpicker.main.elements[that.prevActiveIndex];\n            active = that.selectpicker.main.elements[that.activeIndex];\n            selected = that.selectpicker.main.elements[that.selectedIndex];\n\n            if (init) {\n              if (that.activeIndex !== that.selectedIndex) {\n                that.defocusItem(active);\n              }\n\n              that.activeIndex = undefined;\n            }\n\n            if (that.activeIndex && that.activeIndex !== that.selectedIndex) {\n              that.defocusItem(selected);\n            }\n          }\n\n          if (that.prevActiveIndex !== undefined && that.prevActiveIndex !== that.activeIndex && that.prevActiveIndex !== that.selectedIndex) {\n            that.defocusItem(prevActive);\n          }\n\n          if (init || positionIsDifferent) {\n            previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : [];\n\n            if (isVirtual === false) {\n              that.selectpicker.view.visibleElements = that.selectpicker.current.elements;\n            } else {\n              that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1);\n            }\n\n            that.setOptionStatus(); // if searching, check to make sure the list has actually been updated before updating DOM\n            // this prevents unnecessary repaints\n\n            if (isSearching || isVirtual === false && init) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements); // if virtual scroll is disabled and not searching,\n            // menu should never need to be updated more than once\n\n            if ((init || isVirtual === true) && menuIsDifferent) {\n              var menuInner = that.$menuInner[0],\n                  menuFragment = document.createDocumentFragment(),\n                  emptyMenu = menuInner.firstChild.cloneNode(false),\n                  marginTop,\n                  marginBottom,\n                  elements = that.selectpicker.view.visibleElements,\n                  toSanitize = []; // replace the existing UL with an empty one - this is faster than $.empty()\n\n              menuInner.replaceChild(emptyMenu, menuInner.firstChild);\n\n              for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) {\n                var element = elements[i],\n                    elText,\n                    elementData;\n\n                if (that.options.sanitize) {\n                  elText = element.lastChild;\n\n                  if (elText) {\n                    elementData = that.selectpicker.current.data[i + that.selectpicker.view.position0];\n\n                    if (elementData && elementData.content && !elementData.sanitized) {\n                      toSanitize.push(elText);\n                      elementData.sanitized = true;\n                    }\n                  }\n                }\n\n                menuFragment.appendChild(element);\n              }\n\n              if (that.options.sanitize && toSanitize.length) {\n                sanitizeHtml(toSanitize, that.options.whiteList, that.options.sanitizeFn);\n              }\n\n              if (isVirtual === true) {\n                marginTop = that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position;\n                marginBottom = that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position;\n                menuInner.firstChild.style.marginTop = marginTop + 'px';\n                menuInner.firstChild.style.marginBottom = marginBottom + 'px';\n              } else {\n                menuInner.firstChild.style.marginTop = 0;\n                menuInner.firstChild.style.marginBottom = 0;\n              }\n\n              menuInner.firstChild.appendChild(menuFragment); // if an option is encountered that is wider than the current menu width, update the menu width accordingly\n              // switch to ResizeObserver with increased browser support\n\n              if (isVirtual === true && that.sizeInfo.hasScrollBar) {\n                var menuInnerInnerWidth = menuInner.firstChild.offsetWidth;\n\n                if (init && menuInnerInnerWidth < that.sizeInfo.menuInnerInnerWidth && that.sizeInfo.totalMenuWidth > that.sizeInfo.selectWidth) {\n                  menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\n                } else if (menuInnerInnerWidth > that.sizeInfo.menuInnerInnerWidth) {\n                  // set to 0 to get actual width of menu\n                  that.$menu[0].style.minWidth = 0;\n                  var actualMenuWidth = menuInner.firstChild.offsetWidth;\n\n                  if (actualMenuWidth > that.sizeInfo.menuInnerInnerWidth) {\n                    that.sizeInfo.menuInnerInnerWidth = actualMenuWidth;\n                    menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\n                  } // reset to default CSS styling\n\n\n                  that.$menu[0].style.minWidth = '';\n                }\n              }\n            }\n          }\n\n          that.prevActiveIndex = that.activeIndex;\n\n          if (!that.options.liveSearch) {\n            that.$menuInner.trigger('focus');\n          } else if (isSearching && init) {\n            var index = 0,\n                newActive;\n\n            if (!that.selectpicker.view.canHighlight[index]) {\n              index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true);\n            }\n\n            newActive = that.selectpicker.view.visibleElements[index];\n            that.defocusItem(that.selectpicker.view.currentActive);\n            that.activeIndex = (that.selectpicker.current.data[index] || {}).index;\n            that.focusItem(newActive);\n          }\n        }\n\n        $(window).off('resize' + EVENT_KEY + '.' + this.selectId + '.createView').on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () {\n          var isActive = that.$newElement.hasClass(classNames.SHOW);\n          if (isActive) scroll(that.$menuInner[0].scrollTop);\n        });\n      },\n      focusItem: function focusItem(li, liData, noStyle) {\n        if (li) {\n          liData = liData || this.selectpicker.main.data[this.activeIndex];\n          var a = li.firstChild;\n\n          if (a) {\n            a.setAttribute('aria-setsize', this.selectpicker.view.size);\n            a.setAttribute('aria-posinset', liData.posinset);\n\n            if (noStyle !== true) {\n              this.focusedParent.setAttribute('aria-activedescendant', a.id);\n              li.classList.add('active');\n              a.classList.add('active');\n            }\n          }\n        }\n      },\n      defocusItem: function defocusItem(li) {\n        if (li) {\n          li.classList.remove('active');\n          if (li.firstChild) li.firstChild.classList.remove('active');\n        }\n      },\n      setPlaceholder: function setPlaceholder() {\n        var that = this,\n            updateIndex = false;\n\n        if (this.options.title && !this.multiple) {\n          if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option'); // this option doesn't create a new <li> element, but does add a new option at the start,\n          // so startIndex should increase to prevent having to check every option for the bs-title-option class\n\n          updateIndex = true;\n          var element = this.$element[0],\n              selectTitleOption = false,\n              titleNotAppended = !this.selectpicker.view.titleOption.parentNode,\n              selectedIndex = element.selectedIndex,\n              selectedOption = element.options[selectedIndex],\n              navigation = window.performance && window.performance.getEntriesByType('navigation'),\n              // Safari doesn't support getEntriesByType('navigation') - fall back to performance.navigation\n          isNotBackForward = navigation && navigation.length ? navigation[0].type !== 'back_forward' : window.performance.navigation.type !== 2;\n\n          if (titleNotAppended) {\n            // Use native JS to prepend option (faster)\n            this.selectpicker.view.titleOption.className = 'bs-title-option';\n            this.selectpicker.view.titleOption.value = ''; // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.\n            // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,\n            // if so, the select will have the data-selected attribute\n\n            selectTitleOption = !selectedOption || selectedIndex === 0 && selectedOption.defaultSelected === false && this.$element.data('selected') === undefined;\n          }\n\n          if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) {\n            element.insertBefore(this.selectpicker.view.titleOption, element.firstChild);\n          } // Set selected *after* appending to select,\n          // otherwise the option doesn't get selected in IE\n          // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11\n\n\n          if (selectTitleOption && isNotBackForward) {\n            element.selectedIndex = 0;\n          } else if (document.readyState !== 'complete') {\n            // if navigation type is back_forward, there's a chance the select will have its value set by BFCache\n            // wait for that value to be set, then run render again\n            window.addEventListener('pageshow', function () {\n              if (that.selectpicker.view.displayedValue !== element.value) that.render();\n            });\n          }\n        }\n\n        return updateIndex;\n      },\n      buildData: function buildData() {\n        var optionSelector = ':not([hidden]):not([data-hidden=\"true\"])',\n            mainData = [],\n            optID = 0,\n            startIndex = this.setPlaceholder() ? 1 : 0; // append the titleOption if necessary and skip the first option in the loop\n\n        if (this.options.hideDisabled) optionSelector += ':not(:disabled)';\n        var selectOptions = this.$element[0].querySelectorAll('select > *' + optionSelector);\n\n        function addDivider(config) {\n          var previousData = mainData[mainData.length - 1]; // ensure optgroup doesn't create back-to-back dividers\n\n          if (previousData && previousData.type === 'divider' && (previousData.optID || config.optID)) {\n            return;\n          }\n\n          config = config || {};\n          config.type = 'divider';\n          mainData.push(config);\n        }\n\n        function addOption(option, config) {\n          config = config || {};\n          config.divider = option.getAttribute('data-divider') === 'true';\n\n          if (config.divider) {\n            addDivider({\n              optID: config.optID\n            });\n          } else {\n            var liIndex = mainData.length,\n                cssText = option.style.cssText,\n                inlineStyle = cssText ? htmlEscape(cssText) : '',\n                optionClass = (option.className || '') + (config.optgroupClass || '');\n            if (config.optID) optionClass = 'opt ' + optionClass;\n            config.optionClass = optionClass.trim();\n            config.inlineStyle = inlineStyle;\n            config.text = option.textContent;\n            config.content = option.getAttribute('data-content');\n            config.tokens = option.getAttribute('data-tokens');\n            config.subtext = option.getAttribute('data-subtext');\n            config.icon = option.getAttribute('data-icon');\n            option.liIndex = liIndex;\n            config.display = config.content || config.text;\n            config.type = 'option';\n            config.index = liIndex;\n            config.option = option;\n            config.selected = !!option.selected;\n            config.disabled = config.disabled || !!option.disabled;\n            mainData.push(config);\n          }\n        }\n\n        function addOptgroup(index, selectOptions) {\n          var optgroup = selectOptions[index],\n              // skip placeholder option\n          previous = index - 1 < startIndex ? false : selectOptions[index - 1],\n              next = selectOptions[index + 1],\n              options = optgroup.querySelectorAll('option' + optionSelector);\n          if (!options.length) return;\n          var config = {\n            display: htmlEscape(optgroup.label),\n            subtext: optgroup.getAttribute('data-subtext'),\n            icon: optgroup.getAttribute('data-icon'),\n            type: 'optgroup-label',\n            optgroupClass: ' ' + (optgroup.className || '')\n          },\n              headerIndex,\n              lastIndex;\n          optID++;\n\n          if (previous) {\n            addDivider({\n              optID: optID\n            });\n          }\n\n          config.optID = optID;\n          mainData.push(config);\n\n          for (var j = 0, len = options.length; j < len; j++) {\n            var option = options[j];\n\n            if (j === 0) {\n              headerIndex = mainData.length - 1;\n              lastIndex = headerIndex + len;\n            }\n\n            addOption(option, {\n              headerIndex: headerIndex,\n              lastIndex: lastIndex,\n              optID: config.optID,\n              optgroupClass: config.optgroupClass,\n              disabled: optgroup.disabled\n            });\n          }\n\n          if (next) {\n            addDivider({\n              optID: optID\n            });\n          }\n        }\n\n        for (var len = selectOptions.length, i = startIndex; i < len; i++) {\n          var item = selectOptions[i];\n\n          if (item.tagName !== 'OPTGROUP') {\n            addOption(item, {});\n          } else {\n            addOptgroup(i, selectOptions);\n          }\n        }\n\n        this.selectpicker.main.data = this.selectpicker.current.data = mainData;\n      },\n      buildList: function buildList() {\n        var that = this,\n            selectData = this.selectpicker.main.data,\n            mainElements = [],\n            widestOptionLength = 0;\n\n        if ((that.options.showTick || that.multiple) && !elementTemplates.checkMark.parentNode) {\n          elementTemplates.checkMark.className = this.options.iconBase + ' ' + that.options.tickIcon + ' check-mark';\n          elementTemplates.a.appendChild(elementTemplates.checkMark);\n        }\n\n        function buildElement(item) {\n          var liElement,\n              combinedLength = 0;\n\n          switch (item.type) {\n            case 'divider':\n              liElement = generateOption.li(false, classNames.DIVIDER, item.optID ? item.optID + 'div' : undefined);\n              break;\n\n            case 'option':\n              liElement = generateOption.li(generateOption.a(generateOption.text.call(that, item), item.optionClass, item.inlineStyle), '', item.optID);\n\n              if (liElement.firstChild) {\n                liElement.firstChild.id = that.selectId + '-' + item.index;\n              }\n\n              break;\n\n            case 'optgroup-label':\n              liElement = generateOption.li(generateOption.label.call(that, item), 'dropdown-header' + item.optgroupClass, item.optID);\n              break;\n          }\n\n          item.element = liElement;\n          mainElements.push(liElement); // count the number of characters in the option - not perfect, but should work in most cases\n\n          if (item.display) combinedLength += item.display.length;\n          if (item.subtext) combinedLength += item.subtext.length; // if there is an icon, ensure this option's width is checked\n\n          if (item.icon) combinedLength += 1;\n\n          if (combinedLength > widestOptionLength) {\n            widestOptionLength = combinedLength; // guess which option is the widest\n            // use this when calculating menu width\n            // not perfect, but it's fast, and the width will be updating accordingly when scrolling\n\n            that.selectpicker.view.widestOption = mainElements[mainElements.length - 1];\n          }\n        }\n\n        for (var len = selectData.length, i = 0; i < len; i++) {\n          var item = selectData[i];\n          buildElement(item);\n        }\n\n        this.selectpicker.main.elements = this.selectpicker.current.elements = mainElements;\n      },\n      findLis: function findLis() {\n        return this.$menuInner.find('.inner > li');\n      },\n      render: function render() {\n        var that = this,\n            element = this.$element[0],\n            // ensure titleOption is appended and selected (if necessary) before getting selectedOptions\n        placeholderSelected = this.setPlaceholder() && element.selectedIndex === 0,\n            selectedOptions = getSelectedOptions(element, this.options.hideDisabled),\n            selectedCount = selectedOptions.length,\n            button = this.$button[0],\n            buttonInner = button.querySelector('.filter-option-inner-inner'),\n            multipleSeparator = document.createTextNode(this.options.multipleSeparator),\n            titleFragment = elementTemplates.fragment.cloneNode(false),\n            showCount,\n            countMax,\n            hasContent = false;\n        button.classList.toggle('bs-placeholder', that.multiple ? !selectedCount : !getSelectValues(element, selectedOptions));\n\n        if (!that.multiple && selectedOptions.length === 1) {\n          that.selectpicker.view.displayedValue = getSelectValues(element, selectedOptions);\n        }\n\n        if (this.options.selectedTextFormat === 'static') {\n          titleFragment = generateOption.text.call(this, {\n            text: this.options.title\n          }, true);\n        } else {\n          showCount = this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1 && selectedCount > 1; // determine if the number of selected options will be shown (showCount === true)\n\n          if (showCount) {\n            countMax = this.options.selectedTextFormat.split('>');\n            showCount = countMax.length > 1 && selectedCount > countMax[1] || countMax.length === 1 && selectedCount >= 2;\n          } // only loop through all selected options if the count won't be shown\n\n\n          if (showCount === false) {\n            if (!placeholderSelected) {\n              for (var selectedIndex = 0; selectedIndex < selectedCount; selectedIndex++) {\n                if (selectedIndex < 50) {\n                  var option = selectedOptions[selectedIndex],\n                      thisData = this.selectpicker.main.data[option.liIndex],\n                      titleOptions = {};\n\n                  if (this.multiple && selectedIndex > 0) {\n                    titleFragment.appendChild(multipleSeparator.cloneNode(false));\n                  }\n\n                  if (option.title) {\n                    titleOptions.text = option.title;\n                  } else if (thisData) {\n                    if (thisData.content && that.options.showContent) {\n                      titleOptions.content = thisData.content.toString();\n                      hasContent = true;\n                    } else {\n                      if (that.options.showIcon) {\n                        titleOptions.icon = thisData.icon;\n                      }\n\n                      if (that.options.showSubtext && !that.multiple && thisData.subtext) titleOptions.subtext = ' ' + thisData.subtext;\n                      titleOptions.text = option.textContent.trim();\n                    }\n                  }\n\n                  titleFragment.appendChild(generateOption.text.call(this, titleOptions, true));\n                } else {\n                  break;\n                }\n              } // add ellipsis\n\n\n              if (selectedCount > 49) {\n                titleFragment.appendChild(document.createTextNode('...'));\n              }\n            }\n          } else {\n            var optionSelector = ':not([hidden]):not([data-hidden=\"true\"]):not([data-divider=\"true\"])';\n            if (this.options.hideDisabled) optionSelector += ':not(:disabled)'; // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected, etc.\n\n            var totalCount = this.$element[0].querySelectorAll('select > option' + optionSelector + ', optgroup' + optionSelector + ' option' + optionSelector).length,\n                tr8nText = typeof this.options.countSelectedText === 'function' ? this.options.countSelectedText(selectedCount, totalCount) : this.options.countSelectedText;\n            titleFragment = generateOption.text.call(this, {\n              text: tr8nText.replace('{0}', selectedCount.toString()).replace('{1}', totalCount.toString())\n            }, true);\n          }\n        }\n\n        if (this.options.title == undefined) {\n          // use .attr to ensure undefined is returned if title attribute is not set\n          this.options.title = this.$element.attr('title');\n        } // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText\n\n\n        if (!titleFragment.childNodes.length) {\n          titleFragment = generateOption.text.call(this, {\n            text: typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText\n          }, true);\n        } // strip all HTML tags and trim the result, then unescape any escaped tags\n\n\n        button.title = titleFragment.textContent.replace(/<[^>]*>?/g, '').trim();\n\n        if (this.options.sanitize && hasContent) {\n          sanitizeHtml([titleFragment], that.options.whiteList, that.options.sanitizeFn);\n        }\n\n        buttonInner.innerHTML = '';\n        buttonInner.appendChild(titleFragment);\n\n        if (version.major < 4 && this.$newElement[0].classList.contains('bs3-has-addon')) {\n          var filterExpand = button.querySelector('.filter-expand'),\n              clone = buttonInner.cloneNode(true);\n          clone.className = 'filter-expand';\n\n          if (filterExpand) {\n            button.replaceChild(clone, filterExpand);\n          } else {\n            button.appendChild(clone);\n          }\n        }\n\n        this.$element.trigger('rendered' + EVENT_KEY);\n      },\n\n      /**\r\n       * @param [style]\r\n       * @param [status]\r\n       */\n      setStyle: function setStyle(newStyle, status) {\n        var button = this.$button[0],\n            newElement = this.$newElement[0],\n            style = this.options.style.trim(),\n            buttonClass;\n\n        if (this.$element.attr('class')) {\n          this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\\[.*\\]/gi, ''));\n        }\n\n        if (version.major < 4) {\n          newElement.classList.add('bs3');\n\n          if (newElement.parentNode.classList && newElement.parentNode.classList.contains('input-group') && (newElement.previousElementSibling || newElement.nextElementSibling) && (newElement.previousElementSibling || newElement.nextElementSibling).classList.contains('input-group-addon')) {\n            newElement.classList.add('bs3-has-addon');\n          }\n        }\n\n        if (newStyle) {\n          buttonClass = newStyle.trim();\n        } else {\n          buttonClass = style;\n        }\n\n        if (status == 'add') {\n          if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\n        } else if (status == 'remove') {\n          if (buttonClass) button.classList.remove.apply(button.classList, buttonClass.split(' '));\n        } else {\n          if (style) button.classList.remove.apply(button.classList, style.split(' '));\n          if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\n        }\n      },\n      liHeight: function liHeight(refresh) {\n        if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;\n        var newElement = elementTemplates.div.cloneNode(false),\n            menu = elementTemplates.div.cloneNode(false),\n            menuInner = elementTemplates.div.cloneNode(false),\n            menuInnerInner = document.createElement('ul'),\n            divider = elementTemplates.li.cloneNode(false),\n            dropdownHeader = elementTemplates.li.cloneNode(false),\n            li,\n            a = elementTemplates.a.cloneNode(false),\n            text = elementTemplates.span.cloneNode(false),\n            header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,\n            search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null,\n            actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,\n            doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,\n            firstOption = this.$element.find('option')[0];\n        this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth;\n        text.className = 'text';\n        a.className = 'dropdown-item ' + (firstOption ? firstOption.className : '');\n        newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW;\n        newElement.style.width = 0; // ensure button width doesn't affect natural width of menu when calculating\n\n        if (this.options.width === 'auto') menu.style.minWidth = 0;\n        menu.className = classNames.MENU + ' ' + classNames.SHOW;\n        menuInner.className = 'inner ' + classNames.SHOW;\n        menuInnerInner.className = classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '');\n        divider.className = classNames.DIVIDER;\n        dropdownHeader.className = 'dropdown-header';\n        text.appendChild(document.createTextNode(\"\\u200B\"));\n\n        if (this.selectpicker.current.data.length) {\n          for (var i = 0; i < this.selectpicker.current.data.length; i++) {\n            var data = this.selectpicker.current.data[i];\n\n            if (data.type === 'option') {\n              li = data.element;\n              break;\n            }\n          }\n        } else {\n          li = elementTemplates.li.cloneNode(false);\n          a.appendChild(text);\n          li.appendChild(a);\n        }\n\n        dropdownHeader.appendChild(text.cloneNode(true));\n\n        if (this.selectpicker.view.widestOption) {\n          menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true));\n        }\n\n        menuInnerInner.appendChild(li);\n        menuInnerInner.appendChild(divider);\n        menuInnerInner.appendChild(dropdownHeader);\n        if (header) menu.appendChild(header);\n\n        if (search) {\n          var input = document.createElement('input');\n          search.className = 'bs-searchbox';\n          input.className = 'form-control';\n          search.appendChild(input);\n          menu.appendChild(search);\n        }\n\n        if (actions) menu.appendChild(actions);\n        menuInner.appendChild(menuInnerInner);\n        menu.appendChild(menuInner);\n        if (doneButton) menu.appendChild(doneButton);\n        newElement.appendChild(menu);\n        document.body.appendChild(newElement);\n        var liHeight = li.offsetHeight,\n            dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0,\n            headerHeight = header ? header.offsetHeight : 0,\n            searchHeight = search ? search.offsetHeight : 0,\n            actionsHeight = actions ? actions.offsetHeight : 0,\n            doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,\n            dividerHeight = $(divider).outerHeight(true),\n            // fall back to jQuery if getComputedStyle is not supported\n        menuStyle = window.getComputedStyle ? window.getComputedStyle(menu) : false,\n            menuWidth = menu.offsetWidth,\n            $menu = menuStyle ? null : $(menu),\n            menuPadding = {\n          vert: toInteger(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + toInteger(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + toInteger(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + toInteger(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),\n          horiz: toInteger(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) + toInteger(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) + toInteger(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) + toInteger(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth'))\n        },\n            menuExtras = {\n          vert: menuPadding.vert + toInteger(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + toInteger(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2,\n          horiz: menuPadding.horiz + toInteger(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) + toInteger(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2\n        },\n            scrollBarWidth;\n        menuInner.style.overflowY = 'scroll';\n        scrollBarWidth = menu.offsetWidth - menuWidth;\n        document.body.removeChild(newElement);\n        this.sizeInfo.liHeight = liHeight;\n        this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight;\n        this.sizeInfo.headerHeight = headerHeight;\n        this.sizeInfo.searchHeight = searchHeight;\n        this.sizeInfo.actionsHeight = actionsHeight;\n        this.sizeInfo.doneButtonHeight = doneButtonHeight;\n        this.sizeInfo.dividerHeight = dividerHeight;\n        this.sizeInfo.menuPadding = menuPadding;\n        this.sizeInfo.menuExtras = menuExtras;\n        this.sizeInfo.menuWidth = menuWidth;\n        this.sizeInfo.menuInnerInnerWidth = menuWidth - menuPadding.horiz;\n        this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth;\n        this.sizeInfo.scrollBarWidth = scrollBarWidth;\n        this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight;\n        this.setPositionData();\n      },\n      getSelectPosition: function getSelectPosition() {\n        var that = this,\n            $window = $(window),\n            pos = that.$newElement.offset(),\n            $container = $(that.options.container),\n            containerPos;\n\n        if (that.options.container && $container.length && !$container.is('body')) {\n          containerPos = $container.offset();\n          containerPos.top += parseInt($container.css('borderTopWidth'));\n          containerPos.left += parseInt($container.css('borderLeftWidth'));\n        } else {\n          containerPos = {\n            top: 0,\n            left: 0\n          };\n        }\n\n        var winPad = that.options.windowPadding;\n        this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop();\n        this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2];\n        this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();\n        this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1];\n        this.sizeInfo.selectOffsetTop -= winPad[0];\n        this.sizeInfo.selectOffsetLeft -= winPad[3];\n      },\n      setMenuSize: function setMenuSize(isAuto) {\n        this.getSelectPosition();\n\n        var selectWidth = this.sizeInfo.selectWidth,\n            liHeight = this.sizeInfo.liHeight,\n            headerHeight = this.sizeInfo.headerHeight,\n            searchHeight = this.sizeInfo.searchHeight,\n            actionsHeight = this.sizeInfo.actionsHeight,\n            doneButtonHeight = this.sizeInfo.doneButtonHeight,\n            divHeight = this.sizeInfo.dividerHeight,\n            menuPadding = this.sizeInfo.menuPadding,\n            menuInnerHeight,\n            menuHeight,\n            divLength = 0,\n            minHeight,\n            _minHeight,\n            maxHeight,\n            menuInnerMinHeight,\n            estimate,\n            isDropup;\n\n        if (this.options.dropupAuto) {\n          // Get the estimated height of the menu without scrollbars.\n          // This is useful for smaller menus, where there might be plenty of room\n          // below the button without setting dropup, but we can't know\n          // the exact height of the menu until createView is called later\n          estimate = liHeight * this.selectpicker.current.elements.length + menuPadding.vert;\n          isDropup = this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot; // ensure dropup doesn't change while searching (so menu doesn't bounce back and forth)\n\n          if (this.selectpicker.isSearching === true) {\n            isDropup = this.selectpicker.dropup;\n          }\n\n          this.$newElement.toggleClass(classNames.DROPUP, isDropup);\n          this.selectpicker.dropup = isDropup;\n        }\n\n        if (this.options.size === 'auto') {\n          _minHeight = this.selectpicker.current.elements.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0;\n          menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert;\n          minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\n          menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0);\n\n          if (this.$newElement.hasClass(classNames.DROPUP)) {\n            menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert;\n          }\n\n          maxHeight = menuHeight;\n          menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert;\n        } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\n          for (var i = 0; i < this.options.size; i++) {\n            if (this.selectpicker.current.data[i].type === 'divider') divLength++;\n          }\n\n          menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert;\n          menuInnerHeight = menuHeight - menuPadding.vert;\n          maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\n          minHeight = menuInnerMinHeight = '';\n        }\n\n        this.$menu.css({\n          'max-height': maxHeight + 'px',\n          'overflow': 'hidden',\n          'min-height': minHeight + 'px'\n        });\n        this.$menuInner.css({\n          'max-height': menuInnerHeight + 'px',\n          'overflow-y': 'auto',\n          'min-height': menuInnerMinHeight + 'px'\n        }); // ensure menuInnerHeight is always a positive number to prevent issues calculating chunkSize in createView\n\n        this.sizeInfo.menuInnerHeight = Math.max(menuInnerHeight, 1);\n\n        if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) {\n          this.sizeInfo.hasScrollBar = true;\n          this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth;\n        }\n\n        if (this.options.dropdownAlignRight === 'auto') {\n          this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < this.sizeInfo.totalMenuWidth - selectWidth);\n        }\n\n        if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update();\n      },\n      setSize: function setSize(refresh) {\n        this.liHeight(refresh);\n        if (this.options.header) this.$menu.css('padding-top', 0);\n\n        if (this.options.size !== false) {\n          var that = this,\n              $window = $(window);\n          this.setMenuSize();\n\n          if (this.options.liveSearch) {\n            this.$searchbox.off('input.setMenuSize propertychange.setMenuSize').on('input.setMenuSize propertychange.setMenuSize', function () {\n              return that.setMenuSize();\n            });\n          }\n\n          if (this.options.size === 'auto') {\n            $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize').on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () {\n              return that.setMenuSize();\n            });\n          } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\n            $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize');\n          }\n        }\n\n        this.createView(false, true, refresh);\n      },\n      setWidth: function setWidth() {\n        var that = this;\n\n        if (this.options.width === 'auto') {\n          requestAnimationFrame(function () {\n            that.$menu.css('min-width', '0');\n            that.$element.on('loaded' + EVENT_KEY, function () {\n              that.liHeight();\n              that.setMenuSize(); // Get correct width if element is hidden\n\n              var $selectClone = that.$newElement.clone().appendTo('body'),\n                  btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth();\n              $selectClone.remove(); // Set width to whatever's larger, button title or longest option\n\n              that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth);\n              that.$newElement.css('width', that.sizeInfo.selectWidth + 'px');\n            });\n          });\n        } else if (this.options.width === 'fit') {\n          // Remove inline min-width so width can be changed from 'auto'\n          this.$menu.css('min-width', '');\n          this.$newElement.css('width', '').addClass('fit-width');\n        } else if (this.options.width) {\n          // Remove inline min-width so width can be changed from 'auto'\n          this.$menu.css('min-width', '');\n          this.$newElement.css('width', this.options.width);\n        } else {\n          // Remove inline min-width/width so width can be changed\n          this.$menu.css('min-width', '');\n          this.$newElement.css('width', '');\n        } // Remove fit-width class if width is changed programmatically\n\n\n        if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {\n          this.$newElement[0].classList.remove('fit-width');\n        }\n      },\n      selectPosition: function selectPosition() {\n        this.$bsContainer = $('<div class=\"bs-container\" />');\n\n        var that = this,\n            $container = $(this.options.container),\n            pos,\n            containerPos,\n            actualHeight,\n            getPlacement = function getPlacement($element) {\n          var containerPosition = {},\n              // fall back to dropdown's default display setting if display is not manually set\n          display = that.options.display || ( // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default\n          $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display : false);\n          that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP));\n          pos = $element.offset();\n\n          if (!$container.is('body')) {\n            containerPos = $container.offset();\n            containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop();\n            containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft();\n          } else {\n            containerPos = {\n              top: 0,\n              left: 0\n            };\n          }\n\n          actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight; // Bootstrap 4+ uses Popper for menu positioning\n\n          if (version.major < 4 || display === 'static') {\n            containerPosition.top = pos.top - containerPos.top + actualHeight;\n            containerPosition.left = pos.left - containerPos.left;\n          }\n\n          containerPosition.width = $element[0].offsetWidth;\n          that.$bsContainer.css(containerPosition);\n        };\n\n        this.$button.on('click.bs.dropdown.data-api', function () {\n          if (that.isDisabled()) {\n            return;\n          }\n\n          getPlacement(that.$newElement);\n          that.$bsContainer.appendTo(that.options.container).toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW)).append(that.$menu);\n        });\n        $(window).off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId).on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () {\n          var isActive = that.$newElement.hasClass(classNames.SHOW);\n          if (isActive) getPlacement(that.$newElement);\n        });\n        this.$element.on('hide' + EVENT_KEY, function () {\n          that.$menu.data('height', that.$menu.height());\n          that.$bsContainer.detach();\n        });\n      },\n      setOptionStatus: function setOptionStatus(selectedOnly) {\n        var that = this;\n        that.noScroll = false;\n\n        if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) {\n          for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) {\n            var liData = that.selectpicker.current.data[i + that.selectpicker.view.position0],\n                option = liData.option;\n\n            if (option) {\n              if (selectedOnly !== true) {\n                that.setDisabled(liData.index, liData.disabled);\n              }\n\n              that.setSelected(liData.index, option.selected);\n            }\n          }\n        }\n      },\n\n      /**\r\n       * @param {number} index - the index of the option that is being changed\r\n       * @param {boolean} selected - true if the option is being selected, false if being deselected\r\n       */\n      setSelected: function setSelected(index, selected) {\n        var li = this.selectpicker.main.elements[index],\n            liData = this.selectpicker.main.data[index],\n            activeIndexIsSet = this.activeIndex !== undefined,\n            thisIsActive = this.activeIndex === index,\n            prevActive,\n            a,\n            // if current option is already active\n        // OR\n        // if the current option is being selected, it's NOT multiple, and\n        // activeIndex is undefined:\n        //  - when the menu is first being opened, OR\n        //  - after a search has been performed, OR\n        //  - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeIndex)\n        keepActive = thisIsActive || selected && !this.multiple && !activeIndexIsSet;\n        liData.selected = selected;\n        a = li.firstChild;\n\n        if (selected) {\n          this.selectedIndex = index;\n        }\n\n        li.classList.toggle('selected', selected);\n\n        if (keepActive) {\n          this.focusItem(li, liData);\n          this.selectpicker.view.currentActive = li;\n          this.activeIndex = index;\n        } else {\n          this.defocusItem(li);\n        }\n\n        if (a) {\n          a.classList.toggle('selected', selected);\n\n          if (selected) {\n            a.setAttribute('aria-selected', true);\n          } else {\n            if (this.multiple) {\n              a.setAttribute('aria-selected', false);\n            } else {\n              a.removeAttribute('aria-selected');\n            }\n          }\n        }\n\n        if (!keepActive && !activeIndexIsSet && selected && this.prevActiveIndex !== undefined) {\n          prevActive = this.selectpicker.main.elements[this.prevActiveIndex];\n          this.defocusItem(prevActive);\n        }\n      },\n\n      /**\r\n       * @param {number} index - the index of the option that is being disabled\r\n       * @param {boolean} disabled - true if the option is being disabled, false if being enabled\r\n       */\n      setDisabled: function setDisabled(index, disabled) {\n        var li = this.selectpicker.main.elements[index],\n            a;\n        this.selectpicker.main.data[index].disabled = disabled;\n        a = li.firstChild;\n        li.classList.toggle(classNames.DISABLED, disabled);\n\n        if (a) {\n          if (version.major === '4') a.classList.toggle(classNames.DISABLED, disabled);\n\n          if (disabled) {\n            a.setAttribute('aria-disabled', disabled);\n            a.setAttribute('tabindex', -1);\n          } else {\n            a.removeAttribute('aria-disabled');\n            a.setAttribute('tabindex', 0);\n          }\n        }\n      },\n      isDisabled: function isDisabled() {\n        return this.$element[0].disabled;\n      },\n      checkDisabled: function checkDisabled() {\n        if (this.isDisabled()) {\n          this.$newElement[0].classList.add(classNames.DISABLED);\n          this.$button.addClass(classNames.DISABLED).attr('aria-disabled', true);\n        } else {\n          if (this.$button[0].classList.contains(classNames.DISABLED)) {\n            this.$newElement[0].classList.remove(classNames.DISABLED);\n            this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false);\n          }\n        }\n      },\n      clickListener: function clickListener() {\n        var that = this,\n            $document = $(document);\n        $document.data('spaceSelect', false);\n        this.$button.on('keyup', function (e) {\n          if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {\n            e.preventDefault();\n            $document.data('spaceSelect', false);\n          }\n        });\n        this.$newElement.on('show.bs.dropdown', function () {\n          if (version.major > 3 && !that.dropdown) {\n            that.dropdown = that.$button.data('bs.dropdown');\n            that.dropdown._menu = that.$menu[0];\n          }\n        });\n        this.$button.on('click.bs.dropdown.data-api', function () {\n          if (!that.$newElement.hasClass(classNames.SHOW)) {\n            that.setSize();\n          }\n        });\n\n        function setFocus() {\n          if (that.options.liveSearch) {\n            that.$searchbox.trigger('focus');\n          } else {\n            that.$menuInner.trigger('focus');\n          }\n        }\n\n        function checkPopperExists() {\n          if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state.isCreated) {\n            setFocus();\n          } else {\n            requestAnimationFrame(checkPopperExists);\n          }\n        }\n\n        this.$element.on('shown' + EVENT_KEY, function () {\n          if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) {\n            that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop;\n          }\n\n          if (version.major > 3) {\n            requestAnimationFrame(checkPopperExists);\n          } else {\n            setFocus();\n          }\n        }); // ensure posinset and setsize are correct before selecting an option via a click\n\n        this.$menuInner.on('mouseenter', 'li a', function (e) {\n          var hoverLi = this.parentElement,\n              position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\n              index = Array.prototype.indexOf.call(hoverLi.parentElement.children, hoverLi),\n              hoverData = that.selectpicker.current.data[index + position0];\n          that.focusItem(hoverLi, hoverData, true);\n        });\n        this.$menuInner.on('click', 'li a', function (e, retainActive) {\n          var $this = $(this),\n              element = that.$element[0],\n              position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\n              clickedData = that.selectpicker.current.data[$this.parent().index() + position0],\n              clickedIndex = clickedData.index,\n              prevValue = getSelectValues(element),\n              prevIndex = element.selectedIndex,\n              prevOption = element.options[prevIndex],\n              triggerChange = true; // Don't close on multi choice menu\n\n          if (that.multiple && that.options.maxOptions !== 1) {\n            e.stopPropagation();\n          }\n\n          e.preventDefault(); // Don't run if the select is disabled\n\n          if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) {\n            var option = clickedData.option,\n                $option = $(option),\n                state = option.selected,\n                $optgroup = $option.parent('optgroup'),\n                $optgroupOptions = $optgroup.find('option'),\n                maxOptions = that.options.maxOptions,\n                maxOptionsGrp = $optgroup.data('maxOptions') || false;\n            if (clickedIndex === that.activeIndex) retainActive = true;\n\n            if (!retainActive) {\n              that.prevActiveIndex = that.activeIndex;\n              that.activeIndex = undefined;\n            }\n\n            if (!that.multiple) {\n              // Deselect all others if not multi select box\n              if (prevOption) prevOption.selected = false;\n              option.selected = true;\n              that.setSelected(clickedIndex, true);\n            } else {\n              // Toggle the one we have chosen if we are multi select.\n              option.selected = !state;\n              that.setSelected(clickedIndex, !state);\n              that.focusedParent.focus();\n\n              if (maxOptions !== false || maxOptionsGrp !== false) {\n                var maxReached = maxOptions < getSelectedOptions(element).length,\n                    maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;\n\n                if (maxOptions && maxReached || maxOptionsGrp && maxReachedGrp) {\n                  if (maxOptions && maxOptions == 1) {\n                    element.selectedIndex = -1;\n                    option.selected = true;\n                    that.setOptionStatus(true);\n                  } else if (maxOptionsGrp && maxOptionsGrp == 1) {\n                    for (var i = 0; i < $optgroupOptions.length; i++) {\n                      var _option = $optgroupOptions[i];\n                      _option.selected = false;\n                      that.setSelected(_option.liIndex, false);\n                    }\n\n                    option.selected = true;\n                    that.setSelected(clickedIndex, true);\n                  } else {\n                    var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText,\n                        maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText,\n                        maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),\n                        maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),\n                        $notify = $('<div class=\"notify\"></div>'); // If {var} is set in array, replace it\n\n                    /** @deprecated */\n\n                    if (maxOptionsArr[2]) {\n                      maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);\n                      maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);\n                    }\n\n                    option.selected = false;\n                    that.$menu.append($notify);\n\n                    if (maxOptions && maxReached) {\n                      $notify.append($('<div>' + maxTxt + '</div>'));\n                      triggerChange = false;\n                      that.$element.trigger('maxReached' + EVENT_KEY);\n                    }\n\n                    if (maxOptionsGrp && maxReachedGrp) {\n                      $notify.append($('<div>' + maxTxtGrp + '</div>'));\n                      triggerChange = false;\n                      that.$element.trigger('maxReachedGrp' + EVENT_KEY);\n                    }\n\n                    setTimeout(function () {\n                      that.setSelected(clickedIndex, false);\n                    }, 10);\n                    $notify[0].classList.add('fadeOut');\n                    setTimeout(function () {\n                      $notify.remove();\n                    }, 1050);\n                  }\n                }\n              }\n            }\n\n            if (!that.multiple || that.multiple && that.options.maxOptions === 1) {\n              that.$button.trigger('focus');\n            } else if (that.options.liveSearch) {\n              that.$searchbox.trigger('focus');\n            } // Trigger select 'change'\n\n\n            if (triggerChange) {\n              if (that.multiple || prevIndex !== element.selectedIndex) {\n                // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed.\n                changedArguments = [option.index, $option.prop('selected'), prevValue];\n                that.$element.triggerNative('change');\n              }\n            }\n          }\n        });\n        this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) {\n          if (e.currentTarget == this) {\n            e.preventDefault();\n            e.stopPropagation();\n\n            if (that.options.liveSearch && !$(e.target).hasClass('close')) {\n              that.$searchbox.trigger('focus');\n            } else {\n              that.$button.trigger('focus');\n            }\n          }\n        });\n        this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {\n          e.preventDefault();\n          e.stopPropagation();\n\n          if (that.options.liveSearch) {\n            that.$searchbox.trigger('focus');\n          } else {\n            that.$button.trigger('focus');\n          }\n        });\n        this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () {\n          that.$button.trigger('click');\n        });\n        this.$searchbox.on('click', function (e) {\n          e.stopPropagation();\n        });\n        this.$menu.on('click', '.actions-btn', function (e) {\n          if (that.options.liveSearch) {\n            that.$searchbox.trigger('focus');\n          } else {\n            that.$button.trigger('focus');\n          }\n\n          e.preventDefault();\n          e.stopPropagation();\n\n          if ($(this).hasClass('bs-select-all')) {\n            that.selectAll();\n          } else {\n            that.deselectAll();\n          }\n        });\n        this.$button.on('focus' + EVENT_KEY, function (e) {\n          var tabindex = that.$element[0].getAttribute('tabindex'); // only change when button is actually focused\n\n          if (tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\n            // apply select element's tabindex to ensure correct order is followed when tabbing to the next element\n            this.setAttribute('tabindex', tabindex); // set element's tabindex to -1 to allow for reverse tabbing\n\n            that.$element[0].setAttribute('tabindex', -1);\n            that.selectpicker.view.tabindex = tabindex;\n          }\n        }).on('blur' + EVENT_KEY, function (e) {\n          // revert everything to original tabindex\n          if (that.selectpicker.view.tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\n            that.$element[0].setAttribute('tabindex', that.selectpicker.view.tabindex);\n            this.setAttribute('tabindex', -1);\n            that.selectpicker.view.tabindex = undefined;\n          }\n        });\n        this.$element.on('change' + EVENT_KEY, function () {\n          that.render();\n          that.$element.trigger('changed' + EVENT_KEY, changedArguments);\n          changedArguments = null;\n        }).on('focus' + EVENT_KEY, function () {\n          if (!that.options.mobile) that.$button[0].focus();\n        });\n      },\n      liveSearchListener: function liveSearchListener() {\n        var that = this;\n        this.$button.on('click.bs.dropdown.data-api', function () {\n          if (!!that.$searchbox.val()) {\n            that.$searchbox.val('');\n            that.selectpicker.search.previousValue = undefined;\n          }\n        });\n        this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) {\n          e.stopPropagation();\n        });\n        this.$searchbox.on('input propertychange', function () {\n          var searchValue = that.$searchbox[0].value;\n          that.selectpicker.search.elements = [];\n          that.selectpicker.search.data = [];\n\n          if (searchValue) {\n            var i,\n                searchMatch = [],\n                q = searchValue.toUpperCase(),\n                cache = {},\n                cacheArr = [],\n                searchStyle = that._searchStyle(),\n                normalizeSearch = that.options.liveSearchNormalize;\n\n            if (normalizeSearch) q = normalizeToBase(q);\n\n            for (var i = 0; i < that.selectpicker.main.data.length; i++) {\n              var li = that.selectpicker.main.data[i];\n\n              if (!cache[i]) {\n                cache[i] = stringSearch(li, q, searchStyle, normalizeSearch);\n              }\n\n              if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) {\n                if (li.headerIndex > 0) {\n                  cache[li.headerIndex - 1] = true;\n                  cacheArr.push(li.headerIndex - 1);\n                }\n\n                cache[li.headerIndex] = true;\n                cacheArr.push(li.headerIndex);\n                cache[li.lastIndex + 1] = true;\n              }\n\n              if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i);\n            }\n\n            for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) {\n              var index = cacheArr[i],\n                  prevIndex = cacheArr[i - 1],\n                  li = that.selectpicker.main.data[index],\n                  liPrev = that.selectpicker.main.data[prevIndex];\n\n              if (li.type !== 'divider' || li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i) {\n                that.selectpicker.search.data.push(li);\n                searchMatch.push(that.selectpicker.main.elements[index]);\n              }\n            }\n\n            that.activeIndex = undefined;\n            that.noScroll = true;\n            that.$menuInner.scrollTop(0);\n            that.selectpicker.search.elements = searchMatch;\n            that.createView(true);\n            showNoResults.call(that, searchMatch, searchValue);\n          } else if (that.selectpicker.search.previousValue) {\n            // for IE11 (#2402)\n            that.$menuInner.scrollTop(0);\n            that.createView(false);\n          }\n\n          that.selectpicker.search.previousValue = searchValue;\n        });\n      },\n      _searchStyle: function _searchStyle() {\n        return this.options.liveSearchStyle || 'contains';\n      },\n      val: function val(value) {\n        var element = this.$element[0];\n\n        if (typeof value !== 'undefined') {\n          var prevValue = getSelectValues(element);\n          changedArguments = [null, null, prevValue];\n          this.$element.val(value).trigger('changed' + EVENT_KEY, changedArguments);\n\n          if (this.$newElement.hasClass(classNames.SHOW)) {\n            if (this.multiple) {\n              this.setOptionStatus(true);\n            } else {\n              var liSelectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\n\n              if (typeof liSelectedIndex === 'number') {\n                this.setSelected(this.selectedIndex, false);\n                this.setSelected(liSelectedIndex, true);\n              }\n            }\n          }\n\n          this.render();\n          changedArguments = null;\n          return this.$element;\n        } else {\n          return this.$element.val();\n        }\n      },\n      changeAll: function changeAll(status) {\n        if (!this.multiple) return;\n        if (typeof status === 'undefined') status = true;\n        var element = this.$element[0],\n            previousSelected = 0,\n            currentSelected = 0,\n            prevValue = getSelectValues(element);\n        element.classList.add('bs-select-hidden');\n\n        for (var i = 0, data = this.selectpicker.current.data, len = data.length; i < len; i++) {\n          var liData = data[i],\n              option = liData.option;\n\n          if (option && !liData.disabled && liData.type !== 'divider') {\n            if (liData.selected) previousSelected++;\n            option.selected = status;\n            if (status === true) currentSelected++;\n          }\n        }\n\n        element.classList.remove('bs-select-hidden');\n        if (previousSelected === currentSelected) return;\n        this.setOptionStatus();\n        changedArguments = [null, null, prevValue];\n        this.$element.triggerNative('change');\n      },\n      selectAll: function selectAll() {\n        return this.changeAll(true);\n      },\n      deselectAll: function deselectAll() {\n        return this.changeAll(false);\n      },\n      toggle: function toggle(e) {\n        e = e || window.event;\n        if (e) e.stopPropagation();\n        this.$button.trigger('click.bs.dropdown.data-api');\n      },\n      keydown: function keydown(e) {\n        var $this = $(this),\n            isToggle = $this.hasClass('dropdown-toggle'),\n            $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU),\n            that = $parent.data('this'),\n            $items = that.findLis(),\n            index,\n            isActive,\n            liActive,\n            activeLi,\n            offset,\n            updateScroll = false,\n            downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab,\n            isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab,\n            scrollTop = that.$menuInner[0].scrollTop,\n            isVirtual = that.isVirtual(),\n            position0 = isVirtual === true ? that.selectpicker.view.position0 : 0; // do nothing if a function key is pressed\n\n        if (e.which >= 112 && e.which <= 123) return;\n        isActive = that.$newElement.hasClass(classNames.SHOW);\n\n        if (!isActive && (isArrowKey || e.which >= 48 && e.which <= 57 || e.which >= 96 && e.which <= 105 || e.which >= 65 && e.which <= 90)) {\n          that.$button.trigger('click.bs.dropdown.data-api');\n\n          if (that.options.liveSearch) {\n            that.$searchbox.trigger('focus');\n            return;\n          }\n        }\n\n        if (e.which === keyCodes.ESCAPE && isActive) {\n          e.preventDefault();\n          that.$button.trigger('click.bs.dropdown.data-api').trigger('focus');\n        }\n\n        if (isArrowKey) {\n          // if up or down\n          if (!$items.length) return;\n          liActive = that.selectpicker.main.elements[that.activeIndex];\n          index = liActive ? Array.prototype.indexOf.call(liActive.parentElement.children, liActive) : -1;\n\n          if (index !== -1) {\n            that.defocusItem(liActive);\n          }\n\n          if (e.which === keyCodes.ARROW_UP) {\n            // up\n            if (index !== -1) index--;\n            if (index + position0 < 0) index += $items.length;\n\n            if (!that.selectpicker.view.canHighlight[index + position0]) {\n              index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0;\n              if (index === -1) index = $items.length - 1;\n            }\n          } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) {\n            // down\n            index++;\n            if (index + position0 >= that.selectpicker.view.canHighlight.length) index = that.selectpicker.view.firstHighlightIndex;\n\n            if (!that.selectpicker.view.canHighlight[index + position0]) {\n              index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true);\n            }\n          }\n\n          e.preventDefault();\n          var liActiveIndex = position0 + index;\n\n          if (e.which === keyCodes.ARROW_UP) {\n            // up\n            // scroll to bottom and highlight last option\n            if (position0 === 0 && index === $items.length - 1) {\n              that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight;\n              liActiveIndex = that.selectpicker.current.elements.length - 1;\n            } else {\n              activeLi = that.selectpicker.current.data[liActiveIndex];\n              offset = activeLi.position - activeLi.height;\n              updateScroll = offset < scrollTop;\n            }\n          } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) {\n            // down\n            // scroll to top and highlight first option\n            if (index === that.selectpicker.view.firstHighlightIndex) {\n              that.$menuInner[0].scrollTop = 0;\n              liActiveIndex = that.selectpicker.view.firstHighlightIndex;\n            } else {\n              activeLi = that.selectpicker.current.data[liActiveIndex];\n              offset = activeLi.position - that.sizeInfo.menuInnerHeight;\n              updateScroll = offset > scrollTop;\n            }\n          }\n\n          liActive = that.selectpicker.current.elements[liActiveIndex];\n          that.activeIndex = that.selectpicker.current.data[liActiveIndex].index;\n          that.focusItem(liActive);\n          that.selectpicker.view.currentActive = liActive;\n          if (updateScroll) that.$menuInner[0].scrollTop = offset;\n\n          if (that.options.liveSearch) {\n            that.$searchbox.trigger('focus');\n          } else {\n            $this.trigger('focus');\n          }\n        } else if (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which) || e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory) {\n          var searchMatch,\n              matches = [],\n              keyHistory;\n          e.preventDefault();\n          that.selectpicker.keydown.keyHistory += keyCodeMap[e.which];\n          if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel);\n          that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start();\n          keyHistory = that.selectpicker.keydown.keyHistory; // if all letters are the same, set keyHistory to just the first character when searching\n\n          if (/^(.)\\1+$/.test(keyHistory)) {\n            keyHistory = keyHistory.charAt(0);\n          } // find matches\n\n\n          for (var i = 0; i < that.selectpicker.current.data.length; i++) {\n            var li = that.selectpicker.current.data[i],\n                hasMatch;\n            hasMatch = stringSearch(li, keyHistory, 'startsWith', true);\n\n            if (hasMatch && that.selectpicker.view.canHighlight[i]) {\n              matches.push(li.index);\n            }\n          }\n\n          if (matches.length) {\n            var matchIndex = 0;\n            $items.removeClass('active').find('a').removeClass('active'); // either only one key has been pressed or they are all the same key\n\n            if (keyHistory.length === 1) {\n              matchIndex = matches.indexOf(that.activeIndex);\n\n              if (matchIndex === -1 || matchIndex === matches.length - 1) {\n                matchIndex = 0;\n              } else {\n                matchIndex++;\n              }\n            }\n\n            searchMatch = matches[matchIndex];\n            activeLi = that.selectpicker.main.data[searchMatch];\n\n            if (scrollTop - activeLi.position > 0) {\n              offset = activeLi.position - activeLi.height;\n              updateScroll = true;\n            } else {\n              offset = activeLi.position - that.sizeInfo.menuInnerHeight; // if the option is already visible at the current scroll position, just keep it the same\n\n              updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight;\n            }\n\n            liActive = that.selectpicker.main.elements[searchMatch];\n            that.activeIndex = matches[matchIndex];\n            that.focusItem(liActive);\n            if (liActive) liActive.firstChild.focus();\n            if (updateScroll) that.$menuInner[0].scrollTop = offset;\n            $this.trigger('focus');\n          }\n        } // Select focused option if \"Enter\", \"Spacebar\" or \"Tab\" (when selectOnTab is true) are pressed inside the menu.\n\n\n        if (isActive && (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory || e.which === keyCodes.ENTER || e.which === keyCodes.TAB && that.options.selectOnTab)) {\n          if (e.which !== keyCodes.SPACE) e.preventDefault();\n\n          if (!that.options.liveSearch || e.which !== keyCodes.SPACE) {\n            that.$menuInner.find('.active a').trigger('click', true); // retain active class\n\n            $this.trigger('focus');\n\n            if (!that.options.liveSearch) {\n              // Prevent screen from scrolling if the user hits the spacebar\n              e.preventDefault(); // Fixes spacebar selection of dropdown items in FF & IE\n\n              $(document).data('spaceSelect', true);\n            }\n          }\n        }\n      },\n      mobile: function mobile() {\n        // ensure mobile is set to true if mobile function is called after init\n        this.options.mobile = true;\n        this.$element[0].classList.add('mobile-device');\n      },\n      refresh: function refresh() {\n        // update options if data attributes have been changed\n        var config = $.extend({}, this.options, this.$element.data());\n        this.options = config;\n        this.checkDisabled();\n        this.buildData();\n        this.setStyle();\n        this.render();\n        this.buildList();\n        this.setWidth();\n        this.setSize(true);\n        this.$element.trigger('refreshed' + EVENT_KEY);\n      },\n      hide: function hide() {\n        this.$newElement.hide();\n      },\n      show: function show() {\n        this.$newElement.show();\n      },\n      remove: function remove() {\n        this.$newElement.remove();\n        this.$element.remove();\n      },\n      destroy: function destroy() {\n        this.$newElement.before(this.$element).remove();\n\n        if (this.$bsContainer) {\n          this.$bsContainer.remove();\n        } else {\n          this.$menu.remove();\n        }\n\n        if (this.selectpicker.view.titleOption && this.selectpicker.view.titleOption.parentNode) {\n          this.selectpicker.view.titleOption.parentNode.removeChild(this.selectpicker.view.titleOption);\n        }\n\n        this.$element.off(EVENT_KEY).removeData('selectpicker').removeClass('bs-select-hidden selectpicker');\n        $(window).off(EVENT_KEY + '.' + this.selectId);\n      }\n    }; // SELECTPICKER PLUGIN DEFINITION\n    // ==============================\n\n    function Plugin(option) {\n      // get the args of the outer function..\n      var args = arguments; // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them\n      // to get lost/corrupted in android 2.3 and IE9 #715 #775\n\n      var _option = option;\n      [].shift.apply(args); // if the version was not set successfully\n\n      if (!version.success) {\n        // try to retreive it again\n        try {\n          version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\n        } catch (err) {\n          // fall back to use BootstrapVersion if set\n          if (Selectpicker.BootstrapVersion) {\n            version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.');\n          } else {\n            version.full = [version.major, '0', '0'];\n            console.warn('There was an issue retrieving Bootstrap\\'s version. ' + 'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' + 'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.', err);\n          }\n        }\n\n        version.major = version.full[0];\n        version.success = true;\n      }\n\n      if (version.major === '4') {\n        // some defaults need to be changed if using Bootstrap 4\n        // check to see if they have already been manually changed before forcing them to update\n        var toUpdate = [];\n        if (Selectpicker.DEFAULTS.style === classNames.BUTTONCLASS) toUpdate.push({\n          name: 'style',\n          className: 'BUTTONCLASS'\n        });\n        if (Selectpicker.DEFAULTS.iconBase === classNames.ICONBASE) toUpdate.push({\n          name: 'iconBase',\n          className: 'ICONBASE'\n        });\n        if (Selectpicker.DEFAULTS.tickIcon === classNames.TICKICON) toUpdate.push({\n          name: 'tickIcon',\n          className: 'TICKICON'\n        });\n        classNames.DIVIDER = 'dropdown-divider';\n        classNames.SHOW = 'show';\n        classNames.BUTTONCLASS = 'btn-light';\n        classNames.POPOVERHEADER = 'popover-header';\n        classNames.ICONBASE = '';\n        classNames.TICKICON = 'bs-ok-default';\n\n        for (var i = 0; i < toUpdate.length; i++) {\n          var option = toUpdate[i];\n          Selectpicker.DEFAULTS[option.name] = classNames[option.className];\n        }\n      }\n\n      var value;\n      var chain = this.each(function () {\n        var $this = $(this);\n\n        if ($this.is('select')) {\n          var data = $this.data('selectpicker'),\n              options = _typeof(_option) == 'object' && _option;\n\n          if (!data) {\n            var dataAttributes = $this.data();\n\n            for (var dataAttr in dataAttributes) {\n              if (Object.prototype.hasOwnProperty.call(dataAttributes, dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n                delete dataAttributes[dataAttr];\n              }\n            }\n\n            var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, dataAttributes, options);\n            config.template = $.extend({}, Selectpicker.DEFAULTS.template, $.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}, dataAttributes.template, options.template);\n            $this.data('selectpicker', data = new Selectpicker(this, config));\n          } else if (options) {\n            for (var i in options) {\n              if (Object.prototype.hasOwnProperty.call(options, i)) {\n                data.options[i] = options[i];\n              }\n            }\n          }\n\n          if (typeof _option == 'string') {\n            if (data[_option] instanceof Function) {\n              value = data[_option].apply(data, args);\n            } else {\n              value = data.options[_option];\n            }\n          }\n        }\n      });\n\n      if (typeof value !== 'undefined') {\n        // noinspection JSUnusedAssignment\n        return value;\n      } else {\n        return chain;\n      }\n    }\n\n    var old = $.fn.selectpicker;\n    $.fn.selectpicker = Plugin;\n    $.fn.selectpicker.Constructor = Selectpicker; // SELECTPICKER NO CONFLICT\n    // ========================\n\n    $.fn.selectpicker.noConflict = function () {\n      $.fn.selectpicker = old;\n      return this;\n    }; // get Bootstrap's keydown event handler for either Bootstrap 4 or Bootstrap 3\n\n\n    function keydownHandler() {\n      if ($.fn.dropdown) {\n        // wait to define until function is called in case Bootstrap isn't loaded yet\n        var bootstrapKeydown = $.fn.dropdown.Constructor._dataApiKeydownHandler || $.fn.dropdown.Constructor.prototype.keydown;\n        return bootstrapKeydown.apply(this, arguments);\n      }\n    }\n\n    $(document).off('keydown.bs.dropdown.data-api').on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > [data-toggle=\"dropdown\"]', keydownHandler).on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > .dropdown-menu', keydownHandler).on('keydown' + EVENT_KEY, '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown).on('focusin.modal', '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', function (e) {\n      e.stopPropagation();\n    }); // SELECTPICKER DATA-API\n    // =====================\n\n    $(window).on('load' + EVENT_KEY + '.data-api', function () {\n      $('.selectpicker').each(function () {\n        var $selectpicker = $(this);\n        Plugin.call($selectpicker, $selectpicker.data());\n      });\n    });\n  })(jQuery);\n});","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * typeahead.js 1.3.1\n * https://github.com/corejavascript/typeahead.js\n * Copyright 2013-2020 Twitter, Inc. and other contributors; Licensed MIT\n */\n(function (root, factory) {\n  if (typeof define === \"function\" && define.amd) {\n    define([\"jquery\"], function (a0) {\n      return factory(a0);\n    });\n  } else if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    factory(root[\"jQuery\"]);\n  }\n})(this, function ($) {\n  var _ = function () {\n    \"use strict\";\n\n    return {\n      isMsie: function isMsie() {\n        return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\n      },\n      isBlankString: function isBlankString(str) {\n        return !str || /^\\s*$/.test(str);\n      },\n      escapeRegExChars: function escapeRegExChars(str) {\n        return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n      },\n      isString: function isString(obj) {\n        return typeof obj === \"string\";\n      },\n      isNumber: function isNumber(obj) {\n        return typeof obj === \"number\";\n      },\n      isArray: $.isArray,\n      isFunction: $.isFunction,\n      isObject: $.isPlainObject,\n      isUndefined: function isUndefined(obj) {\n        return typeof obj === \"undefined\";\n      },\n      isElement: function isElement(obj) {\n        return !!(obj && obj.nodeType === 1);\n      },\n      isJQuery: function isJQuery(obj) {\n        return obj instanceof $;\n      },\n      toStr: function toStr(s) {\n        return _.isUndefined(s) || s === null ? \"\" : s + \"\";\n      },\n      bind: $.proxy,\n      each: function each(collection, cb) {\n        $.each(collection, reverseArgs);\n\n        function reverseArgs(index, value) {\n          return cb(value, index);\n        }\n      },\n      map: $.map,\n      filter: $.grep,\n      every: function every(obj, test) {\n        var result = true;\n\n        if (!obj) {\n          return result;\n        }\n\n        $.each(obj, function (key, val) {\n          if (!(result = test.call(null, val, key, obj))) {\n            return false;\n          }\n        });\n        return !!result;\n      },\n      some: function some(obj, test) {\n        var result = false;\n\n        if (!obj) {\n          return result;\n        }\n\n        $.each(obj, function (key, val) {\n          if (result = test.call(null, val, key, obj)) {\n            return false;\n          }\n        });\n        return !!result;\n      },\n      mixin: $.extend,\n      identity: function identity(x) {\n        return x;\n      },\n      clone: function clone(obj) {\n        return $.extend(true, {}, obj);\n      },\n      getIdGenerator: function getIdGenerator() {\n        var counter = 0;\n        return function () {\n          return counter++;\n        };\n      },\n      templatify: function templatify(obj) {\n        return $.isFunction(obj) ? obj : template;\n\n        function template() {\n          return String(obj);\n        }\n      },\n      defer: function defer(fn) {\n        setTimeout(fn, 0);\n      },\n      debounce: function debounce(func, wait, immediate) {\n        var timeout, result;\n        return function () {\n          var context = this,\n              args = arguments,\n              later,\n              callNow;\n\n          later = function later() {\n            timeout = null;\n\n            if (!immediate) {\n              result = func.apply(context, args);\n            }\n          };\n\n          callNow = immediate && !timeout;\n          clearTimeout(timeout);\n          timeout = setTimeout(later, wait);\n\n          if (callNow) {\n            result = func.apply(context, args);\n          }\n\n          return result;\n        };\n      },\n      throttle: function throttle(func, wait) {\n        var context, args, timeout, result, previous, later;\n        previous = 0;\n\n        later = function later() {\n          previous = new Date();\n          timeout = null;\n          result = func.apply(context, args);\n        };\n\n        return function () {\n          var now = new Date(),\n              remaining = wait - (now - previous);\n          context = this;\n          args = arguments;\n\n          if (remaining <= 0) {\n            clearTimeout(timeout);\n            timeout = null;\n            previous = now;\n            result = func.apply(context, args);\n          } else if (!timeout) {\n            timeout = setTimeout(later, remaining);\n          }\n\n          return result;\n        };\n      },\n      stringify: function stringify(val) {\n        return _.isString(val) ? val : JSON.stringify(val);\n      },\n      guid: function guid() {\n        function _p8(s) {\n          var p = (Math.random().toString(16) + \"000000000\").substr(2, 8);\n          return s ? \"-\" + p.substr(0, 4) + \"-\" + p.substr(4, 4) : p;\n        }\n\n        return \"tt-\" + _p8() + _p8(true) + _p8(true) + _p8();\n      },\n      noop: function noop() {}\n    };\n  }();\n\n  var WWW = function () {\n    \"use strict\";\n\n    var defaultClassNames = {\n      wrapper: \"twitter-typeahead\",\n      input: \"tt-input\",\n      hint: \"tt-hint\",\n      menu: \"tt-menu\",\n      dataset: \"tt-dataset\",\n      suggestion: \"tt-suggestion\",\n      selectable: \"tt-selectable\",\n      empty: \"tt-empty\",\n      open: \"tt-open\",\n      cursor: \"tt-cursor\",\n      highlight: \"tt-highlight\"\n    };\n    return build;\n\n    function build(o) {\n      var www, classes;\n      classes = _.mixin({}, defaultClassNames, o);\n      www = {\n        css: buildCss(),\n        classes: classes,\n        html: buildHtml(classes),\n        selectors: buildSelectors(classes)\n      };\n      return {\n        css: www.css,\n        html: www.html,\n        classes: www.classes,\n        selectors: www.selectors,\n        mixin: function mixin(o) {\n          _.mixin(o, www);\n        }\n      };\n    }\n\n    function buildHtml(c) {\n      return {\n        wrapper: '<span class=\"' + c.wrapper + '\"></span>',\n        menu: '<div role=\"listbox\" class=\"' + c.menu + '\"></div>'\n      };\n    }\n\n    function buildSelectors(classes) {\n      var selectors = {};\n\n      _.each(classes, function (v, k) {\n        selectors[k] = \".\" + v;\n      });\n\n      return selectors;\n    }\n\n    function buildCss() {\n      var css = {\n        wrapper: {\n          position: \"relative\",\n          display: \"inline-block\"\n        },\n        hint: {\n          position: \"absolute\",\n          top: \"0\",\n          left: \"0\",\n          borderColor: \"transparent\",\n          boxShadow: \"none\",\n          opacity: \"1\"\n        },\n        input: {\n          position: \"relative\",\n          verticalAlign: \"top\",\n          backgroundColor: \"transparent\"\n        },\n        inputWithNoHint: {\n          position: \"relative\",\n          verticalAlign: \"top\"\n        },\n        menu: {\n          position: \"absolute\",\n          top: \"100%\",\n          left: \"0\",\n          zIndex: \"100\",\n          display: \"none\"\n        },\n        ltr: {\n          left: \"0\",\n          right: \"auto\"\n        },\n        rtl: {\n          left: \"auto\",\n          right: \" 0\"\n        }\n      };\n\n      if (_.isMsie()) {\n        _.mixin(css.input, {\n          backgroundImage: \"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)\"\n        });\n      }\n\n      return css;\n    }\n  }();\n\n  var EventBus = function () {\n    \"use strict\";\n\n    var namespace, deprecationMap;\n    namespace = \"typeahead:\";\n    deprecationMap = {\n      render: \"rendered\",\n      cursorchange: \"cursorchanged\",\n      select: \"selected\",\n      autocomplete: \"autocompleted\"\n    };\n\n    function EventBus(o) {\n      if (!o || !o.el) {\n        $.error(\"EventBus initialized without el\");\n      }\n\n      this.$el = $(o.el);\n    }\n\n    _.mixin(EventBus.prototype, {\n      _trigger: function _trigger(type, args) {\n        var $e = $.Event(namespace + type);\n        this.$el.trigger.call(this.$el, $e, args || []);\n        return $e;\n      },\n      before: function before(type) {\n        var args, $e;\n        args = [].slice.call(arguments, 1);\n        $e = this._trigger(\"before\" + type, args);\n        return $e.isDefaultPrevented();\n      },\n      trigger: function trigger(type) {\n        var deprecatedType;\n\n        this._trigger(type, [].slice.call(arguments, 1));\n\n        if (deprecatedType = deprecationMap[type]) {\n          this._trigger(deprecatedType, [].slice.call(arguments, 1));\n        }\n      }\n    });\n\n    return EventBus;\n  }();\n\n  var EventEmitter = function () {\n    \"use strict\";\n\n    var splitter = /\\s+/,\n        nextTick = getNextTick();\n    return {\n      onSync: onSync,\n      onAsync: onAsync,\n      off: off,\n      trigger: trigger\n    };\n\n    function on(method, types, cb, context) {\n      var type;\n\n      if (!cb) {\n        return this;\n      }\n\n      types = types.split(splitter);\n      cb = context ? bindContext(cb, context) : cb;\n      this._callbacks = this._callbacks || {};\n\n      while (type = types.shift()) {\n        this._callbacks[type] = this._callbacks[type] || {\n          sync: [],\n          async: []\n        };\n\n        this._callbacks[type][method].push(cb);\n      }\n\n      return this;\n    }\n\n    function onAsync(types, cb, context) {\n      return on.call(this, \"async\", types, cb, context);\n    }\n\n    function onSync(types, cb, context) {\n      return on.call(this, \"sync\", types, cb, context);\n    }\n\n    function off(types) {\n      var type;\n\n      if (!this._callbacks) {\n        return this;\n      }\n\n      types = types.split(splitter);\n\n      while (type = types.shift()) {\n        delete this._callbacks[type];\n      }\n\n      return this;\n    }\n\n    function trigger(types) {\n      var type, callbacks, args, syncFlush, asyncFlush;\n\n      if (!this._callbacks) {\n        return this;\n      }\n\n      types = types.split(splitter);\n      args = [].slice.call(arguments, 1);\n\n      while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\n        syncFlush = getFlush(callbacks.sync, this, [type].concat(args));\n        asyncFlush = getFlush(callbacks.async, this, [type].concat(args));\n        syncFlush() && nextTick(asyncFlush);\n      }\n\n      return this;\n    }\n\n    function getFlush(callbacks, context, args) {\n      return flush;\n\n      function flush() {\n        var cancelled;\n\n        for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\n          cancelled = callbacks[i].apply(context, args) === false;\n        }\n\n        return !cancelled;\n      }\n    }\n\n    function getNextTick() {\n      var nextTickFn;\n\n      if (window.setImmediate) {\n        nextTickFn = function nextTickSetImmediate(fn) {\n          setImmediate(function () {\n            fn();\n          });\n        };\n      } else {\n        nextTickFn = function nextTickSetTimeout(fn) {\n          setTimeout(function () {\n            fn();\n          }, 0);\n        };\n      }\n\n      return nextTickFn;\n    }\n\n    function bindContext(fn, context) {\n      return fn.bind ? fn.bind(context) : function () {\n        fn.apply(context, [].slice.call(arguments, 0));\n      };\n    }\n  }();\n\n  var highlight = function (doc) {\n    \"use strict\";\n\n    var defaults = {\n      node: null,\n      pattern: null,\n      tagName: \"strong\",\n      className: null,\n      wordsOnly: false,\n      caseSensitive: false,\n      diacriticInsensitive: false\n    };\n    var accented = {\n      A: \"[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]\",\n      B: \"[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]\",\n      C: \"[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]\",\n      D: \"[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]\",\n      E: \"[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]\",\n      F: \"[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]\",\n      G: \"[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]\",\n      H: \"[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]\",\n      I: \"[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]\",\n      J: \"[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]\",\n      K: \"[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]\",\n      L: \"[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]\",\n      M: \"[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]\",\n      N: \"[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]\",\n      O: \"[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]\",\n      P: \"[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]\",\n      Q: \"[Qqℚ⒬Ⓠⓠ㏃Qq]\",\n      R: \"[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]\",\n      S: \"[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]\",\n      T: \"[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]\",\n      U: \"[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]\",\n      V: \"[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]\",\n      W: \"[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]\",\n      X: \"[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]\",\n      Y: \"[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]\",\n      Z: \"[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]\"\n    };\n    return function hightlight(o) {\n      var regex;\n      o = _.mixin({}, defaults, o);\n\n      if (!o.node || !o.pattern) {\n        return;\n      }\n\n      o.pattern = _.isArray(o.pattern) ? o.pattern : [o.pattern];\n      regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive);\n      traverse(o.node, hightlightTextNode);\n\n      function hightlightTextNode(textNode) {\n        var match, patternNode, wrapperNode;\n\n        if (match = regex.exec(textNode.data)) {\n          wrapperNode = doc.createElement(o.tagName);\n          o.className && (wrapperNode.className = o.className);\n          patternNode = textNode.splitText(match.index);\n          patternNode.splitText(match[0].length);\n          wrapperNode.appendChild(patternNode.cloneNode(true));\n          textNode.parentNode.replaceChild(wrapperNode, patternNode);\n        }\n\n        return !!match;\n      }\n\n      function traverse(el, hightlightTextNode) {\n        var childNode,\n            TEXT_NODE_TYPE = 3;\n\n        for (var i = 0; i < el.childNodes.length; i++) {\n          childNode = el.childNodes[i];\n\n          if (childNode.nodeType === TEXT_NODE_TYPE) {\n            i += hightlightTextNode(childNode) ? 1 : 0;\n          } else {\n            traverse(childNode, hightlightTextNode);\n          }\n        }\n      }\n    };\n\n    function accent_replacer(chr) {\n      return accented[chr.toUpperCase()] || chr;\n    }\n\n    function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) {\n      var escapedPatterns = [],\n          regexStr;\n\n      for (var i = 0, len = patterns.length; i < len; i++) {\n        var escapedWord = _.escapeRegExChars(patterns[i]);\n\n        if (diacriticInsensitive) {\n          escapedWord = escapedWord.replace(/\\S/g, accent_replacer);\n        }\n\n        escapedPatterns.push(escapedWord);\n      }\n\n      regexStr = wordsOnly ? \"\\\\b(\" + escapedPatterns.join(\"|\") + \")\\\\b\" : \"(\" + escapedPatterns.join(\"|\") + \")\";\n      return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, \"i\");\n    }\n  }(window.document);\n\n  var Input = function () {\n    \"use strict\";\n\n    var specialKeyCodeMap;\n    specialKeyCodeMap = {\n      9: \"tab\",\n      27: \"esc\",\n      37: \"left\",\n      39: \"right\",\n      13: \"enter\",\n      38: \"up\",\n      40: \"down\"\n    };\n\n    function Input(o, www) {\n      var id;\n      o = o || {};\n\n      if (!o.input) {\n        $.error(\"input is missing\");\n      }\n\n      www.mixin(this);\n      this.$hint = $(o.hint);\n      this.$input = $(o.input);\n      this.$menu = $(o.menu);\n      id = this.$input.attr(\"id\") || _.guid();\n      this.$menu.attr(\"id\", id + \"_listbox\");\n      this.$hint.attr({\n        \"aria-hidden\": true\n      });\n      this.$input.attr({\n        \"aria-owns\": id + \"_listbox\",\n        role: \"combobox\",\n        \"aria-autocomplete\": \"list\",\n        \"aria-expanded\": false\n      });\n      this.query = this.$input.val();\n      this.queryWhenFocused = this.hasFocus() ? this.query : null;\n      this.$overflowHelper = buildOverflowHelper(this.$input);\n\n      this._checkLanguageDirection();\n\n      if (this.$hint.length === 0) {\n        this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\n      }\n\n      this.onSync(\"cursorchange\", this._updateDescendent);\n    }\n\n    Input.normalizeQuery = function (str) {\n      return _.toStr(str).replace(/^\\s*/g, \"\").replace(/\\s{2,}/g, \" \");\n    };\n\n    _.mixin(Input.prototype, EventEmitter, {\n      _onBlur: function onBlur() {\n        this.resetInputValue();\n        this.trigger(\"blurred\");\n      },\n      _onFocus: function onFocus() {\n        this.queryWhenFocused = this.query;\n        this.trigger(\"focused\");\n      },\n      _onKeydown: function onKeydown($e) {\n        var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\n\n        this._managePreventDefault(keyName, $e);\n\n        if (keyName && this._shouldTrigger(keyName, $e)) {\n          this.trigger(keyName + \"Keyed\", $e);\n        }\n      },\n      _onInput: function onInput() {\n        this._setQuery(this.getInputValue());\n\n        this.clearHintIfInvalid();\n\n        this._checkLanguageDirection();\n      },\n      _managePreventDefault: function managePreventDefault(keyName, $e) {\n        var preventDefault;\n\n        switch (keyName) {\n          case \"up\":\n          case \"down\":\n            preventDefault = !withModifier($e);\n            break;\n\n          default:\n            preventDefault = false;\n        }\n\n        preventDefault && $e.preventDefault();\n      },\n      _shouldTrigger: function shouldTrigger(keyName, $e) {\n        var trigger;\n\n        switch (keyName) {\n          case \"tab\":\n            trigger = !withModifier($e);\n            break;\n\n          default:\n            trigger = true;\n        }\n\n        return trigger;\n      },\n      _checkLanguageDirection: function checkLanguageDirection() {\n        var dir = (this.$input.css(\"direction\") || \"ltr\").toLowerCase();\n\n        if (this.dir !== dir) {\n          this.dir = dir;\n          this.$hint.attr(\"dir\", dir);\n          this.trigger(\"langDirChanged\", dir);\n        }\n      },\n      _setQuery: function setQuery(val, silent) {\n        var areEquivalent, hasDifferentWhitespace;\n        areEquivalent = areQueriesEquivalent(val, this.query);\n        hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;\n        this.query = val;\n\n        if (!silent && !areEquivalent) {\n          this.trigger(\"queryChanged\", this.query);\n        } else if (!silent && hasDifferentWhitespace) {\n          this.trigger(\"whitespaceChanged\", this.query);\n        }\n      },\n      _updateDescendent: function updateDescendent(event, id) {\n        this.$input.attr(\"aria-activedescendant\", id);\n      },\n      bind: function bind() {\n        var that = this,\n            onBlur,\n            onFocus,\n            onKeydown,\n            onInput;\n        onBlur = _.bind(this._onBlur, this);\n        onFocus = _.bind(this._onFocus, this);\n        onKeydown = _.bind(this._onKeydown, this);\n        onInput = _.bind(this._onInput, this);\n        this.$input.on(\"blur.tt\", onBlur).on(\"focus.tt\", onFocus).on(\"keydown.tt\", onKeydown);\n\n        if (!_.isMsie() || _.isMsie() > 9) {\n          this.$input.on(\"input.tt\", onInput);\n        } else {\n          this.$input.on(\"keydown.tt keypress.tt cut.tt paste.tt\", function ($e) {\n            if (specialKeyCodeMap[$e.which || $e.keyCode]) {\n              return;\n            }\n\n            _.defer(_.bind(that._onInput, that, $e));\n          });\n        }\n\n        return this;\n      },\n      focus: function focus() {\n        this.$input.focus();\n      },\n      blur: function blur() {\n        this.$input.blur();\n      },\n      getLangDir: function getLangDir() {\n        return this.dir;\n      },\n      getQuery: function getQuery() {\n        return this.query || \"\";\n      },\n      setQuery: function setQuery(val, silent) {\n        this.setInputValue(val);\n\n        this._setQuery(val, silent);\n      },\n      hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {\n        return this.query !== this.queryWhenFocused;\n      },\n      getInputValue: function getInputValue() {\n        return this.$input.val();\n      },\n      setInputValue: function setInputValue(value) {\n        this.$input.val(value);\n        this.clearHintIfInvalid();\n\n        this._checkLanguageDirection();\n      },\n      resetInputValue: function resetInputValue() {\n        this.setInputValue(this.query);\n      },\n      getHint: function getHint() {\n        return this.$hint.val();\n      },\n      setHint: function setHint(value) {\n        this.$hint.val(value);\n      },\n      clearHint: function clearHint() {\n        this.setHint(\"\");\n      },\n      clearHintIfInvalid: function clearHintIfInvalid() {\n        var val, hint, valIsPrefixOfHint, isValid;\n        val = this.getInputValue();\n        hint = this.getHint();\n        valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\n        isValid = val !== \"\" && valIsPrefixOfHint && !this.hasOverflow();\n        !isValid && this.clearHint();\n      },\n      hasFocus: function hasFocus() {\n        return this.$input.is(\":focus\");\n      },\n      hasOverflow: function hasOverflow() {\n        var constraint = this.$input.width() - 2;\n        this.$overflowHelper.text(this.getInputValue());\n        return this.$overflowHelper.width() >= constraint;\n      },\n      isCursorAtEnd: function isCursorAtEnd() {\n        var valueLength, selectionStart, range;\n        valueLength = this.$input.val().length;\n        selectionStart = this.$input[0].selectionStart;\n\n        if (_.isNumber(selectionStart)) {\n          return selectionStart === valueLength;\n        } else if (document.selection) {\n          range = document.selection.createRange();\n          range.moveStart(\"character\", -valueLength);\n          return valueLength === range.text.length;\n        }\n\n        return true;\n      },\n      destroy: function destroy() {\n        this.$hint.off(\".tt\");\n        this.$input.off(\".tt\");\n        this.$overflowHelper.remove();\n        this.$hint = this.$input = this.$overflowHelper = $(\"<div>\");\n      },\n      setAriaExpanded: function setAriaExpanded(value) {\n        this.$input.attr(\"aria-expanded\", value);\n      }\n    });\n\n    return Input;\n\n    function buildOverflowHelper($input) {\n      return $('<pre aria-hidden=\"true\"></pre>').css({\n        position: \"absolute\",\n        visibility: \"hidden\",\n        whiteSpace: \"pre\",\n        fontFamily: $input.css(\"font-family\"),\n        fontSize: $input.css(\"font-size\"),\n        fontStyle: $input.css(\"font-style\"),\n        fontVariant: $input.css(\"font-variant\"),\n        fontWeight: $input.css(\"font-weight\"),\n        wordSpacing: $input.css(\"word-spacing\"),\n        letterSpacing: $input.css(\"letter-spacing\"),\n        textIndent: $input.css(\"text-indent\"),\n        textRendering: $input.css(\"text-rendering\"),\n        textTransform: $input.css(\"text-transform\")\n      }).insertAfter($input);\n    }\n\n    function areQueriesEquivalent(a, b) {\n      return Input.normalizeQuery(a) === Input.normalizeQuery(b);\n    }\n\n    function withModifier($e) {\n      return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\n    }\n  }();\n\n  var Dataset = function () {\n    \"use strict\";\n\n    var keys, nameGenerator;\n    keys = {\n      dataset: \"tt-selectable-dataset\",\n      val: \"tt-selectable-display\",\n      obj: \"tt-selectable-object\"\n    };\n    nameGenerator = _.getIdGenerator();\n\n    function Dataset(o, www) {\n      o = o || {};\n      o.templates = o.templates || {};\n      o.templates.notFound = o.templates.notFound || o.templates.empty;\n\n      if (!o.source) {\n        $.error(\"missing source\");\n      }\n\n      if (!o.node) {\n        $.error(\"missing node\");\n      }\n\n      if (o.name && !isValidName(o.name)) {\n        $.error(\"invalid dataset name: \" + o.name);\n      }\n\n      www.mixin(this);\n      this.highlight = !!o.highlight;\n      this.name = _.toStr(o.name || nameGenerator());\n      this.limit = o.limit || 5;\n      this.displayFn = getDisplayFn(o.display || o.displayKey);\n      this.templates = getTemplates(o.templates, this.displayFn);\n      this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;\n      this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;\n\n      this._resetLastSuggestion();\n\n      this.$el = $(o.node).attr(\"role\", \"presentation\").addClass(this.classes.dataset).addClass(this.classes.dataset + \"-\" + this.name);\n    }\n\n    Dataset.extractData = function extractData(el) {\n      var $el = $(el);\n\n      if ($el.data(keys.obj)) {\n        return {\n          dataset: $el.data(keys.dataset) || \"\",\n          val: $el.data(keys.val) || \"\",\n          obj: $el.data(keys.obj) || null\n        };\n      }\n\n      return null;\n    };\n\n    _.mixin(Dataset.prototype, EventEmitter, {\n      _overwrite: function overwrite(query, suggestions) {\n        suggestions = suggestions || [];\n\n        if (suggestions.length) {\n          this._renderSuggestions(query, suggestions);\n        } else if (this.async && this.templates.pending) {\n          this._renderPending(query);\n        } else if (!this.async && this.templates.notFound) {\n          this._renderNotFound(query);\n        } else {\n          this._empty();\n        }\n\n        this.trigger(\"rendered\", suggestions, false, this.name);\n      },\n      _append: function append(query, suggestions) {\n        suggestions = suggestions || [];\n\n        if (suggestions.length && this.$lastSuggestion.length) {\n          this._appendSuggestions(query, suggestions);\n        } else if (suggestions.length) {\n          this._renderSuggestions(query, suggestions);\n        } else if (!this.$lastSuggestion.length && this.templates.notFound) {\n          this._renderNotFound(query);\n        }\n\n        this.trigger(\"rendered\", suggestions, true, this.name);\n      },\n      _renderSuggestions: function renderSuggestions(query, suggestions) {\n        var $fragment;\n        $fragment = this._getSuggestionsFragment(query, suggestions);\n        this.$lastSuggestion = $fragment.children().last();\n        this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));\n      },\n      _appendSuggestions: function appendSuggestions(query, suggestions) {\n        var $fragment, $lastSuggestion;\n        $fragment = this._getSuggestionsFragment(query, suggestions);\n        $lastSuggestion = $fragment.children().last();\n        this.$lastSuggestion.after($fragment);\n        this.$lastSuggestion = $lastSuggestion;\n      },\n      _renderPending: function renderPending(query) {\n        var template = this.templates.pending;\n\n        this._resetLastSuggestion();\n\n        template && this.$el.html(template({\n          query: query,\n          dataset: this.name\n        }));\n      },\n      _renderNotFound: function renderNotFound(query) {\n        var template = this.templates.notFound;\n\n        this._resetLastSuggestion();\n\n        template && this.$el.html(template({\n          query: query,\n          dataset: this.name\n        }));\n      },\n      _empty: function empty() {\n        this.$el.empty();\n\n        this._resetLastSuggestion();\n      },\n      _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {\n        var that = this,\n            fragment;\n        fragment = document.createDocumentFragment();\n\n        _.each(suggestions, function getSuggestionNode(suggestion) {\n          var $el, context;\n          context = that._injectQuery(query, suggestion);\n          $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + \" \" + that.classes.selectable);\n          fragment.appendChild($el[0]);\n        });\n\n        this.highlight && highlight({\n          className: this.classes.highlight,\n          node: fragment,\n          pattern: query\n        });\n        return $(fragment);\n      },\n      _getFooter: function getFooter(query, suggestions) {\n        return this.templates.footer ? this.templates.footer({\n          query: query,\n          suggestions: suggestions,\n          dataset: this.name\n        }) : null;\n      },\n      _getHeader: function getHeader(query, suggestions) {\n        return this.templates.header ? this.templates.header({\n          query: query,\n          suggestions: suggestions,\n          dataset: this.name\n        }) : null;\n      },\n      _resetLastSuggestion: function resetLastSuggestion() {\n        this.$lastSuggestion = $();\n      },\n      _injectQuery: function injectQuery(query, obj) {\n        return _.isObject(obj) ? _.mixin({\n          _query: query\n        }, obj) : obj;\n      },\n      update: function update(query) {\n        var that = this,\n            canceled = false,\n            syncCalled = false,\n            rendered = 0;\n        this.cancel();\n\n        this.cancel = function cancel() {\n          canceled = true;\n          that.cancel = $.noop;\n          that.async && that.trigger(\"asyncCanceled\", query, that.name);\n        };\n\n        this.source(query, sync, async);\n        !syncCalled && sync([]);\n\n        function sync(suggestions) {\n          if (syncCalled) {\n            return;\n          }\n\n          syncCalled = true;\n          suggestions = (suggestions || []).slice(0, that.limit);\n          rendered = suggestions.length;\n\n          that._overwrite(query, suggestions);\n\n          if (rendered < that.limit && that.async) {\n            that.trigger(\"asyncRequested\", query, that.name);\n          }\n        }\n\n        function async(suggestions) {\n          suggestions = suggestions || [];\n\n          if (!canceled && rendered < that.limit) {\n            that.cancel = $.noop;\n            var idx = Math.abs(rendered - that.limit);\n            rendered += idx;\n\n            that._append(query, suggestions.slice(0, idx));\n\n            that.async && that.trigger(\"asyncReceived\", query, that.name);\n          }\n        }\n      },\n      cancel: $.noop,\n      clear: function clear() {\n        this._empty();\n\n        this.cancel();\n        this.trigger(\"cleared\");\n      },\n      isEmpty: function isEmpty() {\n        return this.$el.is(\":empty\");\n      },\n      destroy: function destroy() {\n        this.$el = $(\"<div>\");\n      }\n    });\n\n    return Dataset;\n\n    function getDisplayFn(display) {\n      display = display || _.stringify;\n      return _.isFunction(display) ? display : displayFn;\n\n      function displayFn(obj) {\n        return obj[display];\n      }\n    }\n\n    function getTemplates(templates, displayFn) {\n      return {\n        notFound: templates.notFound && _.templatify(templates.notFound),\n        pending: templates.pending && _.templatify(templates.pending),\n        header: templates.header && _.templatify(templates.header),\n        footer: templates.footer && _.templatify(templates.footer),\n        suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate\n      };\n\n      function userSuggestionTemplate(context) {\n        var template = templates.suggestion;\n        return $(template(context)).attr(\"id\", _.guid());\n      }\n\n      function suggestionTemplate(context) {\n        return $('<div role=\"option\">').attr(\"id\", _.guid()).text(displayFn(context));\n      }\n    }\n\n    function isValidName(str) {\n      return /^[_a-zA-Z0-9-]+$/.test(str);\n    }\n  }();\n\n  var Menu = function () {\n    \"use strict\";\n\n    function Menu(o, www) {\n      var that = this;\n      o = o || {};\n\n      if (!o.node) {\n        $.error(\"node is required\");\n      }\n\n      www.mixin(this);\n      this.$node = $(o.node);\n      this.query = null;\n      this.datasets = _.map(o.datasets, initializeDataset);\n\n      function initializeDataset(oDataset) {\n        var node = that.$node.find(oDataset.node).first();\n        oDataset.node = node.length ? node : $(\"<div>\").appendTo(that.$node);\n        return new Dataset(oDataset, www);\n      }\n    }\n\n    _.mixin(Menu.prototype, EventEmitter, {\n      _onSelectableClick: function onSelectableClick($e) {\n        this.trigger(\"selectableClicked\", $($e.currentTarget));\n      },\n      _onRendered: function onRendered(type, dataset, suggestions, async) {\n        this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n        this.trigger(\"datasetRendered\", dataset, suggestions, async);\n      },\n      _onCleared: function onCleared() {\n        this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\n        this.trigger(\"datasetCleared\");\n      },\n      _propagate: function propagate() {\n        this.trigger.apply(this, arguments);\n      },\n      _allDatasetsEmpty: function allDatasetsEmpty() {\n        return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) {\n          var isEmpty = dataset.isEmpty();\n          this.$node.attr(\"aria-expanded\", !isEmpty);\n          return isEmpty;\n        }, this));\n      },\n      _getSelectables: function getSelectables() {\n        return this.$node.find(this.selectors.selectable);\n      },\n      _removeCursor: function _removeCursor() {\n        var $selectable = this.getActiveSelectable();\n        $selectable && $selectable.removeClass(this.classes.cursor);\n      },\n      _ensureVisible: function ensureVisible($el) {\n        var elTop, elBottom, nodeScrollTop, nodeHeight;\n        elTop = $el.position().top;\n        elBottom = elTop + $el.outerHeight(true);\n        nodeScrollTop = this.$node.scrollTop();\n        nodeHeight = this.$node.height() + parseInt(this.$node.css(\"paddingTop\"), 10) + parseInt(this.$node.css(\"paddingBottom\"), 10);\n\n        if (elTop < 0) {\n          this.$node.scrollTop(nodeScrollTop + elTop);\n        } else if (nodeHeight < elBottom) {\n          this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));\n        }\n      },\n      bind: function bind() {\n        var that = this,\n            onSelectableClick;\n        onSelectableClick = _.bind(this._onSelectableClick, this);\n        this.$node.on(\"click.tt\", this.selectors.selectable, onSelectableClick);\n        this.$node.on(\"mouseover\", this.selectors.selectable, function () {\n          that.setCursor($(this));\n        });\n        this.$node.on(\"mouseleave\", function () {\n          that._removeCursor();\n        });\n\n        _.each(this.datasets, function (dataset) {\n          dataset.onSync(\"asyncRequested\", that._propagate, that).onSync(\"asyncCanceled\", that._propagate, that).onSync(\"asyncReceived\", that._propagate, that).onSync(\"rendered\", that._onRendered, that).onSync(\"cleared\", that._onCleared, that);\n        });\n\n        return this;\n      },\n      isOpen: function isOpen() {\n        return this.$node.hasClass(this.classes.open);\n      },\n      open: function open() {\n        this.$node.scrollTop(0);\n        this.$node.addClass(this.classes.open);\n      },\n      close: function close() {\n        this.$node.attr(\"aria-expanded\", false);\n        this.$node.removeClass(this.classes.open);\n\n        this._removeCursor();\n      },\n      setLanguageDirection: function setLanguageDirection(dir) {\n        this.$node.attr(\"dir\", dir);\n      },\n      selectableRelativeToCursor: function selectableRelativeToCursor(delta) {\n        var $selectables, $oldCursor, oldIndex, newIndex;\n        $oldCursor = this.getActiveSelectable();\n        $selectables = this._getSelectables();\n        oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;\n        newIndex = oldIndex + delta;\n        newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;\n        newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;\n        return newIndex === -1 ? null : $selectables.eq(newIndex);\n      },\n      setCursor: function setCursor($selectable) {\n        this._removeCursor();\n\n        if ($selectable = $selectable && $selectable.first()) {\n          $selectable.addClass(this.classes.cursor);\n\n          this._ensureVisible($selectable);\n        }\n      },\n      getSelectableData: function getSelectableData($el) {\n        return $el && $el.length ? Dataset.extractData($el) : null;\n      },\n      getActiveSelectable: function getActiveSelectable() {\n        var $selectable = this._getSelectables().filter(this.selectors.cursor).first();\n\n        return $selectable.length ? $selectable : null;\n      },\n      getTopSelectable: function getTopSelectable() {\n        var $selectable = this._getSelectables().first();\n\n        return $selectable.length ? $selectable : null;\n      },\n      update: function update(query) {\n        var isValidUpdate = query !== this.query;\n\n        if (isValidUpdate) {\n          this.query = query;\n\n          _.each(this.datasets, updateDataset);\n        }\n\n        return isValidUpdate;\n\n        function updateDataset(dataset) {\n          dataset.update(query);\n        }\n      },\n      empty: function empty() {\n        _.each(this.datasets, clearDataset);\n\n        this.query = null;\n        this.$node.addClass(this.classes.empty);\n\n        function clearDataset(dataset) {\n          dataset.clear();\n        }\n      },\n      destroy: function destroy() {\n        this.$node.off(\".tt\");\n        this.$node = $(\"<div>\");\n\n        _.each(this.datasets, destroyDataset);\n\n        function destroyDataset(dataset) {\n          dataset.destroy();\n        }\n      }\n    });\n\n    return Menu;\n  }();\n\n  var Status = function () {\n    \"use strict\";\n\n    function Status(options) {\n      this.$el = $(\"<span></span>\", {\n        role: \"status\",\n        \"aria-live\": \"polite\"\n      }).css({\n        position: \"absolute\",\n        padding: \"0\",\n        border: \"0\",\n        height: \"1px\",\n        width: \"1px\",\n        \"margin-bottom\": \"-1px\",\n        \"margin-right\": \"-1px\",\n        overflow: \"hidden\",\n        clip: \"rect(0 0 0 0)\",\n        \"white-space\": \"nowrap\"\n      });\n      options.$input.after(this.$el);\n\n      _.each(options.menu.datasets, _.bind(function (dataset) {\n        if (dataset.onSync) {\n          dataset.onSync(\"rendered\", _.bind(this.update, this));\n          dataset.onSync(\"cleared\", _.bind(this.cleared, this));\n        }\n      }, this));\n    }\n\n    _.mixin(Status.prototype, {\n      update: function update(event, suggestions) {\n        var length = suggestions.length;\n        var words;\n\n        if (length === 1) {\n          words = {\n            result: \"result\",\n            is: \"is\"\n          };\n        } else {\n          words = {\n            result: \"results\",\n            is: \"are\"\n          };\n        }\n\n        this.$el.text(length + \" \" + words.result + \" \" + words.is + \" available, use up and down arrow keys to navigate.\");\n      },\n      cleared: function cleared() {\n        this.$el.text(\"\");\n      }\n    });\n\n    return Status;\n  }();\n\n  var DefaultMenu = function () {\n    \"use strict\";\n\n    var s = Menu.prototype;\n\n    function DefaultMenu() {\n      Menu.apply(this, [].slice.call(arguments, 0));\n    }\n\n    _.mixin(DefaultMenu.prototype, Menu.prototype, {\n      open: function open() {\n        !this._allDatasetsEmpty() && this._show();\n        return s.open.apply(this, [].slice.call(arguments, 0));\n      },\n      close: function close() {\n        this._hide();\n\n        return s.close.apply(this, [].slice.call(arguments, 0));\n      },\n      _onRendered: function onRendered() {\n        if (this._allDatasetsEmpty()) {\n          this._hide();\n        } else {\n          this.isOpen() && this._show();\n        }\n\n        return s._onRendered.apply(this, [].slice.call(arguments, 0));\n      },\n      _onCleared: function onCleared() {\n        if (this._allDatasetsEmpty()) {\n          this._hide();\n        } else {\n          this.isOpen() && this._show();\n        }\n\n        return s._onCleared.apply(this, [].slice.call(arguments, 0));\n      },\n      setLanguageDirection: function setLanguageDirection(dir) {\n        this.$node.css(dir === \"ltr\" ? this.css.ltr : this.css.rtl);\n        return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));\n      },\n      _hide: function hide() {\n        this.$node.hide();\n      },\n      _show: function show() {\n        this.$node.css(\"display\", \"block\");\n      }\n    });\n\n    return DefaultMenu;\n  }();\n\n  var Typeahead = function () {\n    \"use strict\";\n\n    function Typeahead(o, www) {\n      var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;\n      o = o || {};\n\n      if (!o.input) {\n        $.error(\"missing input\");\n      }\n\n      if (!o.menu) {\n        $.error(\"missing menu\");\n      }\n\n      if (!o.eventBus) {\n        $.error(\"missing event bus\");\n      }\n\n      www.mixin(this);\n      this.eventBus = o.eventBus;\n      this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\n      this.input = o.input;\n      this.menu = o.menu;\n      this.enabled = true;\n      this.autoselect = !!o.autoselect;\n      this.active = false;\n      this.input.hasFocus() && this.activate();\n      this.dir = this.input.getLangDir();\n\n      this._hacks();\n\n      this.menu.bind().onSync(\"selectableClicked\", this._onSelectableClicked, this).onSync(\"asyncRequested\", this._onAsyncRequested, this).onSync(\"asyncCanceled\", this._onAsyncCanceled, this).onSync(\"asyncReceived\", this._onAsyncReceived, this).onSync(\"datasetRendered\", this._onDatasetRendered, this).onSync(\"datasetCleared\", this._onDatasetCleared, this);\n      onFocused = c(this, \"activate\", \"open\", \"_onFocused\");\n      onBlurred = c(this, \"deactivate\", \"_onBlurred\");\n      onEnterKeyed = c(this, \"isActive\", \"isOpen\", \"_onEnterKeyed\");\n      onTabKeyed = c(this, \"isActive\", \"isOpen\", \"_onTabKeyed\");\n      onEscKeyed = c(this, \"isActive\", \"_onEscKeyed\");\n      onUpKeyed = c(this, \"isActive\", \"open\", \"_onUpKeyed\");\n      onDownKeyed = c(this, \"isActive\", \"open\", \"_onDownKeyed\");\n      onLeftKeyed = c(this, \"isActive\", \"isOpen\", \"_onLeftKeyed\");\n      onRightKeyed = c(this, \"isActive\", \"isOpen\", \"_onRightKeyed\");\n      onQueryChanged = c(this, \"_openIfActive\", \"_onQueryChanged\");\n      onWhitespaceChanged = c(this, \"_openIfActive\", \"_onWhitespaceChanged\");\n      this.input.bind().onSync(\"focused\", onFocused, this).onSync(\"blurred\", onBlurred, this).onSync(\"enterKeyed\", onEnterKeyed, this).onSync(\"tabKeyed\", onTabKeyed, this).onSync(\"escKeyed\", onEscKeyed, this).onSync(\"upKeyed\", onUpKeyed, this).onSync(\"downKeyed\", onDownKeyed, this).onSync(\"leftKeyed\", onLeftKeyed, this).onSync(\"rightKeyed\", onRightKeyed, this).onSync(\"queryChanged\", onQueryChanged, this).onSync(\"whitespaceChanged\", onWhitespaceChanged, this).onSync(\"langDirChanged\", this._onLangDirChanged, this);\n    }\n\n    _.mixin(Typeahead.prototype, {\n      _hacks: function hacks() {\n        var $input, $menu;\n        $input = this.input.$input || $(\"<div>\");\n        $menu = this.menu.$node || $(\"<div>\");\n        $input.on(\"blur.tt\", function ($e) {\n          var active, isActive, hasActive;\n          active = document.activeElement;\n          isActive = $menu.is(active);\n          hasActive = $menu.has(active).length > 0;\n\n          if (_.isMsie() && (isActive || hasActive)) {\n            $e.preventDefault();\n            $e.stopImmediatePropagation();\n\n            _.defer(function () {\n              $input.focus();\n            });\n          }\n        });\n        $menu.on(\"mousedown.tt\", function ($e) {\n          $e.preventDefault();\n        });\n      },\n      _onSelectableClicked: function onSelectableClicked(type, $el) {\n        this.select($el);\n      },\n      _onDatasetCleared: function onDatasetCleared() {\n        this._updateHint();\n      },\n      _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) {\n        this._updateHint();\n\n        if (this.autoselect) {\n          var cursorClass = this.selectors.cursor.substr(1);\n          this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass);\n        }\n\n        this.eventBus.trigger(\"render\", suggestions, async, dataset);\n      },\n      _onAsyncRequested: function onAsyncRequested(type, dataset, query) {\n        this.eventBus.trigger(\"asyncrequest\", query, dataset);\n      },\n      _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {\n        this.eventBus.trigger(\"asynccancel\", query, dataset);\n      },\n      _onAsyncReceived: function onAsyncReceived(type, dataset, query) {\n        this.eventBus.trigger(\"asyncreceive\", query, dataset);\n      },\n      _onFocused: function onFocused() {\n        this._minLengthMet() && this.menu.update(this.input.getQuery());\n      },\n      _onBlurred: function onBlurred() {\n        if (this.input.hasQueryChangedSinceLastFocus()) {\n          this.eventBus.trigger(\"change\", this.input.getQuery());\n        }\n      },\n      _onEnterKeyed: function onEnterKeyed(type, $e) {\n        var $selectable;\n\n        if ($selectable = this.menu.getActiveSelectable()) {\n          if (this.select($selectable)) {\n            $e.preventDefault();\n            $e.stopPropagation();\n          }\n        } else if (this.autoselect) {\n          if (this.select(this.menu.getTopSelectable())) {\n            $e.preventDefault();\n            $e.stopPropagation();\n          }\n        }\n      },\n      _onTabKeyed: function onTabKeyed(type, $e) {\n        var $selectable;\n\n        if ($selectable = this.menu.getActiveSelectable()) {\n          this.select($selectable) && $e.preventDefault();\n        } else if (this.autoselect) {\n          if ($selectable = this.menu.getTopSelectable()) {\n            this.autocomplete($selectable) && $e.preventDefault();\n          }\n        }\n      },\n      _onEscKeyed: function onEscKeyed() {\n        this.close();\n      },\n      _onUpKeyed: function onUpKeyed() {\n        this.moveCursor(-1);\n      },\n      _onDownKeyed: function onDownKeyed() {\n        this.moveCursor(+1);\n      },\n      _onLeftKeyed: function onLeftKeyed() {\n        if (this.dir === \"rtl\" && this.input.isCursorAtEnd()) {\n          this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\n        }\n      },\n      _onRightKeyed: function onRightKeyed() {\n        if (this.dir === \"ltr\" && this.input.isCursorAtEnd()) {\n          this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\n        }\n      },\n      _onQueryChanged: function onQueryChanged(e, query) {\n        this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();\n      },\n      _onWhitespaceChanged: function onWhitespaceChanged() {\n        this._updateHint();\n      },\n      _onLangDirChanged: function onLangDirChanged(e, dir) {\n        if (this.dir !== dir) {\n          this.dir = dir;\n          this.menu.setLanguageDirection(dir);\n        }\n      },\n      _openIfActive: function openIfActive() {\n        this.isActive() && this.open();\n      },\n      _minLengthMet: function minLengthMet(query) {\n        query = _.isString(query) ? query : this.input.getQuery() || \"\";\n        return query.length >= this.minLength;\n      },\n      _updateHint: function updateHint() {\n        var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;\n        $selectable = this.menu.getTopSelectable();\n        data = this.menu.getSelectableData($selectable);\n        val = this.input.getInputValue();\n\n        if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {\n          query = Input.normalizeQuery(val);\n          escapedQuery = _.escapeRegExChars(query);\n          frontMatchRegEx = new RegExp(\"^(?:\" + escapedQuery + \")(.+$)\", \"i\");\n          match = frontMatchRegEx.exec(data.val);\n          match && this.input.setHint(val + match[1]);\n        } else {\n          this.input.clearHint();\n        }\n      },\n      isEnabled: function isEnabled() {\n        return this.enabled;\n      },\n      enable: function enable() {\n        this.enabled = true;\n      },\n      disable: function disable() {\n        this.enabled = false;\n      },\n      isActive: function isActive() {\n        return this.active;\n      },\n      activate: function activate() {\n        if (this.isActive()) {\n          return true;\n        } else if (!this.isEnabled() || this.eventBus.before(\"active\")) {\n          return false;\n        } else {\n          this.active = true;\n          this.eventBus.trigger(\"active\");\n          return true;\n        }\n      },\n      deactivate: function deactivate() {\n        if (!this.isActive()) {\n          return true;\n        } else if (this.eventBus.before(\"idle\")) {\n          return false;\n        } else {\n          this.active = false;\n          this.close();\n          this.eventBus.trigger(\"idle\");\n          return true;\n        }\n      },\n      isOpen: function isOpen() {\n        return this.menu.isOpen();\n      },\n      open: function open() {\n        if (!this.isOpen() && !this.eventBus.before(\"open\")) {\n          this.input.setAriaExpanded(true);\n          this.menu.open();\n\n          this._updateHint();\n\n          this.eventBus.trigger(\"open\");\n        }\n\n        return this.isOpen();\n      },\n      close: function close() {\n        if (this.isOpen() && !this.eventBus.before(\"close\")) {\n          this.input.setAriaExpanded(false);\n          this.menu.close();\n          this.input.clearHint();\n          this.input.resetInputValue();\n          this.eventBus.trigger(\"close\");\n        }\n\n        return !this.isOpen();\n      },\n      setVal: function setVal(val) {\n        this.input.setQuery(_.toStr(val));\n      },\n      getVal: function getVal() {\n        return this.input.getQuery();\n      },\n      select: function select($selectable) {\n        var data = this.menu.getSelectableData($selectable);\n\n        if (data && !this.eventBus.before(\"select\", data.obj, data.dataset)) {\n          this.input.setQuery(data.val, true);\n          this.eventBus.trigger(\"select\", data.obj, data.dataset);\n          this.close();\n          return true;\n        }\n\n        return false;\n      },\n      autocomplete: function autocomplete($selectable) {\n        var query, data, isValid;\n        query = this.input.getQuery();\n        data = this.menu.getSelectableData($selectable);\n        isValid = data && query !== data.val;\n\n        if (isValid && !this.eventBus.before(\"autocomplete\", data.obj, data.dataset)) {\n          this.input.setQuery(data.val);\n          this.eventBus.trigger(\"autocomplete\", data.obj, data.dataset);\n          return true;\n        }\n\n        return false;\n      },\n      moveCursor: function moveCursor(delta) {\n        var query, $candidate, data, suggestion, datasetName, cancelMove, id;\n        query = this.input.getQuery();\n        $candidate = this.menu.selectableRelativeToCursor(delta);\n        data = this.menu.getSelectableData($candidate);\n        suggestion = data ? data.obj : null;\n        datasetName = data ? data.dataset : null;\n        id = $candidate ? $candidate.attr(\"id\") : null;\n        this.input.trigger(\"cursorchange\", id);\n        cancelMove = this._minLengthMet() && this.menu.update(query);\n\n        if (!cancelMove && !this.eventBus.before(\"cursorchange\", suggestion, datasetName)) {\n          this.menu.setCursor($candidate);\n\n          if (data) {\n            if (typeof data.val === \"string\") {\n              this.input.setInputValue(data.val);\n            }\n          } else {\n            this.input.resetInputValue();\n\n            this._updateHint();\n          }\n\n          this.eventBus.trigger(\"cursorchange\", suggestion, datasetName);\n          return true;\n        }\n\n        return false;\n      },\n      destroy: function destroy() {\n        this.input.destroy();\n        this.menu.destroy();\n      }\n    });\n\n    return Typeahead;\n\n    function c(ctx) {\n      var methods = [].slice.call(arguments, 1);\n      return function () {\n        var args = [].slice.call(arguments);\n\n        _.each(methods, function (method) {\n          return ctx[method].apply(ctx, args);\n        });\n      };\n    }\n  }();\n\n  (function () {\n    \"use strict\";\n\n    var old, keys, methods;\n    old = $.fn.typeahead;\n    keys = {\n      www: \"tt-www\",\n      attrs: \"tt-attrs\",\n      typeahead: \"tt-typeahead\"\n    };\n    methods = {\n      initialize: function initialize(o, datasets) {\n        var www;\n        datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);\n        o = o || {};\n        www = WWW(o.classNames);\n        return this.each(attach);\n\n        function attach() {\n          var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor;\n\n          _.each(datasets, function (d) {\n            d.highlight = !!o.highlight;\n          });\n\n          $input = $(this);\n          $wrapper = $(www.html.wrapper);\n          $hint = $elOrNull(o.hint);\n          $menu = $elOrNull(o.menu);\n          defaultHint = o.hint !== false && !$hint;\n          defaultMenu = o.menu !== false && !$menu;\n          defaultHint && ($hint = buildHintFromInput($input, www));\n          defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));\n          $hint && $hint.val(\"\");\n          $input = prepInput($input, www);\n\n          if (defaultHint || defaultMenu) {\n            $wrapper.css(www.css.wrapper);\n            $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);\n            $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);\n          }\n\n          MenuConstructor = defaultMenu ? DefaultMenu : Menu;\n          eventBus = new EventBus({\n            el: $input\n          });\n          input = new Input({\n            hint: $hint,\n            input: $input,\n            menu: $menu\n          }, www);\n          menu = new MenuConstructor({\n            node: $menu,\n            datasets: datasets\n          }, www);\n          status = new Status({\n            $input: $input,\n            menu: menu\n          });\n          typeahead = new Typeahead({\n            input: input,\n            menu: menu,\n            eventBus: eventBus,\n            minLength: o.minLength,\n            autoselect: o.autoselect\n          }, www);\n          $input.data(keys.www, www);\n          $input.data(keys.typeahead, typeahead);\n        }\n      },\n      isEnabled: function isEnabled() {\n        var enabled;\n        ttEach(this.first(), function (t) {\n          enabled = t.isEnabled();\n        });\n        return enabled;\n      },\n      enable: function enable() {\n        ttEach(this, function (t) {\n          t.enable();\n        });\n        return this;\n      },\n      disable: function disable() {\n        ttEach(this, function (t) {\n          t.disable();\n        });\n        return this;\n      },\n      isActive: function isActive() {\n        var active;\n        ttEach(this.first(), function (t) {\n          active = t.isActive();\n        });\n        return active;\n      },\n      activate: function activate() {\n        ttEach(this, function (t) {\n          t.activate();\n        });\n        return this;\n      },\n      deactivate: function deactivate() {\n        ttEach(this, function (t) {\n          t.deactivate();\n        });\n        return this;\n      },\n      isOpen: function isOpen() {\n        var open;\n        ttEach(this.first(), function (t) {\n          open = t.isOpen();\n        });\n        return open;\n      },\n      open: function open() {\n        ttEach(this, function (t) {\n          t.open();\n        });\n        return this;\n      },\n      close: function close() {\n        ttEach(this, function (t) {\n          t.close();\n        });\n        return this;\n      },\n      select: function select(el) {\n        var success = false,\n            $el = $(el);\n        ttEach(this.first(), function (t) {\n          success = t.select($el);\n        });\n        return success;\n      },\n      autocomplete: function autocomplete(el) {\n        var success = false,\n            $el = $(el);\n        ttEach(this.first(), function (t) {\n          success = t.autocomplete($el);\n        });\n        return success;\n      },\n      moveCursor: function moveCursoe(delta) {\n        var success = false;\n        ttEach(this.first(), function (t) {\n          success = t.moveCursor(delta);\n        });\n        return success;\n      },\n      val: function val(newVal) {\n        var query;\n\n        if (!arguments.length) {\n          ttEach(this.first(), function (t) {\n            query = t.getVal();\n          });\n          return query;\n        } else {\n          ttEach(this, function (t) {\n            t.setVal(_.toStr(newVal));\n          });\n          return this;\n        }\n      },\n      destroy: function destroy() {\n        ttEach(this, function (typeahead, $input) {\n          revert($input);\n          typeahead.destroy();\n        });\n        return this;\n      }\n    };\n\n    $.fn.typeahead = function (method) {\n      if (methods[method]) {\n        return methods[method].apply(this, [].slice.call(arguments, 1));\n      } else {\n        return methods.initialize.apply(this, arguments);\n      }\n    };\n\n    $.fn.typeahead.noConflict = function noConflict() {\n      $.fn.typeahead = old;\n      return this;\n    };\n\n    function ttEach($els, fn) {\n      $els.each(function () {\n        var $input = $(this),\n            typeahead;\n        (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);\n      });\n    }\n\n    function buildHintFromInput($input, www) {\n      return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({\n        readonly: true,\n        required: false\n      }).removeAttr(\"id name placeholder\").removeClass(\"required\").attr({\n        spellcheck: \"false\",\n        tabindex: -1\n      });\n    }\n\n    function prepInput($input, www) {\n      $input.data(keys.attrs, {\n        dir: $input.attr(\"dir\"),\n        autocomplete: $input.attr(\"autocomplete\"),\n        spellcheck: $input.attr(\"spellcheck\"),\n        style: $input.attr(\"style\")\n      });\n      $input.addClass(www.classes.input).attr({\n        spellcheck: false\n      });\n\n      try {\n        !$input.attr(\"dir\") && $input.attr(\"dir\", \"auto\");\n      } catch (e) {}\n\n      return $input;\n    }\n\n    function getBackgroundStyles($el) {\n      return {\n        backgroundAttachment: $el.css(\"background-attachment\"),\n        backgroundClip: $el.css(\"background-clip\"),\n        backgroundColor: $el.css(\"background-color\"),\n        backgroundImage: $el.css(\"background-image\"),\n        backgroundOrigin: $el.css(\"background-origin\"),\n        backgroundPosition: $el.css(\"background-position\"),\n        backgroundRepeat: $el.css(\"background-repeat\"),\n        backgroundSize: $el.css(\"background-size\")\n      };\n    }\n\n    function revert($input) {\n      var www, $wrapper;\n      www = $input.data(keys.www);\n      $wrapper = $input.parent().filter(www.selectors.wrapper);\n\n      _.each($input.data(keys.attrs), function (val, key) {\n        _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);\n      });\n\n      $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);\n\n      if ($wrapper.length) {\n        $input.detach().insertAfter($wrapper);\n        $wrapper.remove();\n      }\n    }\n\n    function $elOrNull(obj) {\n      var isValid, $el;\n      isValid = _.isJQuery(obj) || _.isElement(obj);\n      $el = isValid ? $(obj).first() : [];\n      return $el.length ? $el : null;\n    }\n  })();\n});","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply; // DOM APIs, for completeness\n\nexports.setTimeout = function () {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\n\nexports.setInterval = function () {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\n\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\n\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\n\nTimeout.prototype.close = function () {\n  this._clearFn.call(scope, this._id);\n}; // Does not start the time, just sets up the members needed.\n\n\nexports.enroll = function (item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  var msecs = item._idleTimeout;\n\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout) item._onTimeout();\n    }, msecs);\n  }\n}; // setimmediate attaches itself to the global object\n\n\nrequire(\"setimmediate\"); // On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\n\n\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","(function (global, undefined) {\n  \"use strict\";\n\n  if (global.setImmediate) {\n    return;\n  }\n\n  var nextHandle = 1; // Spec says greater than zero\n\n  var tasksByHandle = {};\n  var currentlyRunningATask = false;\n  var doc = global.document;\n  var registerImmediate;\n\n  function setImmediate(callback) {\n    // Callback can either be a function or a string\n    if (typeof callback !== \"function\") {\n      callback = new Function(\"\" + callback);\n    } // Copy function arguments\n\n\n    var args = new Array(arguments.length - 1);\n\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i + 1];\n    } // Store and register the task\n\n\n    var task = {\n      callback: callback,\n      args: args\n    };\n    tasksByHandle[nextHandle] = task;\n    registerImmediate(nextHandle);\n    return nextHandle++;\n  }\n\n  function clearImmediate(handle) {\n    delete tasksByHandle[handle];\n  }\n\n  function run(task) {\n    var callback = task.callback;\n    var args = task.args;\n\n    switch (args.length) {\n      case 0:\n        callback();\n        break;\n\n      case 1:\n        callback(args[0]);\n        break;\n\n      case 2:\n        callback(args[0], args[1]);\n        break;\n\n      case 3:\n        callback(args[0], args[1], args[2]);\n        break;\n\n      default:\n        callback.apply(undefined, args);\n        break;\n    }\n  }\n\n  function runIfPresent(handle) {\n    // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n    // So if we're currently running a task, we'll need to delay this invocation.\n    if (currentlyRunningATask) {\n      // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n      // \"too much recursion\" error.\n      setTimeout(runIfPresent, 0, handle);\n    } else {\n      var task = tasksByHandle[handle];\n\n      if (task) {\n        currentlyRunningATask = true;\n\n        try {\n          run(task);\n        } finally {\n          clearImmediate(handle);\n          currentlyRunningATask = false;\n        }\n      }\n    }\n  }\n\n  function installNextTickImplementation() {\n    registerImmediate = function registerImmediate(handle) {\n      process.nextTick(function () {\n        runIfPresent(handle);\n      });\n    };\n  }\n\n  function canUsePostMessage() {\n    // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n    // where `global.postMessage` means something completely different and can't be used for this purpose.\n    if (global.postMessage && !global.importScripts) {\n      var postMessageIsAsynchronous = true;\n      var oldOnMessage = global.onmessage;\n\n      global.onmessage = function () {\n        postMessageIsAsynchronous = false;\n      };\n\n      global.postMessage(\"\", \"*\");\n      global.onmessage = oldOnMessage;\n      return postMessageIsAsynchronous;\n    }\n  }\n\n  function installPostMessageImplementation() {\n    // Installs an event handler on `global` for the `message` event: see\n    // * https://developer.mozilla.org/en/DOM/window.postMessage\n    // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n    var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n\n    var onGlobalMessage = function onGlobalMessage(event) {\n      if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n        runIfPresent(+event.data.slice(messagePrefix.length));\n      }\n    };\n\n    if (global.addEventListener) {\n      global.addEventListener(\"message\", onGlobalMessage, false);\n    } else {\n      global.attachEvent(\"onmessage\", onGlobalMessage);\n    }\n\n    registerImmediate = function registerImmediate(handle) {\n      global.postMessage(messagePrefix + handle, \"*\");\n    };\n  }\n\n  function installMessageChannelImplementation() {\n    var channel = new MessageChannel();\n\n    channel.port1.onmessage = function (event) {\n      var handle = event.data;\n      runIfPresent(handle);\n    };\n\n    registerImmediate = function registerImmediate(handle) {\n      channel.port2.postMessage(handle);\n    };\n  }\n\n  function installReadyStateChangeImplementation() {\n    var html = doc.documentElement;\n\n    registerImmediate = function registerImmediate(handle) {\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var script = doc.createElement(\"script\");\n\n      script.onreadystatechange = function () {\n        runIfPresent(handle);\n        script.onreadystatechange = null;\n        html.removeChild(script);\n        script = null;\n      };\n\n      html.appendChild(script);\n    };\n  }\n\n  function installSetTimeoutImplementation() {\n    registerImmediate = function registerImmediate(handle) {\n      setTimeout(runIfPresent, 0, handle);\n    };\n  } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n\n\n  var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n  attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments.\n\n  if ({}.toString.call(global.process) === \"[object process]\") {\n    // For Node.js before 0.9\n    installNextTickImplementation();\n  } else if (canUsePostMessage()) {\n    // For non-IE10 modern browsers\n    installPostMessageImplementation();\n  } else if (global.MessageChannel) {\n    // For web workers, where supported\n    installMessageChannelImplementation();\n  } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n    // For IE 6–8\n    installReadyStateChangeImplementation();\n  } else {\n    // For older browsers\n    installSetTimeoutImplementation();\n  }\n\n  attachTo.setImmediate = setImmediate;\n  attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n  throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n  throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n  try {\n    if (typeof setTimeout === 'function') {\n      cachedSetTimeout = setTimeout;\n    } else {\n      cachedSetTimeout = defaultSetTimout;\n    }\n  } catch (e) {\n    cachedSetTimeout = defaultSetTimout;\n  }\n\n  try {\n    if (typeof clearTimeout === 'function') {\n      cachedClearTimeout = clearTimeout;\n    } else {\n      cachedClearTimeout = defaultClearTimeout;\n    }\n  } catch (e) {\n    cachedClearTimeout = defaultClearTimeout;\n  }\n})();\n\nfunction runTimeout(fun) {\n  if (cachedSetTimeout === setTimeout) {\n    //normal enviroments in sane situations\n    return setTimeout(fun, 0);\n  } // if setTimeout wasn't available but was latter defined\n\n\n  if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n    cachedSetTimeout = setTimeout;\n    return setTimeout(fun, 0);\n  }\n\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedSetTimeout(fun, 0);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n      return cachedSetTimeout.call(null, fun, 0);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n      return cachedSetTimeout.call(this, fun, 0);\n    }\n  }\n}\n\nfunction runClearTimeout(marker) {\n  if (cachedClearTimeout === clearTimeout) {\n    //normal enviroments in sane situations\n    return clearTimeout(marker);\n  } // if clearTimeout wasn't available but was latter defined\n\n\n  if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n    cachedClearTimeout = clearTimeout;\n    return clearTimeout(marker);\n  }\n\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedClearTimeout(marker);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n      return cachedClearTimeout.call(null, marker);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n      // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n      return cachedClearTimeout.call(this, marker);\n    }\n  }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n  if (!draining || !currentQueue) {\n    return;\n  }\n\n  draining = false;\n\n  if (currentQueue.length) {\n    queue = currentQueue.concat(queue);\n  } else {\n    queueIndex = -1;\n  }\n\n  if (queue.length) {\n    drainQueue();\n  }\n}\n\nfunction drainQueue() {\n  if (draining) {\n    return;\n  }\n\n  var timeout = runTimeout(cleanUpNextTick);\n  draining = true;\n  var len = queue.length;\n\n  while (len) {\n    currentQueue = queue;\n    queue = [];\n\n    while (++queueIndex < len) {\n      if (currentQueue) {\n        currentQueue[queueIndex].run();\n      }\n    }\n\n    queueIndex = -1;\n    len = queue.length;\n  }\n\n  currentQueue = null;\n  draining = false;\n  runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n  var args = new Array(arguments.length - 1);\n\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      args[i - 1] = arguments[i];\n    }\n  }\n\n  queue.push(new Item(fun, args));\n\n  if (queue.length === 1 && !draining) {\n    runTimeout(drainQueue);\n  }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n  this.fun = fun;\n  this.array = array;\n}\n\nItem.prototype.run = function () {\n  this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n  return [];\n};\n\nprocess.binding = function (name) {\n  throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n  return '/';\n};\n\nprocess.chdir = function (dir) {\n  throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n  return 0;\n};","class Typeahead {\n  constructor($typeahead, $idInput, url, predicate, displayKey, options) {\n    this.$typeahead = $typeahead;\n    this.$idInput   = $idInput;\n    this.url        = url;\n    this.predicate  = predicate;\n    this.displayKey = displayKey;\n    this.options    = options;\n\n    this.createTypeahead();\n  }\n\n  onKeyUp() {\n    this.$idInput.val('');\n  }\n\n  createTypeahead() {\n    this.$typeahead.typeahead({ highlight: true, autoselect: true }, {\n      source:     this.onTypeaheadRequest.bind(this),\n      displayKey: this.displayKey,\n    });\n\n    this.$typeahead.on('typeahead:select', this.onTypeaheadSelect.bind(this));\n    this.$typeahead.on('typeahead:open',   this.onTypeaheadOpen.bind(this));\n  }\n\n  onTypeaheadOpen() {\n    this.$idInput.val('');\n  }\n\n  onTypeaheadSelect(event, entity, datasetName) {\n    this.$idInput.val(entity.id);\n    if (this.options.success) { this.options.success(entity, this.options); }\n  }\n\n  onTypeaheadRequest(query, _, onAsyncResult) {\n    // Build a search query, i.e. :q => {:name_cont => #{query}}\n    let search = {};\n    search[this.predicate] = query;\n\n    if (this.options.additionalParameters) {\n      var extra = (typeof this.options.additionalParameters == 'function') ?\n        this.options.additionalParameters() : this.options.additionalParameters\n      search = jQuery.extend(search, extra);\n    }\n\n    $.get(this.url, { q: search }, onAsyncResult);\n  }\n}\n\n$.fn.remoteTypeahead = function({idSelector = '', url = '', predicate = '', displayKey = '', ...options} = {}) {\n  // Should something happen if we don't pass options here?\n  this.each(function() {\n    let $this = $(this);\n    _idSelector = idSelector || $this.data('idselector');\n    _url        = url        || $this.data('url');\n    _predicate  = predicate  || $this.data('predicate');\n    _displayKey = displayKey || $this.data('displaykey') || 'name';\n\n    let typeahead = new Typeahead($this, $(_idSelector), _url, _predicate, _displayKey, options);\n  });\n};\n","import Site                   from './scripts/site';\nimport TripFormView           from '../../src/trips/scripts/trip_form_view';\nimport TripView               from '../../src/trips/scripts/trip_view';\nimport TripAttachmentFormView from '../../src/trip_attachments/scripts/trip_attachment_form_view'\nimport TripEntryFormView      from '../../src/trip_entries/scripts/trip_entry_form_view';\nimport TripQuickOpenView      from '../../src/trips/scripts/trip_quick_open_view';\nimport UserFormView           from '../../src/users/scripts/user_form_view';\n\nimport './styles/site.sass';\n\n$(function() {\n  window.jQuery = window.$ = jQuery\n  window.site = new Site();\n\n  if ($('form.trip').length)         { new TripFormView; }\n  if ($('#trip').length)             { new TripView; }\n  if ($('#trip_attachments').length) { new TripAttachmentFormView; }\n  if ($('#trip_entries').length)     { new TripEntryFormView; }\n  if ($('#trip_quickopen').length)   { new TripQuickOpenView; }\n  if ($('.user_form').length)        { new UserFormView; }\n});\n"],"sourceRoot":""}