{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/scripts/components/responsive-slider.js","webpack:///./node_modules/popper.js/dist/umd/popper.js","webpack:///./node_modules/jquery-colorbox/jquery.colorbox.js","webpack:///./node_modules/unipointer/unipointer.js","webpack:///./node_modules/unidragger/unidragger.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./assets/scripts/components/colorbox.js","webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./assets/scripts/blocks/accordion.js","webpack:///./node_modules/flickity/js/flickity.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/outlayer/outlayer.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/outlayer/item.js","webpack:///./assets/scripts/blocks/tabs.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./assets/scripts/app.js","webpack:///./node_modules/countup.js/dist/countUp.min.js","webpack:///./assets/scripts/blocks/stats.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/jquery-bridget/jquery-bridget.js","webpack:///./assets/scripts/bootstrap.js","webpack:///./assets/scripts/components/utilities.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/masonry-layout/masonry.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./assets/scripts/components/post.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/desandro-matches-selector/matches-selector.js","webpack:///./assets/scripts/components/disclaimer.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/prev-next-button.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","jQuery","document","ready","$","length","flickity","cellAlign","contain","wrapAround","prevNextButtons","factory","isBrowser","window","navigator","timeoutDuration","longerTimeoutBrowsers","userAgent","indexOf","debounce","Promise","fn","called","resolve","then","scheduled","setTimeout","isFunction","functionToCheck","toString","getStyleComputedProperty","element","nodeType","css","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","test","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","start","end","range","createRange","setStart","setEnd","commonAncestorContainer","contains","firstElementChild","element1root","getScroll","upperSide","arguments","undefined","html","scrollingElement","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","parseInt","getWindowSizes","height","width","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","descriptor","configurable","writable","protoProps","staticProps","obj","_extends","assign","source","getClientRect","offsets","right","left","bottom","top","getBoundingClientRect","rect","scrollTop","scrollLeft","e","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","excludeScroll","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","_ref","sort","a","b","filteredAreas","filter","_ref2","computedPlacement","variation","split","getReferenceOffsets","state","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","runModifiers","modifiers","data","ends","slice","prop","findIndex","cur","match","forEach","console","warn","enabled","update","this","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","setupEventListeners","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","event","callback","scrollParents","isBody","push","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","removeEventListener","isNumeric","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","index","concat","reverse","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","offset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shift","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","len","sideCapitalized","toLowerCase","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","hide","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","v","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","setAttribute","onLoad","modifierOptions","Popper","_this","requestAnimationFrame","jquery","Utils","global","PopperUtils","$overlay","$box","$wrap","$content","$topBorder","$leftBorder","$rightBorder","$bottomBorder","$related","$window","$loaded","$loadingBay","$loadingOverlay","$title","$current","$slideshow","$next","$prev","$close","$groupControls","settings","interfaceHeight","interfaceWidth","loadedHeight","loadedWidth","photo","open","active","closing","loadingTimer","publicMethod","init","defaults","iframe","inline","transition","speed","fadeOut","initialWidth","maxWidth","initialHeight","maxHeight","scalePhotos","scrolling","opacity","preloading","className","overlayClose","escKey","arrowKey","fixed","closeButton","fastIframe","reposition","loop","slideshow","slideshowAuto","slideshowSpeed","slideshowStart","slideshowStop","photoRegex","retinaImage","retinaUrl","retinaSuffix","current","previous","next","close","xhrError","imgError","returnFocus","trapFocus","onOpen","onComplete","onCleanup","onClosed","rel","href","attr","title","createImg","img","Image","attrs","each","val","createIframe","createElement","frameBorder","allowTransparency","Date","getTime","allowFullscreen","colorbox","boxElement","event_open","event_load","event_complete","event_cleanup","event_closed","event_purge","$events","div","requests","previousCSS","$tag","tag","id","cssText","winheight","Settings","cache","dataAttr","getIndex","increment","newIndex","setSize","size","dimension","isImage","url","stopPropagation","focus","setClass","add","removeClass","addClass","trigger","triggerHandler","timeOut","click","clear","clearTimeout","set","unbind","one","stop","reset","show","launch","visibility","display","append","outerHeight","outerWidth","w","h","cursor","appendTo","setResize","$inline","prep","request","mw","mh","$target","eq","insertBefore","replaceWith","percent","src","load","status","contents","appendHTML","support","role","tabindex","addBindings","clickHandler","which","shiftKey","altKey","metaKey","ctrlKey","preventDefault","prev","keyCode","on","live","$obj","old","extend","loadedCallback","modalDimensions","tempSpeed","dequeue","animate","duration","complete","resize","scrolltop","remove","prependTo","total","removeFilter","fadeTo","removeData","EvEmitter","Unipointer","proto","bindStartEvent","elem","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","handleEvent","method","type","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","isPointerDown","pointerId","pointerDown","_bindPostStartEvents","emitEvent","postStartEvents","mousedown","touchstart","pointerdown","events","eventName","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","pageY","Unidragger","bindHandles","_bindHandles","unbindHandles","touchAction","_touchActionValue","handles","handle","okayPointerDown","pointerDownPointer","pointerDownBlur","cursorNodes","TEXTAREA","INPUT","SELECT","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","isClickType","isOkay","focused","activeElement","blur","moveVector","_dragPointerMove","_dragMove","isDragging","hasDragStarted","_dragStart","abs","_dragPointerUp","_dragEnd","_staticClick","isPreventingClicks","dragStart","dragMove","dragEnd","onclick","isIgnoringMouseUp","staticClick","require","jQueryBridget","videoID","ID","caption","utils","isAnimating","restingFrames","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","cells","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","slider","firstSlide","slides","positionX","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","percentPosition","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","cell","cellShift","wrapShift","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","Flickity","PageDots","_create","holder","dots","handleClick","onClick","childUIPointerDown","activate","setDots","appendChild","deactivate","delta","addDots","removeDots","count","fragment","createDocumentFragment","newDots","dot","splice","updateSelected","selectedDot","onTap","uiChange","select","allOff","pageDots","createMethods","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","listener","_events","listeners","once","onceEvents","_onceEvents","off","args","onceListeners","apply","toggleClass","Cell","Slide","animatePrototype","moveElements","elems","toElem","makeArray","GUID","instances","queryElement","getQueryElement","flickityGUID","option","$element","constructor","error","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","setGallerySize","guid","originSide","viewport","_createSlider","watchCSS","opts","isActive","classList","_filterFindCellElements","reloadCells","tabIndex","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","_makeCells","positionCells","_getWrapShiftCells","cellElem","getLastCell","getLastSlide","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","setPosition","updateSlides","_containSlides","slide","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","addCell","updateTarget","updateSelectedSlide","groupCells","number","percentMatch","_init","positionSliderAtSelected","setCellAlign","cellAlignShorthands","shorthand","adaptiveHeight","_unshiftCells","gapX","cellIndex","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","emitArgs","$event","jQEvent","Event","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","wrapIndex","backWrapDelta","forewardWrapDelta","isDragSelect","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getParent","getAdjacentCellElements","adjCount","cellElems","slideIndex","selector","onresize","debounceMethod","content","onkeydown","isNotFocused","handler","keyboardHandlers","37","leftMethod","39","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","htmlInit","bridget","setJQuery","jq","Error","noGlobal","getProto","getPrototypeOf","flat","array","class2type","hasOwn","fnToString","ObjectFunctionString","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","code","doc","script","text","getAttribute","head","toType","context","isArrayLike","toArray","num","pushStack","ret","merge","prevObject","first","last","even","grep","_elem","odd","j","copy","copyIsArray","clone","deep","isPlainObject","isArray","expando","random","isReady","msg","noop","Ctor","isEmptyObject","globalEval","results","inArray","second","invert","matches","callbackExpect","arg","iterator","_i","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pop","pushNative","list","booleans","whitespace","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","dir","childNodes","els","seed","nid","groups","newSelector","newContext","exec","getElementById","getElementsByTagName","getElementsByClassName","qsa","testContext","scope","toSelector","join","querySelectorAll","qsaError","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","hasCompare","subWindow","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matcher","unmatched","lang","elemLang","location","hasFocus","checked","selected","_matchIndexes","password","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","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","rparentsprev","guaranteedUnique","sibling","has","targets","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","reject","noValue","promise","fail","Callbacks","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","stopOnFalse","empty","disable","lock","fireWith","Deferred","func","tuples","always","deferred","pipe","fns","newDefer","tuple","returned","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","message","readyException","readyList","completed","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","string","acceptData","owner","Data","uid","hasData","dataPriv","dataUser","rbrace","rmultiDash","JSON","parse","getData","_data","_removeData","startLength","hooks","_queueHooks","setter","clearQueue","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","values","toggle","rcheckableType","rtagName","rscriptType","checkClone","cloneNode","noCloneChecked","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","nodes","htmlPrefilter","createTextNode","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","types","origFn","leverageNative","notAsync","saved","isTrigger","delegateType","stopImmediatePropagation","handleObjIn","eventHandle","handleObj","handlers","namespaces","origType","elemData","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","originalEvent","noBubble","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","bubbles","cancelable","detail","eventPhase","view","charCode","buttons","clientX","clientY","offsetX","offsetY","pointerType","screenX","screenY","targetTouches","toElement","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","prepend","before","after","replaceChild","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","swap","rboxStyle","curCSS","computed","minWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","box","isBorderBox","computedVal","extra","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","origName","isCustomProp","setProperty","scrollboxSizeBuggy","margin","border","suffix","expand","expanded","parts","propHooks","run","eased","pos","fx","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","prefilter","opt","speeds","to","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeToggle","slow","fast","delay","time","timeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","classes","curValue","clazz","finalValue","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","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","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","abort","statusText","finalText","crossDomain","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","parentOffset","Height","Width","defaultExtra","funcName","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","_jQuery","_$","noConflict","Item","Outlayer","outlayerGUID","_getOption","layout","containerStyle","initLayout","originLeft","originTop","resizeContainer","transitionDuration","hiddenStyle","visibleStyle","subclass","Parent","SubClass","oldOption","compatOptions","horizontal","layoutInstant","reloadItems","stamps","stamp","bindResize","items","_itemize","itemElems","_filterFindItemElements","item","itemSelector","getItemElements","_resetLayout","_manageStamps","_isLayoutInited","layoutItems","_getMeasurement","HTMLElement","_getItemsForLayout","_layoutItems","_postLayout","isIgnored","_emitCompleteOnItems","_getItemLayoutPosition","isLayoutInstant","_processLayoutQueue","updateStagger","_positionItem","stagger","mult","msUnits","getMilliseconds","goTo","moveTo","_getContainerSize","_setContainerMeasure","isWidth","elemSize","paddingLeft","paddingRight","borderRightWidth","paddingBottom","paddingTop","borderBottomWidth","doneCount","ignore","getItem","unignore","_find","unstamp","removeFrom","_getBoundingRect","_manageStamp","boundingRect","_boundingRect","_getElementOffset","thisRect","isResizeBound","unbindResize","needsResizeLayout","addItems","appended","reveal","prepended","previousItems","revealItemElements","getItems","hideItemElements","removeItems","Layout","ms","docElemStyle","transitionProperty","transformProperty","transitionEndEvent","WebkitTransition","vendorProperties","transitionDelay","_transn","ingProperties","clean","onEnd","elemStyle","getPosition","isOriginLeft","isOriginTop","xValue","yValue","layoutSize","layoutPosition","xPadding","xProperty","xResetProperty","getXValue","yPadding","yProperty","yResetProperty","getYValue","isHorizontal","_transitionTo","curX","curY","didNotMove","isTransitioning","transX","transY","transitionStyle","getTranslate","onTransitionEnd","isCleaning","_nonTransition","_removeStyles","_transition","from","enableTransition","transitionProps","$1","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","dashedVendorProperties","propertyName","isEmptyObj","disableTransition","removeTransitionStyles","cleanStyle","cleanTransitionStyle","removeElem","isHidden","getHideRevealTransitionEndProperty","onRevealTransitionEnd","styleProperty","optionStyle","onHideTransitionEnd","getStyleSize","logError","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","borderStyle","borderWidth","boxSizing","getZeroSize","paddingWidth","paddingHeight","marginWidth","marginHeight","borderHeight","isBorderBoxSizeOuter","styleWidth","styleHeight","draggable","dragThreshold","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","bindDrag","unbindDrag","_pointerDownPreventDefault","pointerDownFocus","pointerDownScroll","getScrollPosition","_pointerDownDefault","focusNodes","isTouchStart","isTouchPointer","isFocusNode","isTouchScrolling","dragStartPosition","previousDragX","direction","originBound","dragMoveTime","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","md","isWrapAround","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","_defineProperties","_createClass","_defineProperty","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","getOwnPropertyDescriptors","TRANSITION_END","transitionEndEmulator","Util","triggerTransitionEnd","getUID","getSelectorFromElement","hrefAttr","getTransitionDurationFromElement","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","jQueryDetection","emulateTransitionEnd","JQUERY_NO_CONFLICT","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_element","_proto","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","_handleDismiss","alertInstance","JQUERY_NO_CONFLICT$1","ClassName$1","Selector$1","Event$1","FOCUS_BLUR_DATA_API","LOAD_DATA_API","Button","triggerChangeEvent","addAriaPressed","tagName","hasAttribute","inputBtn","_len","_button","NAME$2","EVENT_KEY$2","JQUERY_NO_CONFLICT$2","Default","keyboard","pause","DefaultType","Direction","Event$2","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","ClassName$2","Selector$2","ACTIVE","ACTIVE_ITEM","ITEM","ITEM_IMG","NEXT_PREV","INDICATORS","DATA_SLIDE","DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","clearInterval","setInterval","visibilityState","activeIndex","_getItemIndex","_handleSwipe","absDeltax","_this2","_keydown","_addTouchEventListeners","_this3","move","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","slideEvent","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","defaultInterval","action","ride","_dataApiClickHandler","carousels","$carousel","NAME$3","JQUERY_NO_CONFLICT$3","Default$1","DefaultType$1","Event$3","SHOW","SHOWN","HIDE","HIDDEN","ClassName$3","Dimension","Selector$3","ACTIVES","DATA_TOGGLE","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","_getDimension","setTransitioning","scrollSize","triggerArrayLength","_getTargetFromElement","triggerArray","isOpen","$this","$trigger","NAME$4","JQUERY_NO_CONFLICT$4","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","Event$4","CLICK","KEYDOWN_DATA_API","KEYUP_DATA_API","ClassName$4","Selector$4","AttachmentMap","Default$2","boundary","popperConfig","DefaultType$2","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","_getPlacement","$parentDropdown","_getOffset","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","JQUERY_NO_CONFLICT$5","Default$3","backdrop","DefaultType$3","Event$5","HIDE_PREVENTED","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","ClassName$5","Selector$5","DIALOG","MODAL_BODY","DATA_DISMISS","FIXED_CONTENT","STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","modalTransitionDuration","modalBody","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","scrollHeight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","br","em","hr","h1","h2","h3","h4","h5","h6","li","ol","pre","small","span","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$1","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$4","HoverState","Event$6","INSERTED","FOCUSOUT","ClassName$6","Selector$6","Trigger","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","NAME","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","popperInstance","initConfigAnimation","NAME$7","JQUERY_NO_CONFLICT$7","BSCLS_PREFIX_REGEX$1","Default$5","DefaultType$5","ClassName$7","Selector$7","Event$7","Popover","_Tooltip","subClass","superClass","__proto__","_getContent","CLASS_PREFIX$1","NAME$8","JQUERY_NO_CONFLICT$8","Default$6","DefaultType$6","Event$8","ACTIVATE","SCROLL","ClassName$8","Selector$8","DATA_SPY","NAV_LIST_GROUP","NAV_LINKS","NAV_ITEMS","LIST_ITEMS","DROPDOWN","DROPDOWN_ITEMS","DROPDOWN_TOGGLE","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","scrollSpys","$spy","JQUERY_NO_CONFLICT$9","Event$9","ClassName$9","Selector$9","Tab","listElement","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","JQUERY_NO_CONFLICT$a","Event$a","ClassName$a","DefaultType$7","autohide","Default$7","Selector$a","Toast","_close","Scrollspy","__assign","CountUp","endVal","startVal","decimalPlaces","useEasing","useGrouping","smartEasingThreshold","smartEasingAmount","separator","decimal","finalEndVal","countDown","paused","frameVal","easingFn","decimalMult","printValue","rAF","formatNumber","toFixed","numerals","easeOutExpo","pow","formattingFn","validateValue","resetDuration","determineDirectionAndSmartEasing","pauseResume","ensureNumber","Number","numbersAnimation","numbers","docViewTop","docViewBottom","elemTop","hasDecimals","arraySlice","ary","ffElems","childElems","_class","methodName","threshold","timeoutName","docReady","toDashed","$2","WidgetClass","dashedNamespace","dataAttrElems","jsDashElems","dataOptionsAttr","PluginClass","methodCall","$elems","pluginMethodStr","plainCall","arg0","updateJQuery","Masonry","exists","serializeObject","log","nextOffsetTop","navScrolled","nav","inView","lastCell","lastMargin","fitWidth","measureColumns","colYs","cols","maxY","horizontalColIndex","getContainerWidth","columnWidth","firstItem","firstItemElem","containerWidth","gutter","remainder","colSpan","colPosition","horizontalOrder","setHeight","setMax","_getTopColPosition","colGroup","_getTopColGroup","minimumY","groupCount","_getColGroupY","groupColYs","_getHorizontalColPosition","hasSize","stampSize","firstX","lastX","firstCol","lastCol","stampMaxY","_getContainerFitWidth","unusedCols","previousWidth","LazyLoader","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","srcset","cellSizeChange","paged","updatePostsResults","grid","localized_object","ajax_url","news","displaying","newPosts","cur_page","max_count","max_pages","Player","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","autoPlay","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","getCellsFragment","isAppend","insertCellElement","endCells","cellChange","minCellIndex","changedCellIndex","isPositioningSlider","prevSelectedElem","matchesMethod","ElemProto","Element","cookie","date","setTime","g","Function","renderPosition","setDefaultTarget","marginProperty","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","svg","createSVG","createElementNS","shape","path","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","lastIndex","boundIndex","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons"],"mappings":"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","file":"/scripts/app.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 = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","jQuery(document).ready(function($) {\n\n\tif ( $('.content-box--slider').length > 0 ) {\n\n\t\t$('.content-box--slider').flickity({\n\t\t\tcellAlign: 'left',\n\t \tcontain: true,\n\t\t\twrapAround : true,\n\t\t\tprevNextButtons : true,\n\t\t});\n\n\t}\n\n});\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.0\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 */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Popper = factory());\n}(this, (function () { 'use strict';\n\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\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 return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\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 */\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/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 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/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof 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 */\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\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\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\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/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\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 : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @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 * @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 /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {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 };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nreturn Popper;\n\n})));\n//# sourceMappingURL=popper.js.map\n","/*!\n\tColorbox 1.6.4\n\tlicense: MIT\n\thttp://www.jacklmoore.com/colorbox\n*/\n(function ($, document, window) {\n\tvar\n\t// Default settings object.\n\t// See http://jacklmoore.com/colorbox for details.\n\tdefaults = {\n\t\t// data sources\n\t\thtml: false,\n\t\tphoto: false,\n\t\tiframe: false,\n\t\tinline: false,\n\n\t\t// behavior and appearance\n\t\ttransition: \"elastic\",\n\t\tspeed: 300,\n\t\tfadeOut: 300,\n\t\twidth: false,\n\t\tinitialWidth: \"600\",\n\t\tinnerWidth: false,\n\t\tmaxWidth: false,\n\t\theight: false,\n\t\tinitialHeight: \"450\",\n\t\tinnerHeight: false,\n\t\tmaxHeight: false,\n\t\tscalePhotos: true,\n\t\tscrolling: true,\n\t\topacity: 0.9,\n\t\tpreloading: true,\n\t\tclassName: false,\n\t\toverlayClose: true,\n\t\tescKey: true,\n\t\tarrowKey: true,\n\t\ttop: false,\n\t\tbottom: false,\n\t\tleft: false,\n\t\tright: false,\n\t\tfixed: false,\n\t\tdata: undefined,\n\t\tcloseButton: true,\n\t\tfastIframe: true,\n\t\topen: false,\n\t\treposition: true,\n\t\tloop: true,\n\t\tslideshow: false,\n\t\tslideshowAuto: true,\n\t\tslideshowSpeed: 2500,\n\t\tslideshowStart: \"start slideshow\",\n\t\tslideshowStop: \"stop slideshow\",\n\t\tphotoRegex: /\\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\\?).*)?$/i,\n\n\t\t// alternate image paths for high-res displays\n\t\tretinaImage: false,\n\t\tretinaUrl: false,\n\t\tretinaSuffix: '@2x.$1',\n\n\t\t// internationalization\n\t\tcurrent: \"image {current} of {total}\",\n\t\tprevious: \"previous\",\n\t\tnext: \"next\",\n\t\tclose: \"close\",\n\t\txhrError: \"This content failed to load.\",\n\t\timgError: \"This image failed to load.\",\n\n\t\t// accessbility\n\t\treturnFocus: true,\n\t\ttrapFocus: true,\n\n\t\t// callbacks\n\t\tonOpen: false,\n\t\tonLoad: false,\n\t\tonComplete: false,\n\t\tonCleanup: false,\n\t\tonClosed: false,\n\n\t\trel: function() {\n\t\t\treturn this.rel;\n\t\t},\n\t\thref: function() {\n\t\t\t// using this.href would give the absolute url, when the href may have been inteded as a selector (e.g. '#container')\n\t\t\treturn $(this).attr('href');\n\t\t},\n\t\ttitle: function() {\n\t\t\treturn this.title;\n\t\t},\n\t\tcreateImg: function() {\n\t\t\tvar img = new Image();\n\t\t\tvar attrs = $(this).data('cbox-img-attrs');\n\n\t\t\tif (typeof attrs === 'object') {\n\t\t\t\t$.each(attrs, function(key, val){\n\t\t\t\t\timg[key] = val;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn img;\n\t\t},\n\t\tcreateIframe: function() {\n\t\t\tvar iframe = document.createElement('iframe');\n\t\t\tvar attrs = $(this).data('cbox-iframe-attrs');\n\n\t\t\tif (typeof attrs === 'object') {\n\t\t\t\t$.each(attrs, function(key, val){\n\t\t\t\t\tiframe[key] = val;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ('frameBorder' in iframe) {\n\t\t\t\tiframe.frameBorder = 0;\n\t\t\t}\n\t\t\tif ('allowTransparency' in iframe) {\n\t\t\t\tiframe.allowTransparency = \"true\";\n\t\t\t}\n\t\t\tiframe.name = (new Date()).getTime(); // give the iframe a unique name to prevent caching\n\t\t\tiframe.allowFullscreen = true;\n\n\t\t\treturn iframe;\n\t\t}\n\t},\n\n\t// Abstracting the HTML and event identifiers for easy rebranding\n\tcolorbox = 'colorbox',\n\tprefix = 'cbox',\n\tboxElement = prefix + 'Element',\n\n\t// Events\n\tevent_open = prefix + '_open',\n\tevent_load = prefix + '_load',\n\tevent_complete = prefix + '_complete',\n\tevent_cleanup = prefix + '_cleanup',\n\tevent_closed = prefix + '_closed',\n\tevent_purge = prefix + '_purge',\n\n\t// Cached jQuery Object Variables\n\t$overlay,\n\t$box,\n\t$wrap,\n\t$content,\n\t$topBorder,\n\t$leftBorder,\n\t$rightBorder,\n\t$bottomBorder,\n\t$related,\n\t$window,\n\t$loaded,\n\t$loadingBay,\n\t$loadingOverlay,\n\t$title,\n\t$current,\n\t$slideshow,\n\t$next,\n\t$prev,\n\t$close,\n\t$groupControls,\n\t$events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2\n\n\t// Variables for cached values or use across multiple functions\n\tsettings,\n\tinterfaceHeight,\n\tinterfaceWidth,\n\tloadedHeight,\n\tloadedWidth,\n\tindex,\n\tphoto,\n\topen,\n\tactive,\n\tclosing,\n\tloadingTimer,\n\tpublicMethod,\n\tdiv = \"div\",\n\trequests = 0,\n\tpreviousCSS = {},\n\tinit;\n\n\t// ****************\n\t// HELPER FUNCTIONS\n\t// ****************\n\n\t// Convenience function for creating new jQuery objects\n\tfunction $tag(tag, id, css) {\n\t\tvar element = document.createElement(tag);\n\n\t\tif (id) {\n\t\t\telement.id = prefix + id;\n\t\t}\n\n\t\tif (css) {\n\t\t\telement.style.cssText = css;\n\t\t}\n\n\t\treturn $(element);\n\t}\n\n\t// Get the window height using innerHeight when available to avoid an issue with iOS\n\t// http://bugs.jquery.com/ticket/6724\n\tfunction winheight() {\n\t\treturn window.innerHeight ? window.innerHeight : $(window).height();\n\t}\n\n\tfunction Settings(element, options) {\n\t\tif (options !== Object(options)) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tthis.cache = {};\n\t\tthis.el = element;\n\n\t\tthis.value = function(key) {\n\t\t\tvar dataAttr;\n\n\t\t\tif (this.cache[key] === undefined) {\n\t\t\t\tdataAttr = $(this.el).attr('data-cbox-'+key);\n\n\t\t\t\tif (dataAttr !== undefined) {\n\t\t\t\t\tthis.cache[key] = dataAttr;\n\t\t\t\t} else if (options[key] !== undefined) {\n\t\t\t\t\tthis.cache[key] = options[key];\n\t\t\t\t} else if (defaults[key] !== undefined) {\n\t\t\t\t\tthis.cache[key] = defaults[key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.cache[key];\n\t\t};\n\n\t\tthis.get = function(key) {\n\t\t\tvar value = this.value(key);\n\t\t\treturn $.isFunction(value) ? value.call(this.el, this) : value;\n\t\t};\n\t}\n\n\t// Determine the next and previous members in a group.\n\tfunction getIndex(increment) {\n\t\tvar\n\t\tmax = $related.length,\n\t\tnewIndex = (index + increment) % max;\n\n\t\treturn (newIndex < 0) ? max + newIndex : newIndex;\n\t}\n\n\t// Convert '%' and 'px' values to integers\n\tfunction setSize(size, dimension) {\n\t\treturn Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));\n\t}\n\n\t// Checks an href to see if it is a photo.\n\t// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.\n\tfunction isImage(settings, url) {\n\t\treturn settings.get('photo') || settings.get('photoRegex').test(url);\n\t}\n\n\tfunction retinaUrl(settings, url) {\n\t\treturn settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;\n\t}\n\n\tfunction trapFocus(e) {\n\t\tif ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {\n\t\t\te.stopPropagation();\n\t\t\t$box.focus();\n\t\t}\n\t}\n\n\tfunction setClass(str) {\n\t\tif (setClass.str !== str) {\n\t\t\t$box.add($overlay).removeClass(setClass.str).addClass(str);\n\t\t\tsetClass.str = str;\n\t\t}\n\t}\n\n\tfunction getRelated(rel) {\n\t\tindex = 0;\n\n\t\tif (rel && rel !== false && rel !== 'nofollow') {\n\t\t\t$related = $('.' + boxElement).filter(function () {\n\t\t\t\tvar options = $.data(this, colorbox);\n\t\t\t\tvar settings = new Settings(this, options);\n\t\t\t\treturn (settings.get('rel') === rel);\n\t\t\t});\n\t\t\tindex = $related.index(settings.el);\n\n\t\t\t// Check direct calls to Colorbox.\n\t\t\tif (index === -1) {\n\t\t\t\t$related = $related.add(settings.el);\n\t\t\t\tindex = $related.length - 1;\n\t\t\t}\n\t\t} else {\n\t\t\t$related = $(settings.el);\n\t\t}\n\t}\n\n\tfunction trigger(event) {\n\t\t// for external use\n\t\t$(document).trigger(event);\n\t\t// for internal use\n\t\t$events.triggerHandler(event);\n\t}\n\n\tvar slideshow = (function(){\n\t\tvar active,\n\t\t\tclassName = prefix + \"Slideshow_\",\n\t\t\tclick = \"click.\" + prefix,\n\t\t\ttimeOut;\n\n\t\tfunction clear () {\n\t\t\tclearTimeout(timeOut);\n\t\t}\n\n\t\tfunction set() {\n\t\t\tif (settings.get('loop') || $related[index + 1]) {\n\t\t\t\tclear();\n\t\t\t\ttimeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));\n\t\t\t}\n\t\t}\n\n\t\tfunction start() {\n\t\t\t$slideshow\n\t\t\t\t.html(settings.get('slideshowStop'))\n\t\t\t\t.unbind(click)\n\t\t\t\t.one(click, stop);\n\n\t\t\t$events\n\t\t\t\t.bind(event_complete, set)\n\t\t\t\t.bind(event_load, clear);\n\n\t\t\t$box.removeClass(className + \"off\").addClass(className + \"on\");\n\t\t}\n\n\t\tfunction stop() {\n\t\t\tclear();\n\n\t\t\t$events\n\t\t\t\t.unbind(event_complete, set)\n\t\t\t\t.unbind(event_load, clear);\n\n\t\t\t$slideshow\n\t\t\t\t.html(settings.get('slideshowStart'))\n\t\t\t\t.unbind(click)\n\t\t\t\t.one(click, function () {\n\t\t\t\t\tpublicMethod.next();\n\t\t\t\t\tstart();\n\t\t\t\t});\n\n\t\t\t$box.removeClass(className + \"on\").addClass(className + \"off\");\n\t\t}\n\n\t\tfunction reset() {\n\t\t\tactive = false;\n\t\t\t$slideshow.hide();\n\t\t\tclear();\n\t\t\t$events\n\t\t\t\t.unbind(event_complete, set)\n\t\t\t\t.unbind(event_load, clear);\n\t\t\t$box.removeClass(className + \"off \" + className + \"on\");\n\t\t}\n\n\t\treturn function(){\n\t\t\tif (active) {\n\t\t\t\tif (!settings.get('slideshow')) {\n\t\t\t\t\t$events.unbind(event_cleanup, reset);\n\t\t\t\t\treset();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (settings.get('slideshow') && $related[1]) {\n\t\t\t\t\tactive = true;\n\t\t\t\t\t$events.one(event_cleanup, reset);\n\t\t\t\t\tif (settings.get('slideshowAuto')) {\n\t\t\t\t\t\tstart();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstop();\n\t\t\t\t\t}\n\t\t\t\t\t$slideshow.show();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t}());\n\n\n\tfunction launch(element) {\n\t\tvar options;\n\n\t\tif (!closing) {\n\n\t\t\toptions = $(element).data(colorbox);\n\n\t\t\tsettings = new Settings(element, options);\n\n\t\t\tgetRelated(settings.get('rel'));\n\n\t\t\tif (!open) {\n\t\t\t\topen = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.\n\n\t\t\t\tsetClass(settings.get('className'));\n\n\t\t\t\t// Show colorbox so the sizes can be calculated in older versions of jQuery\n\t\t\t\t$box.css({visibility:'hidden', display:'block', opacity:''});\n\n\t\t\t\t$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');\n\t\t\t\t$content.css({width:'', height:''}).append($loaded);\n\n\t\t\t\t// Cache values needed for size calculations\n\t\t\t\tinterfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();\n\t\t\t\tinterfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();\n\t\t\t\tloadedHeight = $loaded.outerHeight(true);\n\t\t\t\tloadedWidth = $loaded.outerWidth(true);\n\n\t\t\t\t// Opens inital empty Colorbox prior to content being loaded.\n\t\t\t\tvar initialWidth = setSize(settings.get('initialWidth'), 'x');\n\t\t\t\tvar initialHeight = setSize(settings.get('initialHeight'), 'y');\n\t\t\t\tvar maxWidth = settings.get('maxWidth');\n\t\t\t\tvar maxHeight = settings.get('maxHeight');\n\n\t\t\t\tsettings.w = Math.max((maxWidth !== false ? Math.min(initialWidth, setSize(maxWidth, 'x')) : initialWidth) - loadedWidth - interfaceWidth, 0);\n\t\t\t\tsettings.h = Math.max((maxHeight !== false ? Math.min(initialHeight, setSize(maxHeight, 'y')) : initialHeight) - loadedHeight - interfaceHeight, 0);\n\n\t\t\t\t$loaded.css({width:'', height:settings.h});\n\t\t\t\tpublicMethod.position();\n\n\t\t\t\ttrigger(event_open);\n\t\t\t\tsettings.get('onOpen');\n\n\t\t\t\t$groupControls.add($title).hide();\n\n\t\t\t\t$box.focus();\n\n\t\t\t\tif (settings.get('trapFocus')) {\n\t\t\t\t\t// Confine focus to the modal\n\t\t\t\t\t// Uses event capturing that is not supported in IE8-\n\t\t\t\t\tif (document.addEventListener) {\n\n\t\t\t\t\t\tdocument.addEventListener('focus', trapFocus, true);\n\n\t\t\t\t\t\t$events.one(event_closed, function () {\n\t\t\t\t\t\t\tdocument.removeEventListener('focus', trapFocus, true);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Return focus on closing\n\t\t\t\tif (settings.get('returnFocus')) {\n\t\t\t\t\t$events.one(event_closed, function () {\n\t\t\t\t\t\t$(settings.el).focus();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar opacity = parseFloat(settings.get('opacity'));\n\t\t\t$overlay.css({\n\t\t\t\topacity: opacity === opacity ? opacity : '',\n\t\t\t\tcursor: settings.get('overlayClose') ? 'pointer' : '',\n\t\t\t\tvisibility: 'visible'\n\t\t\t}).show();\n\n\t\t\tif (settings.get('closeButton')) {\n\t\t\t\t$close.html(settings.get('close')).appendTo($content);\n\t\t\t} else {\n\t\t\t\t$close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4\n\t\t\t}\n\n\t\t\tload();\n\t\t}\n\t}\n\n\t// Colorbox's markup needs to be added to the DOM prior to being called\n\t// so that the browser will go ahead and load the CSS background images.\n\tfunction appendHTML() {\n\t\tif (!$box) {\n\t\t\tinit = false;\n\t\t\t$window = $(window);\n\t\t\t$box = $tag(div).attr({\n\t\t\t\tid: colorbox,\n\t\t\t\t'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.\n\t\t\t\trole: 'dialog',\n\t\t\t\ttabindex: '-1'\n\t\t\t}).hide();\n\t\t\t$overlay = $tag(div, \"Overlay\").hide();\n\t\t\t$loadingOverlay = $([$tag(div, \"LoadingOverlay\")[0],$tag(div, \"LoadingGraphic\")[0]]);\n\t\t\t$wrap = $tag(div, \"Wrapper\");\n\t\t\t$content = $tag(div, \"Content\").append(\n\t\t\t\t$title = $tag(div, \"Title\"),\n\t\t\t\t$current = $tag(div, \"Current\"),\n\t\t\t\t$prev = $('<button type=\"button\"/>').attr({id:prefix+'Previous'}),\n\t\t\t\t$next = $('<button type=\"button\"/>').attr({id:prefix+'Next'}),\n\t\t\t\t$slideshow = $('<button type=\"button\"/>').attr({id:prefix+'Slideshow'}),\n\t\t\t\t$loadingOverlay\n\t\t\t);\n\n\t\t\t$close = $('<button type=\"button\"/>').attr({id:prefix+'Close'});\n\n\t\t\t$wrap.append( // The 3x3 Grid that makes up Colorbox\n\t\t\t\t$tag(div).append(\n\t\t\t\t\t$tag(div, \"TopLeft\"),\n\t\t\t\t\t$topBorder = $tag(div, \"TopCenter\"),\n\t\t\t\t\t$tag(div, \"TopRight\")\n\t\t\t\t),\n\t\t\t\t$tag(div, false, 'clear:left').append(\n\t\t\t\t\t$leftBorder = $tag(div, \"MiddleLeft\"),\n\t\t\t\t\t$content,\n\t\t\t\t\t$rightBorder = $tag(div, \"MiddleRight\")\n\t\t\t\t),\n\t\t\t\t$tag(div, false, 'clear:left').append(\n\t\t\t\t\t$tag(div, \"BottomLeft\"),\n\t\t\t\t\t$bottomBorder = $tag(div, \"BottomCenter\"),\n\t\t\t\t\t$tag(div, \"BottomRight\")\n\t\t\t\t)\n\t\t\t).find('div div').css({'float': 'left'});\n\n\t\t\t$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');\n\n\t\t\t$groupControls = $next.add($prev).add($current).add($slideshow);\n\t\t}\n\t\tif (document.body && !$box.parent().length) {\n\t\t\t$(document.body).append($overlay, $box.append($wrap, $loadingBay));\n\t\t}\n\t}\n\n\t// Add Colorbox's event bindings\n\tfunction addBindings() {\n\t\tfunction clickHandler(e) {\n\t\t\t// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.\n\t\t\t// See: http://jacklmoore.com/notes/click-events/\n\t\t\tif (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.ctrlKey)) {\n\t\t\t\te.preventDefault();\n\t\t\t\tlaunch(this);\n\t\t\t}\n\t\t}\n\n\t\tif ($box) {\n\t\t\tif (!init) {\n\t\t\t\tinit = true;\n\n\t\t\t\t// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.\n\t\t\t\t$next.click(function () {\n\t\t\t\t\tpublicMethod.next();\n\t\t\t\t});\n\t\t\t\t$prev.click(function () {\n\t\t\t\t\tpublicMethod.prev();\n\t\t\t\t});\n\t\t\t\t$close.click(function () {\n\t\t\t\t\tpublicMethod.close();\n\t\t\t\t});\n\t\t\t\t$overlay.click(function () {\n\t\t\t\t\tif (settings.get('overlayClose')) {\n\t\t\t\t\t\tpublicMethod.close();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Key Bindings\n\t\t\t\t$(document).bind('keydown.' + prefix, function (e) {\n\t\t\t\t\tvar key = e.keyCode;\n\t\t\t\t\tif (open && settings.get('escKey') && key === 27) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tpublicMethod.close();\n\t\t\t\t\t}\n\t\t\t\t\tif (open && settings.get('arrowKey') && $related[1] && !e.altKey) {\n\t\t\t\t\t\tif (key === 37) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$prev.click();\n\t\t\t\t\t\t} else if (key === 39) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$next.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif ($.isFunction($.fn.on)) {\n\t\t\t\t\t// For jQuery 1.7+\n\t\t\t\t\t$(document).on('click.'+prefix, '.'+boxElement, clickHandler);\n\t\t\t\t} else {\n\t\t\t\t\t// For jQuery 1.3.x -> 1.6.x\n\t\t\t\t\t// This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.\n\t\t\t\t\t// This is not here for jQuery 1.9, it's here for legacy users.\n\t\t\t\t\t$('.'+boxElement).live('click.'+prefix, clickHandler);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t// Don't do anything if Colorbox already exists.\n\tif ($[colorbox]) {\n\t\treturn;\n\t}\n\n\t// Append the HTML when the DOM loads\n\t$(appendHTML);\n\n\n\t// ****************\n\t// PUBLIC FUNCTIONS\n\t// Usage format: $.colorbox.close();\n\t// Usage from within an iframe: parent.jQuery.colorbox.close();\n\t// ****************\n\n\tpublicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {\n\t\tvar settings;\n\t\tvar $obj = this;\n\n\t\toptions = options || {};\n\n\t\tif ($.isFunction($obj)) { // assume a call to $.colorbox\n\t\t\t$obj = $('<a/>');\n\t\t\toptions.open = true;\n\t\t}\n\n\t\tif (!$obj[0]) { // colorbox being applied to empty collection\n\t\t\treturn $obj;\n\t\t}\n\n\t\tappendHTML();\n\n\t\tif (addBindings()) {\n\n\t\t\tif (callback) {\n\t\t\t\toptions.onComplete = callback;\n\t\t\t}\n\n\t\t\t$obj.each(function () {\n\t\t\t\tvar old = $.data(this, colorbox) || {};\n\t\t\t\t$.data(this, colorbox, $.extend(old, options));\n\t\t\t}).addClass(boxElement);\n\n\t\t\tsettings = new Settings($obj[0], options);\n\n\t\t\tif (settings.get('open')) {\n\t\t\t\tlaunch($obj[0]);\n\t\t\t}\n\t\t}\n\n\t\treturn $obj;\n\t};\n\n\tpublicMethod.position = function (speed, loadedCallback) {\n\t\tvar\n\t\tcss,\n\t\ttop = 0,\n\t\tleft = 0,\n\t\toffset = $box.offset(),\n\t\tscrollTop,\n\t\tscrollLeft;\n\n\t\t$window.unbind('resize.' + prefix);\n\n\t\t// remove the modal so that it doesn't influence the document width/height\n\t\t$box.css({top: -9e4, left: -9e4});\n\n\t\tscrollTop = $window.scrollTop();\n\t\tscrollLeft = $window.scrollLeft();\n\n\t\tif (settings.get('fixed')) {\n\t\t\toffset.top -= scrollTop;\n\t\t\toffset.left -= scrollLeft;\n\t\t\t$box.css({position: 'fixed'});\n\t\t} else {\n\t\t\ttop = scrollTop;\n\t\t\tleft = scrollLeft;\n\t\t\t$box.css({position: 'absolute'});\n\t\t}\n\n\t\t// keeps the top and left positions within the browser's viewport.\n\t\tif (settings.get('right') !== false) {\n\t\t\tleft += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);\n\t\t} else if (settings.get('left') !== false) {\n\t\t\tleft += setSize(settings.get('left'), 'x');\n\t\t} else {\n\t\t\tleft += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);\n\t\t}\n\n\t\tif (settings.get('bottom') !== false) {\n\t\t\ttop += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);\n\t\t} else if (settings.get('top') !== false) {\n\t\t\ttop += setSize(settings.get('top'), 'y');\n\t\t} else {\n\t\t\ttop += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);\n\t\t}\n\n\t\t$box.css({top: offset.top, left: offset.left, visibility:'visible'});\n\n\t\t// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,\n\t\t// but it has to be shrank down around the size of div#colorbox when it's done. If not,\n\t\t// it can invoke an obscure IE bug when using iframes.\n\t\t$wrap[0].style.width = $wrap[0].style.height = \"9999px\";\n\n\t\tfunction modalDimensions() {\n\t\t\t$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt($box[0].style.width,10) - interfaceWidth)+'px';\n\t\t\t$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt($box[0].style.height,10) - interfaceHeight)+'px';\n\t\t}\n\n\t\tcss = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};\n\n\t\t// setting the speed to 0 if the content hasn't changed size or position\n\t\tif (speed) {\n\t\t\tvar tempSpeed = 0;\n\t\t\t$.each(css, function(i){\n\t\t\t\tif (css[i] !== previousCSS[i]) {\n\t\t\t\t\ttempSpeed = speed;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t});\n\t\t\tspeed = tempSpeed;\n\t\t}\n\n\t\tpreviousCSS = css;\n\n\t\tif (!speed) {\n\t\t\t$box.css(css);\n\t\t}\n\n\t\t$box.dequeue().animate(css, {\n\t\t\tduration: speed || 0,\n\t\t\tcomplete: function () {\n\t\t\t\tmodalDimensions();\n\n\t\t\t\tactive = false;\n\n\t\t\t\t// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.\n\t\t\t\t$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + \"px\";\n\t\t\t\t$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + \"px\";\n\n\t\t\t\tif (settings.get('reposition')) {\n\t\t\t\t\tsetTimeout(function () { // small delay before binding onresize due to an IE8 bug.\n\t\t\t\t\t\t$window.bind('resize.' + prefix, publicMethod.position);\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\n\t\t\t\tif ($.isFunction(loadedCallback)) {\n\t\t\t\t\tloadedCallback();\n\t\t\t\t}\n\t\t\t},\n\t\t\tstep: modalDimensions\n\t\t});\n\t};\n\n\tpublicMethod.resize = function (options) {\n\t\tvar scrolltop;\n\n\t\tif (open) {\n\t\t\toptions = options || {};\n\n\t\t\tif (options.width) {\n\t\t\t\tsettings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;\n\t\t\t}\n\n\t\t\tif (options.innerWidth) {\n\t\t\t\tsettings.w = setSize(options.innerWidth, 'x');\n\t\t\t}\n\n\t\t\t$loaded.css({width: settings.w});\n\n\t\t\tif (options.height) {\n\t\t\t\tsettings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;\n\t\t\t}\n\n\t\t\tif (options.innerHeight) {\n\t\t\t\tsettings.h = setSize(options.innerHeight, 'y');\n\t\t\t}\n\n\t\t\tif (!options.innerHeight && !options.height) {\n\t\t\t\tscrolltop = $loaded.scrollTop();\n\t\t\t\t$loaded.css({height: \"auto\"});\n\t\t\t\tsettings.h = $loaded.height();\n\t\t\t}\n\n\t\t\t$loaded.css({height: settings.h});\n\n\t\t\tif(scrolltop) {\n\t\t\t\t$loaded.scrollTop(scrolltop);\n\t\t\t}\n\n\t\t\tpublicMethod.position(settings.get('transition') === \"none\" ? 0 : settings.get('speed'));\n\t\t}\n\t};\n\n\tpublicMethod.prep = function (object) {\n\t\tif (!open) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar callback, speed = settings.get('transition') === \"none\" ? 0 : settings.get('speed');\n\n\t\t$loaded.remove();\n\n\t\t$loaded = $tag(div, 'LoadedContent').append(object);\n\n\t\tfunction getWidth() {\n\t\t\tsettings.w = settings.w || $loaded.width();\n\t\t\tsettings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;\n\t\t\treturn settings.w;\n\t\t}\n\t\tfunction getHeight() {\n\t\t\tsettings.h = settings.h || $loaded.height();\n\t\t\tsettings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;\n\t\t\treturn settings.h;\n\t\t}\n\n\t\t$loaded.hide()\n\t\t.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.\n\t\t.css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})\n\t\t.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.\n\t\t.prependTo($content);\n\n\t\t$loadingBay.hide();\n\n\t\t// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.\n\n\t\t$(photo).css({'float': 'none'});\n\n\t\tsetClass(settings.get('className'));\n\n\t\tcallback = function () {\n\t\t\tvar total = $related.length,\n\t\t\t\tiframe,\n\t\t\t\tcomplete;\n\n\t\t\tif (!open) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2\n\t\t\t\tif ($.support.opacity === false) {\n\t\t\t\t\t$box[0].style.removeAttribute('filter');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcomplete = function () {\n\t\t\t\tclearTimeout(loadingTimer);\n\t\t\t\t$loadingOverlay.hide();\n\t\t\t\ttrigger(event_complete);\n\t\t\t\tsettings.get('onComplete');\n\t\t\t};\n\n\n\t\t\t$title.html(settings.get('title')).show();\n\t\t\t$loaded.show();\n\n\t\t\tif (total > 1) { // handle grouping\n\t\t\t\tif (typeof settings.get('current') === \"string\") {\n\t\t\t\t\t$current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();\n\t\t\t\t}\n\n\t\t\t\t$next[(settings.get('loop') || index < total - 1) ? \"show\" : \"hide\"]().html(settings.get('next'));\n\t\t\t\t$prev[(settings.get('loop') || index) ? \"show\" : \"hide\"]().html(settings.get('previous'));\n\n\t\t\t\tslideshow();\n\n\t\t\t\t// Preloads images within a rel group\n\t\t\t\tif (settings.get('preloading')) {\n\t\t\t\t\t$.each([getIndex(-1), getIndex(1)], function(){\n\t\t\t\t\t\tvar img,\n\t\t\t\t\t\t\ti = $related[this],\n\t\t\t\t\t\t\tsettings = new Settings(i, $.data(i, colorbox)),\n\t\t\t\t\t\t\tsrc = settings.get('href');\n\n\t\t\t\t\t\tif (src && isImage(settings, src)) {\n\t\t\t\t\t\t\tsrc = retinaUrl(settings, src);\n\t\t\t\t\t\t\timg = document.createElement('img');\n\t\t\t\t\t\t\timg.src = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$groupControls.hide();\n\t\t\t}\n\n\t\t\tif (settings.get('iframe')) {\n\n\t\t\t\tiframe = settings.get('createIframe');\n\n\t\t\t\tif (!settings.get('scrolling')) {\n\t\t\t\t\tiframe.scrolling = \"no\";\n\t\t\t\t}\n\n\t\t\t\t$(iframe)\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tsrc: settings.get('href'),\n\t\t\t\t\t\t'class': prefix + 'Iframe'\n\t\t\t\t\t})\n\t\t\t\t\t.one('load', complete)\n\t\t\t\t\t.appendTo($loaded);\n\n\t\t\t\t$events.one(event_purge, function () {\n\t\t\t\t\tiframe.src = \"//about:blank\";\n\t\t\t\t});\n\n\t\t\t\tif (settings.get('fastIframe')) {\n\t\t\t\t\t$(iframe).trigger('load');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcomplete();\n\t\t\t}\n\n\t\t\tif (settings.get('transition') === 'fade') {\n\t\t\t\t$box.fadeTo(speed, 1, removeFilter);\n\t\t\t} else {\n\t\t\t\tremoveFilter();\n\t\t\t}\n\t\t};\n\n\t\tif (settings.get('transition') === 'fade') {\n\t\t\t$box.fadeTo(speed, 0, function () {\n\t\t\t\tpublicMethod.position(0, callback);\n\t\t\t});\n\t\t} else {\n\t\t\tpublicMethod.position(speed, callback);\n\t\t}\n\t};\n\n\tfunction load () {\n\t\tvar href, setResize, prep = publicMethod.prep, $inline, request = ++requests;\n\n\t\tactive = true;\n\n\t\tphoto = false;\n\n\t\ttrigger(event_purge);\n\t\ttrigger(event_load);\n\t\tsettings.get('onLoad');\n\n\t\tsettings.h = settings.get('height') ?\n\t\t\t\tsetSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :\n\t\t\t\tsettings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');\n\n\t\tsettings.w = settings.get('width') ?\n\t\t\t\tsetSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :\n\t\t\t\tsettings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');\n\n\t\t// Sets the minimum dimensions for use in image scaling\n\t\tsettings.mw = settings.w;\n\t\tsettings.mh = settings.h;\n\n\t\t// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.\n\t\t// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.\n\t\tif (settings.get('maxWidth')) {\n\t\t\tsettings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;\n\t\t\tsettings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;\n\t\t}\n\t\tif (settings.get('maxHeight')) {\n\t\t\tsettings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;\n\t\t\tsettings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;\n\t\t}\n\n\t\thref = settings.get('href');\n\n\t\tloadingTimer = setTimeout(function () {\n\t\t\t$loadingOverlay.show();\n\t\t}, 100);\n\n\t\tif (settings.get('inline')) {\n\t\t\tvar $target = $(href).eq(0);\n\t\t\t// Inserts an empty placeholder where inline content is being pulled from.\n\t\t\t// An event is bound to put inline content back when Colorbox closes or loads new content.\n\t\t\t$inline = $('<div>').hide().insertBefore($target);\n\n\t\t\t$events.one(event_purge, function () {\n\t\t\t\t$inline.replaceWith($target);\n\t\t\t});\n\n\t\t\tprep($target);\n\t\t} else if (settings.get('iframe')) {\n\t\t\t// IFrame element won't be added to the DOM until it is ready to be displayed,\n\t\t\t// to avoid problems with DOM-ready JS that might be trying to run in that iframe.\n\t\t\tprep(\" \");\n\t\t} else if (settings.get('html')) {\n\t\t\tprep(settings.get('html'));\n\t\t} else if (isImage(settings, href)) {\n\n\t\t\thref = retinaUrl(settings, href);\n\n\t\t\tphoto = settings.get('createImg');\n\n\t\t\t$(photo)\n\t\t\t.addClass(prefix + 'Photo')\n\t\t\t.bind('error.'+prefix,function () {\n\t\t\t\tprep($tag(div, 'Error').html(settings.get('imgError')));\n\t\t\t})\n\t\t\t.one('load', function () {\n\t\t\t\tif (request !== requests) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// A small pause because some browsers will occassionaly report a\n\t\t\t\t// img.width and img.height of zero immediately after the img.onload fires\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\tvar percent;\n\n\t\t\t\t\tif (settings.get('retinaImage') && window.devicePixelRatio > 1) {\n\t\t\t\t\t\tphoto.height = photo.height / window.devicePixelRatio;\n\t\t\t\t\t\tphoto.width = photo.width / window.devicePixelRatio;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (settings.get('scalePhotos')) {\n\t\t\t\t\t\tsetResize = function () {\n\t\t\t\t\t\t\tphoto.height -= photo.height * percent;\n\t\t\t\t\t\t\tphoto.width -= photo.width * percent;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (settings.mw && photo.width > settings.mw) {\n\t\t\t\t\t\t\tpercent = (photo.width - settings.mw) / photo.width;\n\t\t\t\t\t\t\tsetResize();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (settings.mh && photo.height > settings.mh) {\n\t\t\t\t\t\t\tpercent = (photo.height - settings.mh) / photo.height;\n\t\t\t\t\t\t\tsetResize();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (settings.h) {\n\t\t\t\t\t\tphoto.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ($related[1] && (settings.get('loop') || $related[index + 1])) {\n\t\t\t\t\t\tphoto.style.cursor = 'pointer';\n\n\t\t\t\t\t\t$(photo).bind('click.'+prefix, function () {\n\t\t\t\t\t\t\tpublicMethod.next();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tphoto.style.width = photo.width + 'px';\n\t\t\t\t\tphoto.style.height = photo.height + 'px';\n\t\t\t\t\tprep(photo);\n\t\t\t\t}, 1);\n\t\t\t});\n\n\t\t\tphoto.src = href;\n\n\t\t} else if (href) {\n\t\t\t$loadingBay.load(href, settings.get('data'), function (data, status) {\n\t\t\t\tif (request === requests) {\n\t\t\t\t\tprep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t// Navigates to the next page/image in a set.\n\tpublicMethod.next = function () {\n\t\tif (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {\n\t\t\tindex = getIndex(1);\n\t\t\tlaunch($related[index]);\n\t\t}\n\t};\n\n\tpublicMethod.prev = function () {\n\t\tif (!active && $related[1] && (settings.get('loop') || index)) {\n\t\t\tindex = getIndex(-1);\n\t\t\tlaunch($related[index]);\n\t\t}\n\t};\n\n\t// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();\n\tpublicMethod.close = function () {\n\t\tif (open && !closing) {\n\n\t\t\tclosing = true;\n\t\t\topen = false;\n\t\t\ttrigger(event_cleanup);\n\t\t\tsettings.get('onCleanup');\n\t\t\t$window.unbind('.' + prefix);\n\t\t\t$overlay.fadeTo(settings.get('fadeOut') || 0, 0);\n\n\t\t\t$box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {\n\t\t\t\t$box.hide();\n\t\t\t\t$overlay.hide();\n\t\t\t\ttrigger(event_purge);\n\t\t\t\t$loaded.remove();\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tclosing = false;\n\t\t\t\t\ttrigger(event_closed);\n\t\t\t\t\tsettings.get('onClosed');\n\t\t\t\t}, 1);\n\t\t\t});\n\t\t}\n\t};\n\n\t// Removes changes Colorbox made to the document, but does not remove the plugin.\n\tpublicMethod.remove = function () {\n\t\tif (!$box) { return; }\n\n\t\t$box.stop();\n\t\t$[colorbox].close();\n\t\t$box.stop(false, true).remove();\n\t\t$overlay.remove();\n\t\tclosing = false;\n\t\t$box = null;\n\t\t$('.' + boxElement)\n\t\t\t.removeData(colorbox)\n\t\t\t.removeClass(boxElement);\n\n\t\t$(document).unbind('click.'+prefix).unbind('keydown.'+prefix);\n\t};\n\n\t// A method for fetching the current element Colorbox is referencing.\n\t// returns a jQuery object.\n\tpublicMethod.element = function () {\n\t\treturn $(settings.el);\n\t};\n\n\tpublicMethod.settings = defaults;\n\n}(jQuery, document, window));\n","/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","/*!\n * Unidragger v2.3.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n this.pointerDownPointer = pointer;\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.0\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 for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\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 */\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/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 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/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof 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 */\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\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\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\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/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\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 : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @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 * @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 /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {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 };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","window.$ = window.jQuery = require('jquery');\nwindow.jQueryBridget = require('jquery-bridget');\nwindow.colorbox = require('jquery-colorbox');\n\nfunction youTubeGetID( url ) {\n\n var ID = '';\n url = url.replace(/(>|<)/gi,'').split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n if(url[2] !== undefined) {\n ID = url[2].split(/[^0-9a-z_-]/i);\n ID = ID[0];\n } else {\n ID = url;\n }\n return ID;\n\n}\n\nfunction vimeoGetID( url ) {\n\n var ID = '';\n\n url = url.split( '/' );\n\n if ( url[3] !== undefined ) {\n ID = url[3];\n }\n\n return ID;\n\n}\n\njQuery( document ).ready(function($) {\n\n $(\".wrap a[href*='youtu.be'],.wrap a[href*='youtube']\").each( function() {\n var videoID = youTubeGetID( $(this).attr( 'href' ) );\n $(this).addClass('video-link').attr( 'href', \"https://www.youtube.com/embed/\" + videoID + \"?rel=0&autoplay=1&wmode=transparent&modestbranding=1&showinfo=0\");\n });\n\n $(\".wrap a[href*='vimeo']\").each( function() {\n var videoID = vimeoGetID( $(this).attr( 'href' ) );\n $(this).addClass('video-link').attr( 'href', \"https://player.vimeo.com/video/\" + videoID + \"?autoplay=1&title=0&byline=0&portrait=0\");\n });\n\n // Video Player (include video URL in a tag href)\n $('.video-link').colorbox({\n iframe : true,\n transition : \"none\",\n width : \"100%\",\n height : \"100%\",\n innerWidth : \"100%\",\n innerHeight : \"100%\",\n onComplete : function( element ) {\n\n $('#colorbox').addClass('video-cbox');\n var caption = $(element.el).attr('title');\n\n if ( caption ) {\n $('#cboxTitle').html( caption );\n } else {\n $('#cboxTitle').addClass('video-caption-hidden');\n }\n\n },\n onClosed : function( element ) {\n $('#cboxTitle').html('');\n $('#colorbox').removeClass('video-cbox');\n $('#cboxTitle').removeClass('video-caption-hidden');\n }\n });\n\n});\n","// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils'\n ], function( utils ) {\n return factory( window, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n });\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i=0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i=0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n","// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","jQuery(document).ready(function($) {\n\n\t$('.accordion--title-link').on('click',function(e){\n\t\te.preventDefault();\n\t\t$(this).parent().remove();\n\t\t$( $(this).attr('href') ).toggleClass('is-collapsed');\n\t});\n\n});\n","// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate'\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i=index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n });\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match(/^(\\d+)%$/);\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5\n },\n left: {\n left: 0,\n right: 1\n },\n right: {\n right: 0,\n left: 1\n }\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i=0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i=0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility ||isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n });\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\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\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\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\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\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\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof 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\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar 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 ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\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 */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\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 */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\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 */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\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 */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\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 */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\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 */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\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 */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\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 */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\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 */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\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\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\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)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\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\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\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).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\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 */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\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.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\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\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\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).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\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/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\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\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\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\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\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 */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\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\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\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\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tif ( typeof props.top === \"number\" ) {\n\t\t\t\tprops.top += \"px\";\n\t\t\t}\n\t\t\tif ( typeof props.left === \"number\" ) {\n\t\t\t\tprops.left += \"px\";\n\t\t\t}\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\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\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t} );\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// 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\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\n};\n\n\n\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\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\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\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)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n","/*!\n * Flickity v2.2.1\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2019 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n})( window, function factory( Flickity ) {\n /*jshint strict: false*/\n return Flickity;\n});\n","/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n","jQuery(document).ready(function($) {\n\n\t$('.tab--link a').on('click', function(e){\n\n\t\te.preventDefault();\n\n\t\tvar id = $(this).attr('href');\n\t\tvar tabs = $(this).closest('.tabs');\n\n\t\ttabs.find('.tab--content').removeClass('is-showing');\n\t\t$( id ).addClass('is-showing');\n\n\t});\n\n\n\t$('.tab--close').on('click', function(e){\n\n\t\te.preventDefault();\n\n\t\tvar tabs = $(this).closest('.tabs');\n\n\t\ttabs.find('.tab--content').removeClass('is-showing');\n\n\t});\n\n});","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x = moveVector.x % this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :\n typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :\n (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n}(this, (function (exports, $, Popper) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : 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 _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\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\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 * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\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 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 ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(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 $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.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 // eslint-disable-next-line no-bitwise\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 (err) {\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 = $(element).css('transition-duration');\n var transitionDelay = $(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 $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\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 $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n }\n\n var version = $.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 * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'alert';\n var VERSION = '4.4.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\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 $.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 = $(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $.Event(Event.CLOSE);\n $(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $(element).removeClass(ClassName.SHOW);\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $(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 $(element).detach().trigger(Event.CLOSED).remove();\n } // Static\n ;\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(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 $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface;\n $.fn[NAME].Constructor = Alert;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$1 = 'button';\n var VERSION$1 = '4.4.1';\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 = $.fn[NAME$1];\n var ClassName$1 = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector$1 = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLES: '[data-toggle=\"buttons\"]',\n DATA_TOGGLE: '[data-toggle=\"button\"]',\n DATA_TOGGLES_BUTTONS: '[data-toggle=\"buttons\"] .btn',\n INPUT: 'input:not([type=\"hidden\"])',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event$1 = {\n CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1),\n LOAD_DATA_API: \"load\" + EVENT_KEY$1 + DATA_API_KEY$1\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLES)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(Selector$1.INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName$1.ACTIVE);\n }\n }\n } else if (input.type === 'checkbox') {\n if (this._element.tagName === 'LABEL' && input.checked === this._element.classList.contains(ClassName$1.ACTIVE)) {\n triggerChangeEvent = false;\n }\n } else {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n triggerChangeEvent = false;\n }\n\n if (triggerChangeEvent) {\n input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n $(input).trigger('change');\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(ClassName$1.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName$1.ACTIVE);\n }\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$1);\n this._element = null;\n } // Static\n ;\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$1);\n\n if (!data) {\n data = new Button(this);\n $(this).data(DATA_KEY$1, data);\n }\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 $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n var button = event.target;\n\n if (!$(button).hasClass(ClassName$1.BUTTON)) {\n button = $(button).closest(Selector$1.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$1.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 Button._jQueryInterface.call($(button), 'toggle');\n }\n }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n var button = $(event.target).closest(Selector$1.BUTTON)[0];\n $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n });\n $(window).on(Event$1.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$1.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$1.INPUT);\n\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(ClassName$1.ACTIVE);\n } else {\n button.classList.remove(ClassName$1.ACTIVE);\n }\n } // find all button toggles\n\n\n buttons = [].slice.call(document.querySelectorAll(Selector$1.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(ClassName$1.ACTIVE);\n } else {\n _button.classList.remove(ClassName$1.ACTIVE);\n }\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$1] = Button._jQueryInterface;\n $.fn[NAME$1].Constructor = Button;\n\n $.fn[NAME$1].noConflict = function () {\n $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n return Button._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$2 = 'carousel';\n var VERSION$2 = '4.4.1';\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 = $.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 = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event$2 = {\n SLIDE: \"slide\" + EVENT_KEY$2,\n SLID: \"slid\" + EVENT_KEY$2,\n KEYDOWN: \"keydown\" + EVENT_KEY$2,\n MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n TOUCHEND: \"touchend\" + EVENT_KEY$2,\n POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n POINTERUP: \"pointerup\" + EVENT_KEY$2,\n DRAG_START: \"dragstart\" + EVENT_KEY$2,\n LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n };\n var ClassName$2 = {\n CAROUSEL: 'carousel',\n ACTIVE: 'active',\n SLIDE: 'slide',\n RIGHT: 'carousel-item-right',\n LEFT: 'carousel-item-left',\n NEXT: 'carousel-item-next',\n PREV: 'carousel-item-prev',\n ITEM: 'carousel-item',\n POINTER_EVENT: 'pointer-event'\n };\n var Selector$2 = {\n ACTIVE: '.active',\n ACTIVE_ITEM: '.active.carousel-item',\n ITEM: '.carousel-item',\n ITEM_IMG: '.carousel-item img',\n NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n INDICATORS: '.carousel-indicators',\n DATA_SLIDE: '[data-slide], [data-slide-to]',\n DATA_RIDE: '[data-ride=\"carousel\"]'\n };\n var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Carousel =\n /*#__PURE__*/\n 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$2.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;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $(this._element).is(':visible') && $(this._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$2.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$2.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 $(this._element).one(Event$2.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 $(this._element).off(EVENT_KEY$2);\n $.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 = _objectSpread2({}, 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 $(this._element).on(Event$2.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $(this._element).on(Event$2.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event$2.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 $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n return e.preventDefault();\n });\n\n if (this._pointerEvent) {\n $(this._element).on(Event$2.POINTERDOWN, function (event) {\n return start(event);\n });\n $(this._element).on(Event$2.POINTERUP, function (event) {\n return end(event);\n });\n\n this._element.classList.add(ClassName$2.POINTER_EVENT);\n } else {\n $(this._element).on(Event$2.TOUCHSTART, function (event) {\n return start(event);\n });\n $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n return move(event);\n });\n $(this._element).on(Event$2.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$2.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$2.ACTIVE_ITEM));\n\n var slideEvent = $.Event(Event$2.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $(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$2.ACTIVE));\n $(indicators).removeClass(ClassName$2.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName$2.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this4 = this;\n\n var activeElement = this._element.querySelector(Selector$2.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 = ClassName$2.LEFT;\n orderClassName = ClassName$2.NEXT;\n eventDirectionName = Direction.LEFT;\n } else {\n directionalClassName = ClassName$2.RIGHT;\n orderClassName = ClassName$2.PREV;\n eventDirectionName = Direction.RIGHT;\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\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 = $.Event(Event$2.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n });\n\n if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n $(nextElement).addClass(orderClassName);\n Util.reflow(nextElement);\n $(activeElement).addClass(directionalClassName);\n $(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 $(activeElement).one(Util.TRANSITION_END, function () {\n $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this4._isSliding = false;\n setTimeout(function () {\n return $(_this4._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $(activeElement).removeClass(ClassName$2.ACTIVE);\n $(nextElement).addClass(ClassName$2.ACTIVE);\n this._isSliding = false;\n $(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 = $(this).data(DATA_KEY$2);\n\n var _config = _objectSpread2({}, Default, {}, $(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread2({}, _config, {}, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $(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 = $(selector)[0];\n\n if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread2({}, $(target).data(), {}, $(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($(target), config);\n\n if (slideIndex) {\n $(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 $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n $(window).on(Event$2.LOAD_DATA_API, function () {\n var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $(carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$2] = Carousel._jQueryInterface;\n $.fn[NAME$2].Constructor = Carousel;\n\n $.fn[NAME$2].noConflict = function () {\n $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n return Carousel._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$3 = 'collapse';\n var VERSION$3 = '4.4.1';\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 = $.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$3 = {\n SHOW: \"show\" + EVENT_KEY$3,\n SHOWN: \"shown\" + EVENT_KEY$3,\n HIDE: \"hide\" + EVENT_KEY$3,\n HIDDEN: \"hidden\" + EVENT_KEY$3,\n CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n };\n var ClassName$3 = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector$3 = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Collapse =\n /*#__PURE__*/\n 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$3.DATA_TOGGLE));\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;\n\n // Public\n _proto.toggle = function toggle() {\n if ($(this._element).hasClass(ClassName$3.SHOW)) {\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 || $(this._element).hasClass(ClassName$3.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector$3.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(ClassName$3.COLLAPSE);\n });\n\n if (actives.length === 0) {\n actives = null;\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $.Event(Event$3.SHOW);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $(actives).data(DATA_KEY$3, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $(_this._element).trigger(Event$3.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 $(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 || !$(this._element).hasClass(ClassName$3.SHOW)) {\n return;\n }\n\n var startEvent = $.Event(Event$3.HIDE);\n $(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 $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\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 = $([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(ClassName$3.SHOW)) {\n $(trigger).addClass(ClassName$3.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 $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(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 $.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 = _objectSpread2({}, 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 = $(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 $(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 = $(element).hasClass(ClassName$3.SHOW);\n\n if (triggerArray.length) {\n $(triggerArray).toggleClass(ClassName$3.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 $this = $(this);\n var data = $this.data(DATA_KEY$3);\n\n var _config = _objectSpread2({}, Default$1, {}, $this.data(), {}, typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.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 $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, 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 = $(this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $(selectors).each(function () {\n var $target = $(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 $.fn[NAME$3] = Collapse._jQueryInterface;\n $.fn[NAME$3].Constructor = Collapse;\n\n $.fn[NAME$3].noConflict = function () {\n $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n return Collapse._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$4 = 'dropdown';\n var VERSION$4 = '4.4.1';\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 = $.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$4 = {\n HIDE: \"hide\" + EVENT_KEY$4,\n HIDDEN: \"hidden\" + EVENT_KEY$4,\n SHOW: \"show\" + EVENT_KEY$4,\n SHOWN: \"shown\" + EVENT_KEY$4,\n CLICK: \"click\" + EVENT_KEY$4,\n CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n };\n var ClassName$4 = {\n DISABLED: 'disabled',\n SHOW: 'show',\n DROPUP: 'dropup',\n DROPRIGHT: 'dropright',\n DROPLEFT: 'dropleft',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n POSITION_STATIC: 'position-static'\n };\n var Selector$4 = {\n DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n FORM_CHILD: '.dropdown form',\n MENU: '.dropdown-menu',\n NAVBAR_NAV: '.navbar-nav',\n VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n };\n var AttachmentMap = {\n TOP: 'top-start',\n TOPEND: 'top-end',\n BOTTOM: 'bottom-start',\n BOTTOMEND: 'bottom-end',\n RIGHT: 'right-start',\n RIGHTEND: 'right-end',\n LEFT: 'left-start',\n LEFTEND: 'left-end'\n };\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 =\n /*#__PURE__*/\n 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;\n\n // Public\n _proto.toggle = function toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n return;\n }\n\n var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\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 || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $(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 === '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 $(parent).addClass(ClassName$4.POSITION_STATIC);\n }\n\n this._popper = new Popper(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 && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n this._element.focus();\n\n this._element.setAttribute('aria-expanded', true);\n\n $(this._menu).toggleClass(ClassName$4.SHOW);\n $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n };\n\n _proto.hide = function hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n return;\n }\n\n var relatedTarget = {\n relatedTarget: this._element\n };\n var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n var parent = Dropdown._getParentFromElement(this._element);\n\n $(parent).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (this._popper) {\n this._popper.destroy();\n }\n\n $(this._menu).toggleClass(ClassName$4.SHOW);\n $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY$4);\n $(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 $(this._element).on(Event$4.CLICK, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n _this.toggle();\n });\n };\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread2({}, this.constructor.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$4.MENU);\n }\n }\n\n return this._menu;\n };\n\n _proto._getPlacement = function _getPlacement() {\n var $parentDropdown = $(this._element.parentNode);\n var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n placement = AttachmentMap.TOP;\n\n if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n placement = AttachmentMap.TOPEND;\n }\n } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT;\n } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n placement = AttachmentMap.LEFT;\n } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND;\n }\n\n return placement;\n };\n\n _proto._detectNavbar = function _detectNavbar() {\n return $(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 = _objectSpread2({}, 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 _objectSpread2({}, popperConfig, {}, this._config.popperConfig);\n } // Static\n ;\n\n Dropdown._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(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 $(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$4.DATA_TOGGLE));\n\n for (var i = 0, len = toggles.length; i < len; i++) {\n var parent = Dropdown._getParentFromElement(toggles[i]);\n\n var context = $(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 (!$(parent).hasClass(ClassName$4.SHOW)) {\n continue;\n }\n\n if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n continue;\n }\n\n var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n $(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 $(document.body).children().off('mouseover', null, $.noop);\n }\n\n toggles[i].setAttribute('aria-expanded', 'false');\n\n if (context._popper) {\n context._popper.destroy();\n }\n\n $(dropdownMenu).removeClass(ClassName$4.SHOW);\n $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, 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 || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n return;\n }\n\n var parent = Dropdown._getParentFromElement(this);\n\n var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return;\n }\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n $(toggle).trigger('focus');\n }\n\n $(this).trigger('click');\n return;\n }\n\n var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS)).filter(function (item) {\n return $(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 $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n Dropdown._jQueryInterface.call($(this), 'toggle');\n }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n e.stopPropagation();\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$4] = Dropdown._jQueryInterface;\n $.fn[NAME$4].Constructor = Dropdown;\n\n $.fn[NAME$4].noConflict = function () {\n $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n return Dropdown._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$5 = 'modal';\n var VERSION$5 = '4.4.1';\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 = $.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$5 = {\n HIDE: \"hide\" + EVENT_KEY$5,\n HIDE_PREVENTED: \"hidePrevented\" + EVENT_KEY$5,\n HIDDEN: \"hidden\" + EVENT_KEY$5,\n SHOW: \"show\" + EVENT_KEY$5,\n SHOWN: \"shown\" + EVENT_KEY$5,\n FOCUSIN: \"focusin\" + EVENT_KEY$5,\n RESIZE: \"resize\" + EVENT_KEY$5,\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n };\n var ClassName$5 = {\n SCROLLABLE: 'modal-dialog-scrollable',\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n BACKDROP: 'modal-backdrop',\n OPEN: 'modal-open',\n FADE: 'fade',\n SHOW: 'show',\n STATIC: 'modal-static'\n };\n var Selector$5 = {\n DIALOG: '.modal-dialog',\n MODAL_BODY: '.modal-body',\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\n FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT: '.sticky-top'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(Selector$5.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;\n\n // Public\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 ($(this._element).hasClass(ClassName$5.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $.Event(Event$5.SHOW, {\n relatedTarget: relatedTarget\n });\n $(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 $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n if ($(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 = $.Event(Event$5.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(document).off(Event$5.FOCUSIN);\n $(this._element).removeClass(ClassName$5.SHOW);\n $(this._element).off(Event$5.CLICK_DISMISS);\n $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(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 $(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 $(document).off(Event$5.FOCUSIN);\n $.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 = _objectSpread2({}, 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 = $.Event(Event$5.HIDE_PREVENTED);\n $(this._element).trigger(hideEventPrevented);\n\n if (hideEventPrevented.defaultPrevented) {\n return;\n }\n\n this._element.classList.add(ClassName$5.STATIC);\n\n var modalTransitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function () {\n _this3._element.classList.remove(ClassName$5.STATIC);\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 = $(this._element).hasClass(ClassName$5.FADE);\n var modalBody = this._dialog ? this._dialog.querySelector(Selector$5.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 if ($(this._dialog).hasClass(ClassName$5.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 $(this._element).addClass(ClassName$5.SHOW);\n\n if (this._config.focus) {\n this._enforceFocus();\n }\n\n var shownEvent = $.Event(Event$5.SHOWN, {\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 $(_this4._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $(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 $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n .on(Event$5.FOCUSIN, function (event) {\n if (document !== event.target && _this5._element !== event.target && $(_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 && this._config.keyboard) {\n $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE$1) {\n _this6._triggerBackdropTransition();\n }\n });\n } else if (!this._isShown) {\n $(this._element).off(Event$5.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this7 = this;\n\n if (this._isShown) {\n $(window).on(Event$5.RESIZE, function (event) {\n return _this7.handleUpdate(event);\n });\n } else {\n $(window).off(Event$5.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._isTransitioning = false;\n\n this._showBackdrop(function () {\n $(document.body).removeClass(ClassName$5.OPEN);\n\n _this8._resetAdjustments();\n\n _this8._resetScrollbar();\n\n $(_this8._element).trigger(Event$5.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this9 = this;\n\n var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div');\n this._backdrop.className = ClassName$5.BACKDROP;\n\n if (animate) {\n this._backdrop.classList.add(animate);\n }\n\n $(this._backdrop).appendTo(document.body);\n $(this._element).on(Event$5.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 $(this._backdrop).addClass(ClassName$5.SHOW);\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 $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this9._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($(this._element).hasClass(ClassName$5.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $(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 = 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$5.FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n $(fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $(element).css('padding-right');\n $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $(stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(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 = $(document.body).css('padding-right');\n $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $(document.body).addClass(ClassName$5.OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n $(fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right');\n $(element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n $(elements).each(function (index, element) {\n var margin = $(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $(document.body).data('padding-right');\n $(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 = ClassName$5.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 = $(this).data(DATA_KEY$5);\n\n var _config = _objectSpread2({}, Default$3, {}, $(this).data(), {}, typeof config === 'object' && config ? config : {});\n\n if (!data) {\n data = new Modal(this, _config);\n $(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 $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, 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 = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread2({}, $(target).data(), {}, $(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $(target).one(Event$5.SHOW, 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$5.HIDDEN, function () {\n if ($(_this11).is(':visible')) {\n _this11.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$5] = Modal._jQueryInterface;\n $.fn[NAME$5].Constructor = Modal;\n\n $.fn[NAME$5].noConflict = function () {\n $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n return Modal._jQueryInterface;\n };\n\n /**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.4.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\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', '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,[a-z0-9+/]+=*$/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, 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(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 * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$6 = 'tooltip';\n var VERSION$6 = '4.4.1';\n var DATA_KEY$6 = 'bs.tooltip';\n var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n var JQUERY_NO_CONFLICT$6 = $.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$1 = {\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 HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var Event$6 = {\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 ClassName$6 = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$6 = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(element, config) {\n if (typeof Popper === '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;\n\n // Public\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 = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(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 ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\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 $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n if (this.tip) {\n $(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 ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var shadowRoot = Util.findShadowRoot(this.element);\n var isInTheDom = $.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 $(tip).addClass(ClassName$6.FADE);\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 $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment));\n $(tip).addClass(ClassName$6.SHOW); // 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 $(document.body).children().on('mouseover', null, $.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 $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName$6.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(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 = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_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 $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName$6.SHOW); // 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 $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName$6.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(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 $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\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 (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(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$6.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 _objectSpread2({}, 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 = _objectSpread2({}, 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 $(this.config.container);\n }\n\n return $(document).find(this.config.container);\n };\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap$1[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 $(_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 $(_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 $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n if (this.config.selector) {\n this.config = _objectSpread2({}, 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 || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(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 ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.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 === HoverState.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 || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(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 = HoverState.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 === HoverState.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 = $(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 = _objectSpread2({}, 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 = $(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 var popperInstance = popperData.instance;\n this.tip = popperInstance.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 $(tip).removeClass(ClassName$6.FADE);\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 data = $(this).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 $(this).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$6;\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 $.fn[NAME$6] = Tooltip._jQueryInterface;\n $.fn[NAME$6].Constructor = Tooltip;\n\n $.fn[NAME$6].noConflict = function () {\n $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n return Tooltip._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$7 = 'popover';\n var VERSION$7 = '4.4.1';\n var DATA_KEY$7 = 'bs.popover';\n var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n var JQUERY_NO_CONFLICT$7 = $.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 = _objectSpread2({}, 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 = _objectSpread2({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName$7 = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$7 = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var Event$7 = {\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 =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector$7.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$7.CONTENT), content);\n $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\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 = $(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 = $(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 $(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$7;\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 $.fn[NAME$7] = Popover._jQueryInterface;\n $.fn[NAME$7].Constructor = Popover;\n\n $.fn[NAME$7].noConflict = function () {\n $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n return Popover._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$8 = 'scrollspy';\n var VERSION$8 = '4.4.1';\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 = $.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$8 = {\n ACTIVATE: \"activate\" + EVENT_KEY$8,\n SCROLL: \"scroll\" + EVENT_KEY$8,\n LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n };\n var ClassName$8 = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var Selector$8 = {\n DATA_SPY: '[data-spy=\"scroll\"]',\n ACTIVE: '.active',\n NAV_LIST_GROUP: '.nav, .list-group',\n NAV_LINKS: '.nav-link',\n NAV_ITEMS: '.nav-item',\n LIST_ITEMS: '.list-group-item',\n DROPDOWN: '.dropdown',\n DROPDOWN_ITEMS: '.dropdown-item',\n DROPDOWN_TOGGLE: '.dropdown-toggle'\n };\n var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var ScrollSpy =\n /*#__PURE__*/\n 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$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $(this._scrollElement).on(Event$8.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;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.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 [$(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 $.removeData(this._element, DATA_KEY$8);\n $(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 = _objectSpread2({}, Default$6, {}, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME$8);\n $(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 var offsetLength = this._offsets.length;\n\n for (var i = offsetLength; 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 = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n $link.addClass(ClassName$8.ACTIVE);\n } else {\n // Set triggered link as active\n $link.addClass(ClassName$8.ACTIVE); // 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$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n }\n\n $(this._scrollElement).trigger(Event$8.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(ClassName$8.ACTIVE);\n }).forEach(function (node) {\n return node.classList.remove(ClassName$8.ACTIVE);\n });\n } // Static\n ;\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY$8);\n\n var _config = typeof config === 'object' && config;\n\n if (!data) {\n data = new ScrollSpy(this, _config);\n $(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 $(window).on(Event$8.LOAD_DATA_API, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n $.fn[NAME$8].Constructor = ScrollSpy;\n\n $.fn[NAME$8].noConflict = function () {\n $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n return ScrollSpy._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$9 = 'tab';\n var VERSION$9 = '4.4.1';\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 = $.fn[NAME$9];\n var Event$9 = {\n HIDE: \"hide\" + EVENT_KEY$9,\n HIDDEN: \"hidden\" + EVENT_KEY$9,\n SHOW: \"show\" + EVENT_KEY$9,\n SHOWN: \"shown\" + EVENT_KEY$9,\n CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n };\n var ClassName$9 = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector$9 = {\n DROPDOWN: '.dropdown',\n NAV_LIST_GROUP: '.nav, .list-group',\n ACTIVE: '.active',\n ACTIVE_UL: '> li > .active',\n DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n DROPDOWN_TOGGLE: '.dropdown-toggle',\n DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n previous = $.makeArray($(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $.Event(Event$9.HIDE, {\n relatedTarget: this._element\n });\n var showEvent = $.Event(Event$9.SHOW, {\n relatedTarget: previous\n });\n\n if (previous) {\n $(previous).trigger(hideEvent);\n }\n\n $(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 = $.Event(Event$9.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $.Event(Event$9.SHOWN, {\n relatedTarget: previous\n });\n $(previous).trigger(hiddenEvent);\n $(_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 $.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') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n var active = activeElements[0];\n var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\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 $(active).removeClass(ClassName$9.SHOW).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 $(active).removeClass(ClassName$9.ACTIVE);\n var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false);\n }\n }\n\n $(element).addClass(ClassName$9.ACTIVE);\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(ClassName$9.FADE)) {\n element.classList.add(ClassName$9.SHOW);\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\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 = $(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 $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME$9] = Tab._jQueryInterface;\n $.fn[NAME$9].Constructor = Tab;\n\n $.fn[NAME$9].noConflict = function () {\n $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n return Tab._jQueryInterface;\n };\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME$a = 'toast';\n var VERSION$a = '4.4.1';\n var DATA_KEY$a = 'bs.toast';\n var EVENT_KEY$a = \".\" + DATA_KEY$a;\n var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n var Event$a = {\n CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n HIDE: \"hide\" + EVENT_KEY$a,\n HIDDEN: \"hidden\" + EVENT_KEY$a,\n SHOW: \"show\" + EVENT_KEY$a,\n SHOWN: \"shown\" + EVENT_KEY$a\n };\n var ClassName$a = {\n FADE: 'fade',\n HIDE: 'hide',\n SHOW: 'show',\n SHOWING: 'showing'\n };\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$a = {\n DATA_DISMISS: '[data-dismiss=\"toast\"]'\n };\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n var Toast =\n /*#__PURE__*/\n 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;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n var showEvent = $.Event(Event$a.SHOW);\n $(this._element).trigger(showEvent);\n\n if (showEvent.isDefaultPrevented()) {\n return;\n }\n\n if (this._config.animation) {\n this._element.classList.add(ClassName$a.FADE);\n }\n\n var complete = function complete() {\n _this._element.classList.remove(ClassName$a.SHOWING);\n\n _this._element.classList.add(ClassName$a.SHOW);\n\n $(_this._element).trigger(Event$a.SHOWN);\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(ClassName$a.HIDE);\n\n Util.reflow(this._element);\n\n this._element.classList.add(ClassName$a.SHOWING);\n\n if (this._config.animation) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(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(ClassName$a.SHOW)) {\n return;\n }\n\n var hideEvent = $.Event(Event$a.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._close();\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n this._timeout = null;\n\n if (this._element.classList.contains(ClassName$a.SHOW)) {\n this._element.classList.remove(ClassName$a.SHOW);\n }\n\n $(this._element).off(Event$a.CLICK_DISMISS);\n $.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 = _objectSpread2({}, Default$7, {}, $(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 $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, 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(ClassName$a.HIDE);\n\n $(_this3._element).trigger(Event$a.HIDDEN);\n };\n\n this._element.classList.remove(ClassName$a.SHOW);\n\n if (this._config.animation) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n } // Static\n ;\n\n Toast._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(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 $.fn[NAME$a] = Toast._jQueryInterface;\n $.fn[NAME$a].Constructor = Toast;\n\n $.fn[NAME$a].noConflict = function () {\n $.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\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.js.map\n","require('./bootstrap');\n\n// Components\nrequire('./components/utilities');\nrequire('./components/disclaimer');\nrequire('./components/colorbox');\nrequire('./components/responsive-slider');\nrequire('./components/post');\n\n// Blocks\nrequire('./blocks/accordion');\nrequire('./blocks/stats');\nrequire('./blocks/tabs');\n","var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var i,a=1,s=arguments.length;a<s;a++)for(var n in i=arguments[a])Object.prototype.hasOwnProperty.call(i,n)&&(t[n]=i[n]);return t}).apply(this,arguments)},CountUp=function(){function t(t,i,a){var s=this;this.target=t,this.endVal=i,this.options=a,this.version=\"2.0.4\",this.defaults={startVal:0,decimalPlaces:0,duration:2,useEasing:!0,useGrouping:!0,smartEasingThreshold:999,smartEasingAmount:333,separator:\",\",decimal:\".\",prefix:\"\",suffix:\"\"},this.finalEndVal=null,this.useEasing=!0,this.countDown=!1,this.error=\"\",this.startVal=0,this.paused=!0,this.count=function(t){s.startTime||(s.startTime=t);var i=t-s.startTime;s.remaining=s.duration-i,s.useEasing?s.countDown?s.frameVal=s.startVal-s.easingFn(i,0,s.startVal-s.endVal,s.duration):s.frameVal=s.easingFn(i,s.startVal,s.endVal-s.startVal,s.duration):s.countDown?s.frameVal=s.startVal-(s.startVal-s.endVal)*(i/s.duration):s.frameVal=s.startVal+(s.endVal-s.startVal)*(i/s.duration),s.countDown?s.frameVal=s.frameVal<s.endVal?s.endVal:s.frameVal:s.frameVal=s.frameVal>s.endVal?s.endVal:s.frameVal,s.frameVal=Math.round(s.frameVal*s.decimalMult)/s.decimalMult,s.printValue(s.frameVal),i<s.duration?s.rAF=requestAnimationFrame(s.count):null!==s.finalEndVal?s.update(s.finalEndVal):s.callback&&s.callback()},this.formatNumber=function(t){var i,a,n,e,r,o=t<0?\"-\":\"\";if(i=Math.abs(t).toFixed(s.options.decimalPlaces),n=(a=(i+=\"\").split(\".\"))[0],e=a.length>1?s.options.decimal+a[1]:\"\",s.options.useGrouping){r=\"\";for(var l=0,h=n.length;l<h;++l)0!==l&&l%3==0&&(r=s.options.separator+r),r=n[h-l-1]+r;n=r}return s.options.numerals&&s.options.numerals.length&&(n=n.replace(/[0-9]/g,function(t){return s.options.numerals[+t]}),e=e.replace(/[0-9]/g,function(t){return s.options.numerals[+t]})),o+s.options.prefix+n+e+s.options.suffix},this.easeOutExpo=function(t,i,a,s){return a*(1-Math.pow(2,-10*t/s))*1024/1023+i},this.options=__assign({},this.defaults,a),this.formattingFn=this.options.formattingFn?this.options.formattingFn:this.formatNumber,this.easingFn=this.options.easingFn?this.options.easingFn:this.easeOutExpo,this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.endVal=this.validateValue(i),this.options.decimalPlaces=Math.max(this.options.decimalPlaces),this.decimalMult=Math.pow(10,this.options.decimalPlaces),this.resetDuration(),this.options.separator=String(this.options.separator),this.useEasing=this.options.useEasing,\"\"===this.options.separator&&(this.options.useGrouping=!1),this.el=\"string\"==typeof t?document.getElementById(t):t,this.el?this.printValue(this.startVal):this.error=\"[CountUp] target is null or undefined\"}return t.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold){this.finalEndVal=t;var a=this.countDown?1:-1;this.endVal=t+a*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,this.finalEndVal||this.resetDuration(),this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},t.prototype.printValue=function(t){var i=this.formattingFn(t);\"INPUT\"===this.el.tagName?this.el.value=i:\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i},t.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \"+t,null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},t}();export{CountUp};","import { CountUp } from 'countup.js';\n\njQuery(document).ready(function($) {\n\n var isScrolledIntoView = function(elem) {\n var docViewTop = $(window).scrollTop();\n var docViewBottom = docViewTop + $(window).height();\n var elemTop = $(elem).offset().top;\n var elemBottom = elemTop + $(elem).height();\n return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));\n }\n\n var numbersAnimation = function() {\n\n var numbers = $('.number');\n\n $.each( numbers, function ( i, e ) {\n\n if ( isScrolledIntoView(this) === true && !$(this).hasClass('is-in-view') ) {\n\n var endVal = $(this).text().replace(/,/g, '');\n $(this).addClass('is-in-view');\n\n var hasDecimals = endVal.indexOf('.') == -1 ? 0 : 1;\n\n var separator = $(this).data('separator');\n separator = separator ? '' : ',';\n\n var options = {\n startVal : 0,\n   useEasing : false,\n   useGrouping : true,\n   separator : separator,\n   decimal : '.',\n decimalPlaces : hasDecimals,\n duration : 2\n };\n\n if ( endVal && endVal > 0 ) {\n var number = new CountUp( jQuery(this).attr('id'), endVal, options);\n number.start();\n }\n\n }\n\n });\n\n };\n\n numbersAnimation();\n\n $(window).scroll(function () {\n numbersAnimation();\n });\n\n});\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","/**\n * Bridget makes jQuery widgets\n * v2.0.1\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [ 'jquery' ], function( jQuery ) {\n return factory( window, jQuery );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('jquery')\n );\n } else {\n // browser global\n window.jQueryBridget = factory(\n window,\n window.jQuery\n );\n }\n\n}( window, function factory( window, jQuery ) {\n'use strict';\n\n// ----- utils ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// helper function for logging errors\n// $.error breaks jQuery chaining\nvar console = window.console;\nvar logError = typeof console == 'undefined' ? function() {} :\n function( message ) {\n console.error( message );\n };\n\n// ----- jQueryBridget ----- //\n\nfunction jQueryBridget( namespace, PluginClass, $ ) {\n $ = $ || jQuery || window.jQuery;\n if ( !$ ) {\n return;\n }\n\n // add option method -> $().plugin('option', {...})\n if ( !PluginClass.prototype.option ) {\n // option setter\n PluginClass.prototype.option = function( opts ) {\n // bail out if not an object\n if ( !$.isPlainObject( opts ) ){\n return;\n }\n this.options = $.extend( true, this.options, opts );\n };\n }\n\n // make jQuery plugin\n $.fn[ namespace ] = function( arg0 /*, arg1 */ ) {\n if ( typeof arg0 == 'string' ) {\n // method call $().plugin( 'methodName', { options } )\n // shift arguments by 1\n var args = arraySlice.call( arguments, 1 );\n return methodCall( this, arg0, args );\n }\n // just $().plugin({ options })\n plainCall( this, arg0 );\n return this;\n };\n\n // $().plugin('methodName')\n function methodCall( $elems, methodName, args ) {\n var returnValue;\n var pluginMethodStr = '$().' + namespace + '(\"' + methodName + '\")';\n\n $elems.each( function( i, elem ) {\n // get instance\n var instance = $.data( elem, namespace );\n if ( !instance ) {\n logError( namespace + ' not initialized. Cannot call methods, i.e. ' +\n pluginMethodStr );\n return;\n }\n\n var method = instance[ methodName ];\n if ( !method || methodName.charAt(0) == '_' ) {\n logError( pluginMethodStr + ' is not a valid method' );\n return;\n }\n\n // apply method, get return value\n var value = method.apply( instance, args );\n // set return value if value is returned, use only first value\n returnValue = returnValue === undefined ? value : returnValue;\n });\n\n return returnValue !== undefined ? returnValue : $elems;\n }\n\n function plainCall( $elems, options ) {\n $elems.each( function( i, elem ) {\n var instance = $.data( elem, namespace );\n if ( instance ) {\n // set options & init\n instance.option( options );\n instance._init();\n } else {\n // initialize new instance\n instance = new PluginClass( elem, options );\n $.data( elem, namespace, instance );\n }\n });\n }\n\n updateJQuery( $ );\n\n}\n\n// ----- updateJQuery ----- //\n\n// set $.bridget for v1 backwards compatibility\nfunction updateJQuery( $ ) {\n if ( !$ || ( $ && $.bridget ) ) {\n return;\n }\n $.bridget = jQueryBridget;\n}\n\nupdateJQuery( jQuery || window.jQuery );\n\n// ----- ----- //\n\nreturn jQueryBridget;\n\n}));\n","try {\n\n // Vendor libs\n window.$ = window.jQuery = require('jquery');\n window.jQueryBridget = require('jquery-bridget');\n window.Masonry = require('masonry-layout');\n window.flickity = require('flickity');\n\n // make Masonry a jQuery plugin\n jQueryBridget( 'masonry', Masonry, $ );\n\n // TWBS\n window.Popper = require('popper.js/dist/umd/popper.js').default;\n require('bootstrap');\n\n jQuery.fn.exists = function(){return this.length>0;}\n\n $.fn.serializeObject = jQuery.fn.serializeObject = function() {\n var o = {};\n var a = this.serializeArray();\n $.each(a, function() {\n if (o[this.name] !== undefined) {\n if (!o[this.name].push) {\n o[this.name] = [o[this.name]];\n }\n o[this.name].push(this.value || '');\n } else {\n o[this.name] = this.value || '';\n }\n });\n return o;\n };\n\n} catch (e) {\n console.log(e);\n}\n","jQuery( document ).ready(function($) {\n\n var winWidth = $(window).width();\n\n $('.masthead--arrow').on('click', function(e) {\n\n e.preventDefault();\n\n var curEl = $($(this).attr('href'));\n var nextOffset = curEl.next().offset();\n var nextOffsetTop = nextOffset.top;\n\n $('html, body').animate({\n scrollTop: nextOffsetTop + 'px'\n }, 750);\n\n });\n\n $('.content-info--back-to-top').on('click', function(e) {\n e.preventDefault();\n $('html, body').animate({\n scrollTop: 0\n }, 750);\n });\n\n // Add class to body on hamburger click\n $('.navbar-toggler').on('click', function(e) {\n e.preventDefault();\n $('body').toggleClass('menu-is-open');\n });\n\n var isIE11 = !!window.MSInputMethodContext && !!document.documentMode ? 'is-ie' : 'is-not-ie';\n\n $('body').addClass('is-loaded').addClass(isIE11);\n\n // Detect if banner has been scrolled past\n var navScrolled = function() {\n\n var $window = $(window);\n var docViewTop = 90;\n var nav = $('.banner');\n var elemTop = $window.scrollTop();\n\n if ( elemTop > docViewTop ) {\n nav.addClass('scrolled');\n } else {\n nav.removeClass('scrolled');\n }\n\n };\n\n navScrolled();\n\n $( window ).scroll( function(e) {\n navScrolled();\n });\n\n // Detect if element is inview\n var inView = function ( elements ) {\n\n var $window = $(window);\n var docViewTop = $window.scrollTop() + $window.height() - ( $window.height() / 10 );\n\n elements.each( function( index ) {\n\n if ( !$(this).hasClass('over') ) {\n\n var elemTop = $(this).offset().top;\n\n if ( elemTop < docViewTop ) {\n $(this).addClass('over');\n }\n\n }\n\n });\n\n };\n\n inView( $('.inview') );\n\n $( window ).scroll( function(e) {\n inView( $('.inview') );\n });\n\n if ( $('.blank').length > 0 ) {\n\n $('.blank').each( function(index, value) {\n $(this).find('a').attr('target','_blank').attr('rel','external noreferrer noopener');\n });\n\n }\n\n});\n","// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n });\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n });\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\nreturn Slide;\n\n}));\n","/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n\n}));\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n });\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n","$(document).ready(function() {\n\n $(\".posts--pagination-more\").on('click',function(e) {\n e.preventDefault();\n var paged = parseFloat( $(this).attr('data-next') );\n updatePostsResults(paged);\n });\n\n\tvar updatePostsResults = function( paged ) {\n\n paged = paged ? paged : 1;\n var grid = $('.news-grid');\n\n console.log(paged);\n\n $.ajax({\n type : \"post\",\n dataType : \"json\",\n url : localized_object.ajax_url,\n data : {\n action : \"get_posts_form\",\n data : {'paged' : paged},\n nonce : localized_object.nonce,\n paged : paged\n },\n timeout : 300000,\n beforeSend : function() {\n\n }\n }).done( function( response ) {\n\n if ( response && typeof response.news !== 'undefined' ) {\n\n \tvar count = $('.cur-num').text();\n count = parseFloat(count) + parseFloat(response.displaying);\n\n var newPosts = $( response.news );\n grid.append(newPosts);\n\n $(\".posts--pagination-more\").attr('data-next', response.cur_page + 1 );\n $('.cur-num').html(count);\n $('.max-num').html(parseFloat(response.max_count));\n\n if ( response.cur_page < response.max_pages ) {\n $(\".posts--pagination-more\").show();\n } else {\n $(\".posts--pagination-more\").hide();\n }\n\n\t\t }\n\n }).fail( function( request, status, err ) {\n\n console.log( 'REQUEST => ' + request );\n console.log( 'STATUS => ' + status );\n console.log( 'ERR => ' );\n console.log( err );\n\n }).always(function() {\n\n\n\n });\n\n }\n\n});\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity'\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n });\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","jQuery(document).ready(function($) {\n\n if ( $('#disclaimer').length > 0 ) {\n\n var cookie_exists = document.cookie.match(/^(.*;)?\\s*STYXKEYdisclaimerAccepted\\s*=\\s*[^;]+(.*)?$/);\n\n if ( cookie_exists ) {\n $('body').removeClass('disclaimer-popup-showing');\n } else {\n $('body').addClass('disclaimer-popup-showing');\n }\n\n $('.disclaimer--terms-button').on( 'click', function (e) {\n\n e.preventDefault();\n\n var date = new Date();\n date.setTime(date.getTime() + (1000 * 60 * 60 * 24 * 7));\n document.cookie = \"STYXKEYdisclaimerAccepted=1; expires= \" + date;\n $('body').removeClass('disclaimer-popup-showing');\n\n });\n\n }\n\n});\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size'\n ], function( getSize ) {\n return factory( window, getSize );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path');\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n"],"sourceRoot":""}