{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/bootstrap/js/src/util.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/commonFeature.js","webpack:///./node_modules/inputmask/dist/inputmask/dependencyLibs/inputmask.dependencyLib.js","webpack:///./node_modules/inputmask/dist/inputmask/inputmask.date.extensions.js","webpack:///./node_modules/inputmask/dist/inputmask/inputmask.numeric.extensions.js","webpack:///./node_modules/lodash/throttle.js","webpack:///./node_modules/lodash/now.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/keyboardAccessibility.js","webpack:///./node_modules/lodash/_freeGlobal.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/searchHelpers.js","webpack:///./node_modules/lodash/toNumber.js","webpack:///./node_modules/lodash/_baseTrim.js","webpack:///./node_modules/lodash/_trimmedEndIndex.js","webpack:///./node_modules/lodash/isSymbol.js","webpack:///./node_modules/lodash/_baseGetTag.js","webpack:///./node_modules/lodash/_getRawTag.js","webpack:///./node_modules/lodash/_objectToString.js","webpack:///./node_modules/lodash/isObjectLike.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/slickCarousel.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/main.js","webpack:///./node_modules/slick-carousel/slick/slick.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/menu.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/cookie.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/consentTracking.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/footer.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/header.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/miniCart.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/product/base.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/cart/cart.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/formFields.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/collapsibleItem.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/search.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/clientSideValidation.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/countrySelector.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/tooltip.js","webpack:///./cartridges/int_gtm/cartridge/client/default/js/main.js","webpack:///./cartridges/int_gtm/cartridge/client/default/js/checkout/gtm.js","webpack:///./cartridges/int_gtm/cartridge/client/default/js/gtmItemList.js","webpack:///(webpack)/buildin/global.js","webpack:///./cartridges/int_gtm/cartridge/client/default/js/product/gtm.js","webpack:///./cartridges/int_synchrony/cartridge/client/default/js/main.js","webpack:///./cartridges/int_synchrony/cartridge/client/default/js/checkout/checkoutSynchrony.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/phoneMask.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/soci.js","webpack:///./cartridges/int_metaPixel/cartridge/client/default/js/main.js","webpack:///./cartridges/int_metaPixel/cartridge/client/default/js/pixel.js","webpack:///./cartridges/int_pinterest/cartridge/client/default/js/main.js","webpack:///./cartridges/int_pinterest/cartridge/client/default/js/pinterestPixel.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/contentAssetModal.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/thirdParty/bootstrap.js","webpack:///./node_modules/bootstrap/js/src/alert.js","webpack:///./node_modules/bootstrap/js/src/carousel.js","webpack:///./node_modules/bootstrap/js/src/collapse.js","webpack:///./node_modules/bootstrap/js/src/dropdown.js","webpack:///./node_modules/bootstrap/js/src/modal.js","webpack:///./node_modules/bootstrap/js/src/scrollspy.js","webpack:///./node_modules/bootstrap/js/src/tab.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/spinner.js","webpack:///./node_modules/inputmask/dist/inputmask/inputmask.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/components/scrollAnimate.js","webpack:///./node_modules/bootstrap/js/src/tools/sanitizer.js","webpack:///./node_modules/bootstrap/js/src/tooltip.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/product/wishlistHeart.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/checkout/formErrors.js","webpack:///./node_modules/lodash/isObject.js","webpack:///./node_modules/inputmask/dist/inputmask/global/window.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/components/scrollAnimate.js","webpack:///./node_modules/lodash/debounce.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/product/saveForLaterList.js","webpack:///./cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///./node_modules/lodash/_root.js","webpack:///./node_modules/lodash/_Symbol.js","webpack:///./cartridges/app_bassett/cartridge/client/default/js/product/wishlist.js","webpack:///./node_modules/inputmask/index.js","webpack:///./node_modules/inputmask/dist/inputmask/inputmask.extensions.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","global","factory","document","w","Error","window","this","noGlobal","arr","getProto","getPrototypeOf","slice","flat","array","concat","apply","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","jQuery","selector","context","fn","init","isArrayLike","length","jquery","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","results","inArray","second","invert","matches","callbackExpect","arg","guid","iterator","split","_i","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","a","b","pop","pushNative","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","next","childNodes","e","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","testContext","scope","toSelector","join","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","tmp","input","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","matcher","unmatched","lang","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","token","compiled","_name","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","_","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","empty","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","catch","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","values","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","rcustomProp","getStyles","opener","getComputedStyle","swap","old","rboxStyle","rtrimCSS","curCSS","computed","width","minWidth","maxWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classNames","curValue","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","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","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","_jQuery","_$","$","noConflict","transitionEndEmulator","called","Util","TRANSITION_END","triggerTransitionEnd","getUID","getSelectorFromElement","element","hrefAttr","querySelector","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","emulateTransitionEnd","throttle","debounce","$window","cacheWindowSize","innerWidth","breakpointsFeature","oldWidth","setActiveBreakpoint","paramName","newValue","oldValue","oldHight","cacheScroll","mapBreakpoints","breakpoints","xs","sm","md","lg","customLG","xl","xxl","breakpointsList","breakpointsNames","breakpointsName","min","sortedBreakpoints","breakpoint","nextBreakpointIndex","smaller","bigger","checkBreakpoints","currentBreakpoint","prevBreakpointName","previous","getCurrentBreakpointName","getCurrentBreakpointObj","commonFeature","initEvents","_e","getBreakpointMin","breakpointName","isBreakpoint","breakpointQuery","breakpointNameQuery","targetBrekpoint","isSmallerQuery","isBiggerQuery","isEquelQuery","currentBreakpointName","getCurrentBreakpoint","isInViewport","$this","withoutHeader","$headerBanner","$navigation","headerBannerHeight","outerHeight","navigationHeight","elementTop","elementBottom","viewportTop","viewportBottom","getCashedValue","isValidElement","Element","DependencyLib","eventRegistry","addEvent","ev","_events","endx","nsEvent","detachEvent","nmsp","resolveNamespace","hndx","hndL","evts","evNdx","offEvents","offEventsL","evnt","createEvent","CustomEvent","initCustomEvent","dispatchEvent","createEventObject","eventType","fireEvent","ltype","isArraylike","__data","Inputmask","dependencyLib","formatCode","setDate","getDate","dd","pad","ddd","dddd","setMonth","getMonth","mm","mmm","mmmm","yy","setFullYear","getFullYear","yyyy","h","setHours","getHours","hh","hhh","H","HH","HHH","M","setMinutes","getMinutes","MM","ss","setSeconds","getSeconds","setMilliseconds","getMilliseconds","L","tt","T","TT","Z","S","formatAlias","isoDate","isoTime","isoDateTime","isoUtcDateTime","getTokenizer","tokenizer","ndx","format","dateObjValue","mask","escapeRegex","date","analyseMask","maskString","targetProp","dateOperation","dateObj","extendProperty","correctedValue","enteredPart","setValue","extendAliases","datetime","i18n","ordinalSuffix","inputFormat","displayFormat","outputFormat","placeholder","regex","dayNames","monthNames","postValidation","buffer","currentResult","dateParts","getTime","rawday","day","rawyear","rawmonth","month","isValidDate","rawYear","minYear","year","substr","isDateInRange","refreshFromBuffer","onKeyDown","caretPos","RIGHT","today","charAt","getYear","inputmask","_valueSet","onUnMask","maskedValue","unmaskedValue","casing","validPositions","nativeDef","insertMode","shiftPositions","autoEscape","txt","escapedTxt","definitions","optionalmarker","quantifiermarker","groupmarker","alternatormarker","numeric","repeat","integerDigits","groupSeparator","radixPoint","digits","skipOptionalPartCharacter","autoGroup","groupSize","seps","floor","mod","positionCaretOnClick","integerOptional","definitionSymbol","numericInput","digitsOptional","decimalProtect","radixDef","dq","greedy","enforceDigitsOnBlur","allowMinus","negationSymbol","front","back","rightAlign","autoUnmask","unmaskAsNumber","inputType","inputmode","preValidation","isSelection","maskset","isNegative","caret","dopost","radixPos","charAtPos","processValue","radixPosition","rpb","addRadix","postMask","radixSplit","buildPostMask","jitMasking","validator","cardinality","newCaretPos","rslt","onBeforeWrite","unmasked","parseMinMaxOptions","NaN","Number","MIN_VALUE","MAX_VALUE","integerPart","emptyCheck","integerNPart","chrs","strict","isValid","def","pvRadixSplit","bufferTemplate","_buffer","radix","nullable","isComplete","onBeforeMask","initialValue","decimalPart","digitsFactor","pow","substring","alignDigits","$input","UP","unmaskedvalue","DOWN","currency","alias","clearMaskOnLostFocus","decimal","integer","percentage","isObject","leading","trailing","keyFunctions","preFunction","returnedScope","freeGlobal","tearDownSuggestions","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","valueOf","isBinary","trimmedEndIndex","reTrimStart","reWhitespace","baseGetTag","isObjectLike","getRawTag","objectToString","symToStringTag","objectProto","nativeObjectToString","isOwn","setTabNextFocus","focusParams","firstFocusableEl","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","nextToLastElementSelector","linkElements","slick","slickCarousel","initPDPSliders","$mainSliders","initPDPSliderByIndex","isDrive","isVirtualSku","$mainSlider","$thumbSlider","initialSlide","$customizerMain","mobileFirst","slidesToShow","infinite","arrows","focusOnSelect","dots","asNavFor","responsive","_event","_slick","customizerIndex","updateArrows","$clickedSlide","goToSingleSlide","currentSlide","$targetSlide","slideCount","slickInit","processInclude","Slick","instanceUid","dataSettings","defaults","accessibility","adaptiveHeight","appendArrows","appendDots","prevArrow","nextArrow","autoplay","autoplaySpeed","centerMode","centerPadding","cssEase","customPaging","slider","dotsClass","draggable","edgeFriction","fade","focusOnChange","lazyLoad","pauseOnHover","pauseOnFocus","pauseOnDotsHover","respondTo","rows","rtl","slide","slidesPerRow","slidesToScroll","swipe","swipeToSlide","touchMove","touchThreshold","useCSS","useTransform","variableWidth","vertical","verticalSwiping","waitForAnimate","zIndex","initials","animating","dragging","autoPlayTimer","currentDirection","currentLeft","direction","$dots","listWidth","listHeight","loadIndex","$nextArrow","$prevArrow","scrolling","slideWidth","$slideTrack","$slides","sliding","slideOffset","swipeLeft","swiping","$list","touchObject","transformsEnabled","unslicked","activeBreakpoint","animType","animProp","breakpointSettings","cssTransitions","focussed","interrupted","paused","positionProp","rowCount","shouldClick","$slider","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","mozHidden","webkitHidden","autoPlay","autoPlayClear","autoPlayIterator","changeSlide","clickHandler","selectHandler","setPosition","swipeHandler","dragHandler","keyHandler","htmlExpr","registerBreakpoints","activateADA","addSlide","slickAdd","markup","addBefore","unload","reinit","animateHeight","targetHeight","animateSlide","targetLeft","animProps","animStart","applyTransition","disableTransition","getNavTarget","slideHandler","transition","setInterval","clearInterval","slideTo","buildArrows","buildDots","dot","getDotCount","buildOut","setupInfinite","updateDots","setSlideClasses","buildRows","newSlides","numOfSlides","originalSlides","slidesPerSection","row","checkResponsive","forceUpdate","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","unslick","refresh","dontAnimate","indexOffset","$target","checkNavigable","navigables","prevNavigable","getNavigableIndexes","cleanUpEvents","interrupt","cleanUpSlideEvents","orientationChange","resize","cleanUpRows","destroy","fadeSlide","slideIndex","fadeSlideOut","filterSlides","slickFilter","focusHandler","$sf","getCurrent","slickCurrentSlide","breakPoint","counter","pagerQty","getLeft","verticalHeight","targetSlide","coef","verticalOffset","offsetLeft","outerWidth","getOption","slickGetOption","indexes","getSlick","getSlideCount","swipedSlide","centerOffset","abs","goTo","slickGoTo","creation","setProps","startLoad","loadSlider","initializeEvents","initADA","numDotGroups","tabControlIndexes","slideControlIndex","ariaButtonControl","mappedSlideIndex","initArrowEvents","initDotEvents","initSlideEvents","action","initUI","tagName","loadRange","rangeStart","rangeEnd","loadImages","imagesScope","imageSource","imageSrcSet","imageSizes","imageToLoad","prevSlide","nextSlide","progressiveLazyLoad","slickNext","pause","slickPause","play","slickPlay","postSlide","slickPrev","tryCount","$imgsToLoad","initializing","lastVisibleIndex","responsiveSettings","windowDelay","removeSlide","slickRemove","removeBefore","removeAll","setCSS","x","y","positionProps","setDimensions","setFade","setHeight","setOption","slickSetOption","bodyStyle","WebkitTransition","MozTransition","msTransition","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","transform","allSlides","remainder","evenCoef","infiniteCount","targetElement","sync","animSlide","oldSlide","slideLeft","navTarget","swipeDirection","xDist","yDist","swipeAngle","startX","curX","startY","curY","atan2","swipeEnd","swipeLength","edgeHit","minSwipe","fingerCount","swipeStart","swipeMove","positionOffset","verticalSwipeLength","sqrt","unfilterSlides","slickUnfilter","fromBreakpoint","keyboardAccessibility","clearSelection","isDesktop","openMenu","$parent","eventElement","ariaLabelBack","li","link","40","menuItem","39","38","37","27","parentMenu","pdEditorOpen","$popover","9","previousSessionID","localStorage","getItem","currentSessionID","cookieName","cookieArray","decodeURIComponent","cookie","cookieItem","getCookie","setItem","removeItem","focusHelper","showConsentModal","trackingConsentData","urlContent","urlAccept","urlReject","textYes","textNo","textHeader","tokenName","htmlString","spinner","modal","responseJSON","redirectUrl","scrollAnimate","displayMessage","emailField","errorElement","successElement","positionBtnBackToTop","$backToTop","emailId","email","web2leadIFrame","web2leadIFrameContent","contentWindow","sfscVerifyUrl","searchHelpers","$cache","initCache","header","mainContent","headerBanner","navigation","menu","minicart","searchRefinementGridHeader","headerHeight","lastScrollTop","handleHeaderBannerPosition","scrollFromTop","handleHeaderMobilePosition","handleHeaderPosition","gridHeaderCSSTop","updateSearchRefinementStickyGridHeader","cart","saveForLaterList","wishlist","addToList","$actionBtn","pid","recipeId","recipeLocation","listType","optionId","optionVal","removeUrl","uuid","bundleParentName","bundleParentSKU","recipe","stringify","quantityTotal","minicartCountOfItems","title","qty","label","isPaypalEnabled","isGooglePayEnabled","paypalhelper","paypalMini","onGooglePayLoaded","addToWishlist","reload","gtm","getPidValue","$el","getQuantitySelector","quantitySelected","quantitySelectedModal","quantitySelectedPDP","getQuantitySelected","updateAttrs","$productContainer","msgs","forEach","selectedValueHtml","selectedSwatchValue","$variationsToggler","attrValue","$attr","$attrValue","$button","displayValue","swatchable","images","swatch","assistiveSelectedText","isContentAttribute","fabricFamily","showModalURL","orderableSwatchSKU","selectable","processValues","hasTabs","valueCount","selectedValue","pairedValue","getSliderElements","htmlTemplateString","htmlSubString","highResImg","large","srcset","sizes","alt","updateProductImages","preventGalleryRefresh","primaryImageUrls","isDriveCustomizerUpdate","bundleProduct","product","small","products","mainSlliderElements","thumbSlliderElements","sliderIndex","calculateSavings","salesPrice","originalPrice","discount","percentageDiscount","savingsMessage","$priceSelector","$savingsContainer","salesPriceSelector","originalPriceSelector","savingsLabel","displaySavingsMessage","toFixed","updateShippingMessage","$shippingMessage","freeShippingFlag","showShippingMessage","ShippingFlag","allProductsFreeShipping","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","variationAttributes","resources","productType","readyToOrder","price","sales","decimalPrice","pdpTileFormat","promotionsHtml","availabilityValue","availabilityMessages","availability","messages","info_selectforstock","updateAvailability","iconEmpty","iconFilled","isInWhishlist","updateWishlist","attributeGroup","ID","attribute","viewAllLabel","getAttributesHtml","attributeSelect","selectedValueUrl","optionsHtml","updateOptions","quantities","selectedQty","maxQty","quantity","$qtySelector","priceSelector","finalPrice","updateQuantities","updateGTM","parseHtml","$html","footer","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","maxBonusItems","pliUUID","addToCartUrl","pageSize","labels","selectprods","parsedHtml","renderedTemplate","enterDialogMessage","closeButtonText","handlePostCartAdd","messageType","newBonusDiscountLineItem","getChildProducts","childProducts","getOptions","$elOption","urlValue","selectedValueId","miniCartReportingUrl","methods","editBonusProducts","focusChooseBonusProductModal","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","tabAttribute","concatString","selectAttribute","maxValue","withoutQty","addToCart","pidsObj","setPids","gtmAddToCartObj","fbqPixelPID","addToCartObj","content_type","content_ids","pintrestAddToCartObj","form","reportingURL","selectBonusProduct","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","removeBonusProduct","$selected","enableBonusProductSelection","available","showMoreBonusProducts","addBonusProductsToCart","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","productId","errorMessage","msgSuccess","editCartItem","editCartItemURL","handleEditCartItem","appendToUrl","newUrl","validateBasket","valid","errorHtml","emptyCartMsg","urls","continueShopping","continueShoppingLink","numberOfItems","numItems","isMaterialQtyExceeded","updateCartTotals","affirmLimits","affirmPaymentMinTotal","affirmPaymentMaxTotal","isShippingAddress","totals","totalShippingCost","totalTax","estimatedTotal","fullPriceObj","isSales","formatted","adjustedPrice","subTotal","totalSavingsFormatted","totalCalculated","grandTotal","affirm","ui","idmeDiscountObj","orderDiscountWithoutIDME","orderDiscountWithoutIDMEFormatted","orderLevelDiscountTotal","$synchronyCartPrice","shippingLevelDiscountTotal","orderDiscount","orderDiscountFormatted","items","discountsHtml","renderedPromotions","UUID","priceTotal","renderedPrice","$form","$estimatedDeliveryTitle","deliveryData","zipcode","isShipmentZip","estimatedDeliveryTitle","shippingCost","discountedShippingCost","discountedShippingCostVal","deliveryZipCode","updateEstimatedDelivery","createErrorNotification","updateApproachingDiscounts","approachingDiscounts","discountMsg","lineItem","inStockDate","confirmDelete","actionUrl","productID","productName","$deleteConfirmBtn","$productToRemoveSpan","handleRemoveItemsAjax","basket","toBeDeletedUUIDs","hasBonusProduct","removeUnavailableItems","handleStickyCta","$stickyBar","$checkoutBtn","removeSaveForLaterItem","callCartUpdateShippingZip","pidsQty","$wishlistConfirmBtn","urlParams","removeFromCart","removeFromCartUrl","addToWishlistUrl","confirmMoveWishlist","valueMax","preSelectQty","updateQty","change","methodID","$body","$couponField","$errorMessage","$errorMessageApplied","$errorMessageMissing","$couponsPromosContainer","discounts","applied","couponCode","dialog","allAvailable","every","allReady","selectedOptionValueId","updateProductUrl","selectedQuantity","cartModel","updateProductDetails","uuidToBeDeleted","handleFormLabelPosition","$field","size","endpoint","getSuggestionsWrapper","isMobileSearch","clearModals","applyModals","processResponse","$scope","windowHeight","$suggestionsWrapper","suggestionsList","getSuggestions","handleArrow","debounceSuggestions","validateForm","checkValidity","validity","clearForm","invalid","setCustomValidity","validationMessage","patternMismatch","rangeOverflow","rangeUnderflow","tooLong","tooShort","valueMissing","buttonClick","clearErrorState","functions","localeCode","localeCurrencyCode","CurrencyCode","$countryOptions","openTooltip","tooltip","ecommerce","coupons","allCoupons","coupon","reduce","accumulator","getCheckoutCoupons","payment_type","gtmPaymentObject","gtmAddShippingObj","dataLayer","gtmViewItemListArray","from","gtmDataArray","dataset","viewItemList","getFullViewItemList","gtmObjArray","remainingArray","newObject","itemObj","item_list_id","gtmViewItemObj","gtmViewCartObj","gtmCheckoutObj","gtmPurchaseObj","gtmShareObj","gtmSelectItemObj","gtmAddToWishlistObj","gtmRemoveFromCart","g","Function","gtmItem","gtmObj","gtmAddToCart","gtmAddToWishlist","mppToken","clientTransId","formHelpers","syfPosTokenUrl","syfTransactStatusUrl","syfJSON","clearPreviousErrors","syfJson","custAddress1","innerText","custCity","custState","zipCode","custZipCode","phoneNumber","transAmount1","tokenId","syfMPP","calldBuyProcess","errMsg","phoneMask","renderError","searchStore","dropdown","collapse","$zipCodeField","store","clientkey","city","storedisplayname","address1","postalcode","phone","website_url","appt_url","isClosed","openHours","fbq","log","searchObj","search_string","pixelPurchaseObj","pintrk","$pixelAddToCart","pinterestAddToCartData","order_quantity","product_id","pinterestAddToCartObj","pinterestCheckoutObj","pinterestPageViewObj","initModalFromContentAsset","contentAsset","cookieAge","alert","require","NAME","EVENT_KEY","JQUERY_NO_CONFLICT","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_element","$element","alertInstance","close","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","closeEvent","_destroyElement","_handleDismiss","_jQueryInterface","Constructor","DATA_KEY","Default","keyboard","touch","DefaultType","Direction","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","LOAD_DATA_API","Selector","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","ride","cycle","_slide","visibilityState","nextWhenVisible","activeIndex","_getItemIndex","absDeltax","_keydown","_addTouchEventListeners","_handleSwipe","classList","move","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","eventDirectionName","targetIndex","fromIndex","slideEvent","indicators","nextIndicator","directionalClassName","orderClassName","activeElementIndex","nextElement","_getItemByDirection","nextElementIndex","isCycling","_triggerSlideEvent","_setActiveIndicatorElement","slidEvent","nextElementInterval","defaultInterval","_dataApiClickHandler","carousels","$carousel","SHOW","SHOWN","HIDE","HIDDEN","Dimension","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","startEvent","_getDimension","setTransitioning","capitalizedDimension","scrollSize","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","$trigger","REGEXP_KEYDOWN","CLICK","KEYDOWN_DATA_API","KEYUP_DATA_API","AttachmentMap","flip","boundary","reference","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","toggles","_getParentFromElement","clickEvent","dropdownMenu","hideEvent","isActive","_clearMenus","showEvent","Popper","referenceElement","_getPopperConfig","scheduleUpdate","$parentDropdown","placement","offsets","popperConfig","_getPlacement","modifiers","_getOffset","enabled","preventOverflow","boundariesElement","applyStyle","_dataApiKeydownHandler","backdrop","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","htmlElement","Node","ELEMENT_NODE","_enforceFocus","shownEvent","transitionComplete","handleUpdate","_resetAdjustments","_resetScrollbar","backdropTransitionDuration","callbackRemove","_removeBackdrop","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","_getScrollbarWidth","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","marginRight","calculatedMargin","scrollDiv","scrollbarWidth","clientWidth","ACTIVATE","SCROLL","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","innerHeight","maxScroll","_getOffsetHeight","_activate","_clear","queries","$link","scrollSpys","$spy","Tab","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","addSpinner","$veil","removeSpinner","ua","userAgent","ie","mobile","isInputEventSupported","iemobile","iphone","internal","refreshValue","noMasksCache","userOptions","isRTL","resolveAlias","aliasStr","aliasDefinition","aliases","generateMaskSet","nocache","generateMask","metadata","regexMask","repeatStart","masksetDefinition","maskdefKey","masksCache","maskToken","tests","excludes","maskLength","jitOffset","keepStatic","altMask","msk","eventName","evName","isSupported","maskScope","actionObj","undoValue","maxLength","colorMask","originalPlaceholder","skipKeyPressEvent","skipInputEvent","ignorable","mouseEnter","getMaskTemplate","baseOnInput","minimalPos","includeMode","noJit","clearOptionalTail","ndxIntlzr","testPos","maskTemplate","getLastValidPosition","getMaskSet","optionality","generatedInput","determineTestTemplate","getTests","locator","getPlaceholder","getTestTemplate","jit","newBlockMarker","resetMaskSet","soft","closestTo","valids","posNdx","psNdx","getDecisionTaker","tst","decisionTaker","alternation","getLocator","align","mloc","tstLocator","bestMatch","targetLocator","getTest","distance","optionalQuantifier","tstPs","positionCanMatchDefinition","tndx","latestMatch","maskTokens","ndxInitializer","insertStop","cacheDependency","resolveTestFromToken","loopNdx","quantifierRecurse","handleMatch","isFirstMatch","tokenGroup","firstMatch","isQuantifier","resolveNdxInitializer","alternateNdx","targetAlternation","indexPos","lmnt","ndxPos","bestMatchAltIndex","isSubsetOf","setMergeLocators","targetMatch","altMatch","locNdx","cd","isGroup","isOptional","optionalToken","mtch","isAlternator","maltMatches","alternateToken","malternateMatches","currentMatches","loopNdxCnt","altIndex","amndx","currentPos","ndxInitializerClone","altIndexArr","altIndexArrClone","unMatchedAlternation","ndx1","dropMatch","ndx2","altMatch2","qt","qndx","quantifier","previousPos","mergeLocators","mtndx","getBufferTemplate","getBuffer","noCache","valResult","posBefore","SPACE","checkAlternationMatch","altArr1","altArr2","na","naNdx","altArrC","isMatch","naArr","alndx","alternate","fromSetValid","rAltPos","lastAlt","altPos","prevAltPos","validPos","decisionPos","validPsClone","isValidRslt","lAltPos","validInputsClone","staticInputsBeforePos","posOffset","validInputs","targetLvp","fromAlternate","validateOnly","posObj","begin","maskPos","_isValid","validatedPos","revalidateMask","positionsClone","trackbackPositions","currentPosValid","seekNext","isMask","nPos","snPos","postResult","originalPos","newPos","fillOnly","ps","cvpInput","validTest","IsEnclosedStatic","posMatch","prevMatch","nextMatch","lvp","needsValidation","newBlock","seekPrevious","writeBuffer","triggerEvents","renderColorMask","nptVal","_valueGet","returnPL","prevTest","staticAlternations","HandleNativePlaceholder","npt","nptValue","valueBuffer","EventRuler","eventHandler","imOpts","readOnly","tabThrough","TAB","returnVal","evArr","EventHandlers","keydownEvent","k","BACKSPACE","DELETE","BACKSPACE_SAFARI","X","handleRemove","END","PAGE_DOWN","HOME","PAGE_UP","undoOnEscape","ESCAPE","checkVal","INSERT","ignorables","keypressEvent","checkval","writeOut","ENTER","forwardPosition","_radixDance","writeOutBuffer","onKeyValidation","pasteEvent","tempValue","inputValue","valueBeforeCaret","valueAfterCaret","clipboardData","pasteValue","onBeforePaste","inputFallBackEvent","inputChar","iv","ieMobileHandler","radixPointHandler","frontPart","backPart","frontBufferPart","backBufferPart","entries","isEntry","fpl","entry","keypress","keydown","beforeInputEvent","setValueEvent","clearIncomplete","focusEvent","showMaskOnFocus","positionCaretOnTab","mouseleaveEvent","tabbed","selectedCaret","clickPos","vps","vp","doRadixFocus","clickPosition","lvclickPosition","lastPosition","cutEvent","clipData","setData","execCommand","blurEvent","mouseenterEvent","showMaskOnHover","submitEvent","removeMaskOnSubmit","resetEvent","nptvl","initiatingEvent","charCodes","initialNdx","staticInput","isTemplateMatch","umValue","pndx","bufferValue","notranslate","translatePosition","range","selectionStart","selectionEnd","getSelection","getRangeAt","commonAncestorContainer","startOffset","endOffset","createRange","duplicate","moveStart","scrollCalc","currentStyle","fontSize","scrollWidth","textNode","setStart","setEnd","removeAllRanges","addRange","createTextRange","moveEnd","determineLastRequiredPosition","returnDefinition","bl","positions","lvTest","lvTestAlt","template","lrp","aml","fromIsValid","pend","initializeColorMask","computedStyle","textAlign","clientx","textTransform","whiteSpace","itl","inputText","previousWidth","offset1","offset2","findCaretPos","clear","isStatic","setEntry","mtl","positionColorMask","elementType","supportsInputType","isContentEditable","valueGet","valueSet","__valueGet","noValuePatching","getOwnPropertyDescriptor","__proto__","valueProperty","__lookupGetter__","__lookupSetter__","__defineGetter__","__defineSetter__","__valueSet","overruleRTL","inputmaskpatch","valhookGet","valhookSet","$elem","patchValhook","installNativeValueSetFallback","patchValueProperty","isElementTypeSupported","disablePredictiveText","autocorrect","oncomplete","onincomplete","oncleared","inputEventOnly","rl","lmib","maskTarget","mtdt","dataAttribute","escapeChar","pastedValue","staticDefinitionSymbol","importDataAttributes","scopedOpts","dataoptions","optionData","attrOptions","importOption","importAttributeOptions","noremask","getemptymask","hasMaskedValue","getmetadata","openingToken","currentOpeningToken","alternator","lastMatch","regexTokenizer","escaped","currentToken","MaskToken","openenings","openGroup","alternatorGroup","insertTestDefinition","mtoken","maskdef","defaultCase","mndx","groupify","groupToken","mqj","mq","mq0","mq1","tmpMatch","groupQuantifier","subToken","verifyGroupMarker","nextToken","reverseTokens","intMatch","st","extendDefaults","extendDefinitions","definition","unmask","str","LEFT","CONTROL","uriAttrs","DefaultWhitelist","area","br","em","hr","h1","h2","h3","h4","h5","h6","img","ol","pre","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","regExp","attrRegex","allowedAttribute","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","fallbackPlacement","sanitize","AUTO","TOP","BOTTOM","HoverState","INSERTED","FOCUSOUT","Trigger","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","dataKey","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","isWithContent","shadowRoot","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","behavior","arrow","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","_fixTransition","prevHoverState","_cleanTipClass","getTitle","setElementContent","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","popperInstance","instance","popper","initConfigAnimation","displayMessageAndChangeIcon","$productTile","$allCopiesOfTile","isBrowser","timeoutDuration","longerTimeoutBrowsers","Promise","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","getScrollParent","_getStyleComputedProp","getReferenceNode","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","DOCUMENT_POSITION_FOLLOWING","element1root","getScroll","side","upperSide","scrollingElement","includeScroll","modifier","bottom","getBordersSize","axis","sideA","sideB","getSize","getWindowSizes","classCallCheck","createClass","defineProperties","descriptor","protoProps","staticProps","_extends","assign","getClientRect","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderLeftWidth","marginTop","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","isFixed","getFixedPositionOffsetParent","parentElement","getBoundaries","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","refRect","rects","sortedAreas","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","marginBottom","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","ends","findIndex","update","isDestroyed","arrowStyles","flipped","positionFixed","isCreated","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","cancelAnimationFrame","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","toValue","index2","Defaults","shiftvariation","_data$offsets","isVertical","shiftOffsets","transformProp","popperStyles","priority","escapeWithReference","secondary","keepTogether","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","onLoad","modifierOptions","_this","Utils","PopperUtils","loadFormErrors","parentSelector","fieldErrors","eval","toNumber","nativeMax","nativeMin","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","include","freeSelf","A","cssunit","ip","mac","vin","V"],"mappings":"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","file":"default/js/main.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 = 282);\n","/*!\n * jQuery JavaScript Library v3.6.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2022-08-26T17:52Z\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 trac-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\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\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.6.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\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( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\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.6\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: 2021-02-16\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 && elem.namespaceURI,\n\t\tdocElem = elem && ( 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\treturn 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 (trac-9521)\n\t// Strict HTML recognition (trac-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 primary Deferred\n\t\t\tprimary = 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\tprimary.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, primary.done( updateFunc( i ) ).resolve, primary.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 ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.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 ), primary.reject );\n\t\t}\n\n\t\treturn primary.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 trac-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\t\tvalue :\n\t\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 (trac-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 trac-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 (trac-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 (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-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 (trac-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 (trac-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 (trac-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 rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\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\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\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 (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-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 (trac-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\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\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\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && 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 (trac-504, trac-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\twhich: true\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\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\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\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 (trac-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\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\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 rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-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\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\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 (trac-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\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\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;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\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, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\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\t\tisCustomProp = rcustomProp.test( name ),\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, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\t// trim whitespace for custom property (issue gh-4926)\n\t\tif ( isCustomProp ) {\n\n\t\t\t// rtrim treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" );\n\t\t}\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\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 (trac-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 trac-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 (trac-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\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\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) + \"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\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\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 )` (trac-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\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\n\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.\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// Use proper attribute retrieval (trac-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 classNames, cur, curValue, className, i, finalValue;\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\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\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\tthis.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 classNames, cur, curValue, className, i, finalValue;\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\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\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\tthis.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 classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\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\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = 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\t\"\" :\n\t\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\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 (trac-14686, trac-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 (trac-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 (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-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 = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ 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 (trac-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, parserErrorElem;\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\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\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} ).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} ).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// trac-7653, trac-8125, trac-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 (trac-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\noriginAnchor.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 trac-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\tjQuery( callbackContext ) :\n\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 (trac-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 trac-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 (trac-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// trac-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 but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\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 (trac-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// trac-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 trac-8605, trac-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// trac-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\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( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( 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(\n\t( \"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\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\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, \"$1\" );\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// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n 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 return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const 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\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n // TODO: Remove in v5\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value)\n ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n }\n}\n\nsetTransitionEndSupport()\n\nexport default Util\n","const throttle = require(\"lodash/throttle\");\nconst debounce = require(\"lodash/debounce\");\n\nlet $window = $(window);\n\nwindow.breakpointsFeature = window.breakpointsFeature || {\n breakpoints: {},\n sortedBreakpoints: []\n};\n\nfunction cacheWindowSize() {\n let height = $window.height();\n let width = window.innerWidth;\n if (width != window.breakpointsFeature.width) {\n let oldWidth = window.breakpointsFeature.width;\n window.breakpointsFeature.width = width;\n setActiveBreakpoint(width); // eslint-disable-line no-use-before-define\n $window.triggerHandler(\"windowresize:width\", {\n paramName: \"width\",\n newValue: width,\n oldValue: oldWidth\n });\n }\n if (height != window.breakpointsFeature.height) {\n let oldHight = window.breakpointsFeature.height;\n window.breakpointsFeature.height = height;\n $window.triggerHandler(\"windowresize:height\", {\n paramName: \"height\",\n newValue: height,\n oldValue: oldHight\n });\n }\n}\n\nfunction cacheScroll() {\n let scrollTop = $window.scrollTop();\n\n if (scrollTop != window.breakpointsFeature.scrollTop) {\n $window.triggerHandler(\"windowscroll\", {\n paramName: \"scroll\",\n newValue: scrollTop,\n oldValue: window.breakpointsFeature.scrollTop\n });\n window.breakpointsFeature.scrollTop = scrollTop;\n }\n}\n\nfunction mapBreakpoints() {\n let breakpoints = {\n xs: 0,\n sm: 768,\n md: 1024,\n lg: 1280,\n customLG: 1392,\n xl: 1440,\n xxl: 1590\n };\n let breakpointsList = [];\n if (!breakpoints) {\n breakpoints = {};\n }\n\n let breakpointsNames = Object.keys(breakpoints);\n\n // eslint-disable-next-line array-callback-return\n breakpointsNames.map(function (breakpointsName) {\n breakpointsList.push({\n name: breakpointsName,\n min: breakpoints[breakpointsName]\n });\n });\n\n window.breakpointsFeature.sortedBreakpoints = breakpointsList.sort(function (a, b) {\n return a.min - b.min;\n });\n window.breakpointsFeature.sortedBreakpoints = window.breakpointsFeature.sortedBreakpoints.map(function (\n breakpoint,\n i\n ) {\n let nextBreakpointIndex = i + 1;\n breakpoint.smaller = breakpointsNames.slice(0, i); // eslint-disable-line no-param-reassign\n breakpoint.bigger = breakpointsNames.slice(nextBreakpointIndex); // eslint-disable-line no-param-reassign\n if (window.breakpointsFeature.sortedBreakpoints[nextBreakpointIndex]) {\n breakpoint.max = window.breakpointsFeature.sortedBreakpoints[nextBreakpointIndex].min - 0.2; // eslint-disable-line no-param-reassign\n } else {\n breakpoint.max = 99999; // eslint-disable-line no-param-reassign\n }\n window.breakpointsFeature.breakpoints[breakpoint.name] = breakpoint;\n return breakpoint;\n });\n setActiveBreakpoint(); // eslint-disable-line no-use-before-define\n}\n\nfunction setActiveBreakpoint(width) {\n checkBreakpoints(); // eslint-disable-line no-use-before-define\n if (!width) {\n width = window.innerWidth; // eslint-disable-line no-param-reassign\n }\n // eslint-disable-next-line consistent-return\n $.each(window.breakpointsFeature.sortedBreakpoints, function (i, breakpoint) {\n if (breakpoint.min <= width && breakpoint.max >= width) {\n if (breakpoint !== window.breakpointsFeature.currentBreakpoint) {\n if (window.breakpointsFeature.currentBreakpoint) {\n let prevBreakpointName = window.breakpointsFeature.currentBreakpoint.name;\n window.breakpointsFeature.currentBreakpoint = breakpoint;\n $window.triggerHandler(\"breakpoint:change\", {\n previous: prevBreakpointName,\n current: getCurrentBreakpointName(), // eslint-disable-line no-use-before-define\n currentBreakpoint: getCurrentBreakpointObj() // eslint-disable-line no-use-before-define\n });\n } else {\n window.breakpointsFeature.currentBreakpoint = breakpoint;\n $window.triggerHandler(\"breakpoint:set\", {\n current: getCurrentBreakpointName(), // eslint-disable-line no-use-before-define\n currentBreakpoint: getCurrentBreakpointObj() // eslint-disable-line no-use-before-define\n });\n }\n }\n return false;\n }\n });\n if (!window.breakpointsFeature.currentBreakpoint) {\n window.breakpointsFeature.currentBreakpoint = {}; // maybe change\n }\n}\n\nfunction getCurrentBreakpointObj() {\n checkBreakpoints(); // eslint-disable-line no-use-before-define\n return { ...window.breakpointsFeature.currentBreakpoint };\n}\n\nfunction getCurrentBreakpointName() {\n checkBreakpoints(); // eslint-disable-line no-use-before-define\n return window.breakpointsFeature.currentBreakpoint && window.breakpointsFeature.currentBreakpoint.name;\n}\n\nfunction isBreakpoint(breakpointQuery) {\n checkBreakpoints(); // eslint-disable-line no-use-before-define\n let result = false;\n\n if (!breakpointQuery || typeof breakpointQuery !== \"string\") {\n console.warn(\"Wrong breakpoint query - \" + breakpointQuery); // eslint-disable-line no-console\n return result;\n }\n\n let breakpointNameQuery = breakpointQuery.replace(/[<=> ]/g, \"\");\n let targetBrekpoint = window.breakpointsFeature.breakpoints[breakpointNameQuery];\n\n if (!targetBrekpoint) {\n console.warn(\"Wrong breakpoint query - \" + breakpointQuery); // eslint-disable-line no-console\n return result;\n }\n\n let isSmallerQuery = breakpointQuery.indexOf(\"<\") > -1;\n let isBiggerQuery = breakpointQuery.indexOf(\">\") > -1;\n let isEquelQuery = breakpointQuery.indexOf(\"=\") > -1 || !(isSmallerQuery || isBiggerQuery);\n\n let currentBreakpointName = window.breakpointsFeature.currentBreakpoint.name;\n\n if (isEquelQuery && currentBreakpointName == breakpointNameQuery) {\n result = true;\n } else if (\n isSmallerQuery &&\n targetBrekpoint.smaller &&\n targetBrekpoint.smaller.indexOf(currentBreakpointName) > -1\n ) {\n result = true;\n } else if (isBiggerQuery && targetBrekpoint.bigger && targetBrekpoint.bigger.indexOf(currentBreakpointName) > -1) {\n result = true;\n }\n\n return result;\n}\n\nfunction getBreakpointMin(breakpointName) {\n checkBreakpoints(); // eslint-disable-line no-use-before-define\n if (\n !window.breakpointsFeature.breakpoints ||\n typeof window.breakpointsFeature.breakpoints[breakpointName] == \"undefined\"\n ) {\n return null;\n }\n return window.breakpointsFeature.breakpoints[breakpointName].min;\n}\n\nfunction checkBreakpoints() {\n if (window.breakpointsFeature.sortedBreakpoints.length == 0) {\n mapBreakpoints();\n }\n}\n\n/**\n * Checks if element is in viewport\n * @param {jQuery} $this - element to check if it's in viewport or not\n * @param {boolean} withoutHeader - if true than header's height will be taken into account\n */\nfunction isInViewport($this, withoutHeader) {\n let $headerBanner = $(\".header-banner\");\n let $navigation = $(\".header-wrapper\");\n let headerBannerHeight = $headerBanner.length ? $headerBanner.outerHeight() : 0;\n let navigationHeight = $navigation.length ? $navigation.outerHeight() : 0;\n let elementTop = $this.offset().top;\n let headerHeight = withoutHeader ? headerBannerHeight + navigationHeight : 0;\n let elementBottom = elementTop - headerHeight + $this.outerHeight();\n\n let viewportTop = $window.scrollTop();\n let viewportBottom = viewportTop + $window.height();\n\n return elementBottom > viewportTop && elementTop < viewportBottom;\n}\n\nlet commonFeature = {\n init: function () {\n mapBreakpoints();\n },\n initEvents: function () {\n if ($window.data(\"sizeEventInitialized\")) {\n return;\n }\n $window.on(\"windowresize:width windowresize:height\", function (_e, params) {\n $window.triggerHandler(\"windowresize\", params);\n });\n $window.on(\"resize\", debounce(cacheWindowSize, 50));\n cacheWindowSize();\n\n $window.on(\"scroll\", throttle(cacheScroll, 50));\n cacheScroll();\n $window.data(\"sizeEventInitialized\", true);\n },\n checkBreakpoints: checkBreakpoints,\n getBreakpointMin: getBreakpointMin,\n isBreakpoint: isBreakpoint,\n setActiveBreakpoint: setActiveBreakpoint,\n getCurrentBreakpoint: getCurrentBreakpointName,\n isInViewport: isInViewport,\n getCashedValue: function (paramName) {\n return window.breakpointsFeature[paramName];\n }\n};\n\nmodule.exports = commonFeature;\n","/*!\n* dependencyLibs/inputmask.dependencyLib.js\n* https://github.com/RobinHerbots/Inputmask\n* Copyright (c) 2010 - 2019 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 4.0.9\n*/\n\n(function(factory) {\n if (typeof define === \"function\" && define.amd) {\n define([ \"../global/window\" ], factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory(require(\"../global/window\"));\n } else {\n window.dependencyLib = factory(window);\n }\n})(function(window) {\n var document = window.document;\n function indexOf(list, elem) {\n var i = 0, len = list.length;\n for (;i < len; i++) {\n if (list[i] === elem) {\n return i;\n }\n }\n return -1;\n }\n function isWindow(obj) {\n return obj != null && obj === obj.window;\n }\n function isArraylike(obj) {\n var length = \"length\" in obj && obj.length, ltype = typeof obj;\n if (ltype === \"function\" || isWindow(obj)) {\n return false;\n }\n if (obj.nodeType === 1 && length) {\n return true;\n }\n return ltype === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n }\n function isValidElement(elem) {\n return elem instanceof Element;\n }\n function DependencyLib(elem) {\n if (elem instanceof DependencyLib) {\n return elem;\n }\n if (!(this instanceof DependencyLib)) {\n return new DependencyLib(elem);\n }\n if (elem !== undefined && elem !== null && elem !== window) {\n this[0] = elem.nodeName ? elem : elem[0] !== undefined && elem[0].nodeName ? elem[0] : document.querySelector(elem);\n if (this[0] !== undefined && this[0] !== null) {\n this[0].eventRegistry = this[0].eventRegistry || {};\n }\n }\n }\n function getWindow(elem) {\n return isWindow(elem) ? elem : elem.nodeType === 9 ? elem.defaultView || elem.parentWindow : false;\n }\n DependencyLib.prototype = {\n on: function(events, handler) {\n if (isValidElement(this[0])) {\n var eventRegistry = this[0].eventRegistry, elem = this[0];\n var addEvent = function(ev, namespace) {\n if (elem.addEventListener) {\n elem.addEventListener(ev, handler, false);\n } else if (elem.attachEvent) {\n elem.attachEvent(\"on\" + ev, handler);\n }\n eventRegistry[ev] = eventRegistry[ev] || {};\n eventRegistry[ev][namespace] = eventRegistry[ev][namespace] || [];\n eventRegistry[ev][namespace].push(handler);\n };\n var _events = events.split(\" \");\n for (var endx = 0; endx < _events.length; endx++) {\n var nsEvent = _events[endx].split(\".\"), ev = nsEvent[0], namespace = nsEvent[1] || \"global\";\n addEvent(ev, namespace);\n }\n }\n return this;\n },\n off: function(events, handler) {\n if (isValidElement(this[0])) {\n var eventRegistry = this[0].eventRegistry, elem = this[0];\n var removeEvent = function(ev, namespace, handler) {\n if (ev in eventRegistry === true) {\n if (elem.removeEventListener) {\n elem.removeEventListener(ev, handler, false);\n } else if (elem.detachEvent) {\n elem.detachEvent(\"on\" + ev, handler);\n }\n if (namespace === \"global\") {\n for (var nmsp in eventRegistry[ev]) {\n eventRegistry[ev][nmsp].splice(eventRegistry[ev][nmsp].indexOf(handler), 1);\n }\n } else {\n eventRegistry[ev][namespace].splice(eventRegistry[ev][namespace].indexOf(handler), 1);\n }\n }\n };\n var resolveNamespace = function(ev, namespace) {\n var evts = [], hndx, hndL;\n if (ev.length > 0) {\n if (handler === undefined) {\n for (hndx = 0, hndL = eventRegistry[ev][namespace].length; hndx < hndL; hndx++) {\n evts.push({\n ev: ev,\n namespace: namespace && namespace.length > 0 ? namespace : \"global\",\n handler: eventRegistry[ev][namespace][hndx]\n });\n }\n } else {\n evts.push({\n ev: ev,\n namespace: namespace && namespace.length > 0 ? namespace : \"global\",\n handler: handler\n });\n }\n } else if (namespace.length > 0) {\n for (var evNdx in eventRegistry) {\n for (var nmsp in eventRegistry[evNdx]) {\n if (nmsp === namespace) {\n if (handler === undefined) {\n for (hndx = 0, hndL = eventRegistry[evNdx][nmsp].length; hndx < hndL; hndx++) {\n evts.push({\n ev: evNdx,\n namespace: nmsp,\n handler: eventRegistry[evNdx][nmsp][hndx]\n });\n }\n } else {\n evts.push({\n ev: evNdx,\n namespace: nmsp,\n handler: handler\n });\n }\n }\n }\n }\n }\n return evts;\n };\n var _events = events.split(\" \");\n for (var endx = 0; endx < _events.length; endx++) {\n var nsEvent = _events[endx].split(\".\"), offEvents = resolveNamespace(nsEvent[0], nsEvent[1]);\n for (var i = 0, offEventsL = offEvents.length; i < offEventsL; i++) {\n removeEvent(offEvents[i].ev, offEvents[i].namespace, offEvents[i].handler);\n }\n }\n }\n return this;\n },\n trigger: function(events) {\n if (isValidElement(this[0])) {\n var eventRegistry = this[0].eventRegistry, elem = this[0];\n var _events = typeof events === \"string\" ? events.split(\" \") : [ events.type ];\n for (var endx = 0; endx < _events.length; endx++) {\n var nsEvent = _events[endx].split(\".\"), ev = nsEvent[0], namespace = nsEvent[1] || \"global\";\n if (document !== undefined && namespace === \"global\") {\n var evnt, i, params = {\n bubbles: true,\n cancelable: true,\n detail: arguments[1]\n };\n if (document.createEvent) {\n try {\n evnt = new CustomEvent(ev, params);\n } catch (e) {\n evnt = document.createEvent(\"CustomEvent\");\n evnt.initCustomEvent(ev, params.bubbles, params.cancelable, params.detail);\n }\n if (events.type) DependencyLib.extend(evnt, events);\n elem.dispatchEvent(evnt);\n } else {\n evnt = document.createEventObject();\n evnt.eventType = ev;\n evnt.detail = arguments[1];\n if (events.type) DependencyLib.extend(evnt, events);\n elem.fireEvent(\"on\" + evnt.eventType, evnt);\n }\n } else if (eventRegistry[ev] !== undefined) {\n arguments[0] = arguments[0].type ? arguments[0] : DependencyLib.Event(arguments[0]);\n if (namespace === \"global\") {\n for (var nmsp in eventRegistry[ev]) {\n for (i = 0; i < eventRegistry[ev][nmsp].length; i++) {\n eventRegistry[ev][nmsp][i].apply(elem, arguments);\n }\n }\n } else {\n for (i = 0; i < eventRegistry[ev][namespace].length; i++) {\n eventRegistry[ev][namespace][i].apply(elem, arguments);\n }\n }\n }\n }\n }\n return this;\n }\n };\n DependencyLib.isFunction = function(obj) {\n return typeof obj === \"function\";\n };\n DependencyLib.noop = function() {};\n DependencyLib.isArray = Array.isArray;\n DependencyLib.inArray = function(elem, arr, i) {\n return arr == null ? -1 : indexOf(arr, elem, i);\n };\n DependencyLib.valHooks = undefined;\n DependencyLib.isPlainObject = function(obj) {\n if (typeof obj !== \"object\" || obj.nodeType || isWindow(obj)) {\n return false;\n }\n if (obj.constructor && !Object.hasOwnProperty.call(obj.constructor.prototype, \"isPrototypeOf\")) {\n return false;\n }\n return true;\n };\n DependencyLib.extend = function() {\n var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;\n if (typeof target === \"boolean\") {\n deep = target;\n target = arguments[i] || {};\n i++;\n }\n if (typeof target !== \"object\" && !DependencyLib.isFunction(target)) {\n target = {};\n }\n if (i === length) {\n target = this;\n i--;\n }\n for (;i < length; i++) {\n if ((options = arguments[i]) != null) {\n for (name in options) {\n src = target[name];\n copy = options[name];\n if (target === copy) {\n continue;\n }\n if (deep && copy && (DependencyLib.isPlainObject(copy) || (copyIsArray = DependencyLib.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && DependencyLib.isArray(src) ? src : [];\n } else {\n clone = src && DependencyLib.isPlainObject(src) ? src : {};\n }\n target[name] = DependencyLib.extend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n };\n DependencyLib.each = function(obj, callback) {\n var value, i = 0;\n if (isArraylike(obj)) {\n for (var length = obj.length; i < length; i++) {\n value = callback.call(obj[i], i, obj[i]);\n if (value === false) {\n break;\n }\n }\n } else {\n for (i in obj) {\n value = callback.call(obj[i], i, obj[i]);\n if (value === false) {\n break;\n }\n }\n }\n return obj;\n };\n DependencyLib.data = function(owner, key, value) {\n if (value === undefined) {\n return owner.__data ? owner.__data[key] : null;\n } else {\n owner.__data = owner.__data || {};\n owner.__data[key] = value;\n }\n };\n if (typeof window.CustomEvent === \"function\") {\n DependencyLib.Event = window.CustomEvent;\n } else {\n DependencyLib.Event = function(event, params) {\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n var evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n DependencyLib.Event.prototype = window.Event.prototype;\n }\n return DependencyLib;\n});","/*!\n* inputmask.date.extensions.js\n* https://github.com/RobinHerbots/Inputmask\n* Copyright (c) 2010 - 2019 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 4.0.9\n*/\n\n(function(factory) {\n if (typeof define === \"function\" && define.amd) {\n define([ \"./inputmask\" ], factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory(require(\"./inputmask\"));\n } else {\n factory(window.Inputmask);\n }\n})(function(Inputmask) {\n var $ = Inputmask.dependencyLib;\n var formatCode = {\n d: [ \"[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", Date.prototype.getDate ],\n dd: [ \"0[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", function() {\n return pad(Date.prototype.getDate.call(this), 2);\n } ],\n ddd: [ \"\" ],\n dddd: [ \"\" ],\n m: [ \"[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\n return Date.prototype.getMonth.call(this) + 1;\n } ],\n mm: [ \"0[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\n return pad(Date.prototype.getMonth.call(this) + 1, 2);\n } ],\n mmm: [ \"\" ],\n mmmm: [ \"\" ],\n yy: [ \"[0-9]{2}\", Date.prototype.setFullYear, \"year\", function() {\n return pad(Date.prototype.getFullYear.call(this), 2);\n } ],\n yyyy: [ \"[0-9]{4}\", Date.prototype.setFullYear, \"year\", function() {\n return pad(Date.prototype.getFullYear.call(this), 4);\n } ],\n h: [ \"[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n hh: [ \"0[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", function() {\n return pad(Date.prototype.getHours.call(this), 2);\n } ],\n hhh: [ \"[0-9]+\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n H: [ \"1?[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n HH: [ \"0[0-9]|1[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", function() {\n return pad(Date.prototype.getHours.call(this), 2);\n } ],\n HHH: [ \"[0-9]+\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n M: [ \"[1-5]?[0-9]\", Date.prototype.setMinutes, \"minutes\", Date.prototype.getMinutes ],\n MM: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setMinutes, \"minutes\", function() {\n return pad(Date.prototype.getMinutes.call(this), 2);\n } ],\n ss: [ \"[0-5][0-9]\", Date.prototype.setSeconds, \"seconds\", function() {\n return pad(Date.prototype.getSeconds.call(this), 2);\n } ],\n l: [ \"[0-9]{3}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n return pad(Date.prototype.getMilliseconds.call(this), 3);\n } ],\n L: [ \"[0-9]{2}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n return pad(Date.prototype.getMilliseconds.call(this), 2);\n } ],\n t: [ \"[ap]\" ],\n tt: [ \"[ap]m\" ],\n T: [ \"[AP]\" ],\n TT: [ \"[AP]M\" ],\n Z: [ \"\" ],\n o: [ \"\" ],\n S: [ \"\" ]\n }, formatAlias = {\n isoDate: \"yyyy-mm-dd\",\n isoTime: \"HH:MM:ss\",\n isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n };\n function getTokenizer(opts) {\n if (!opts.tokenizer) {\n var tokens = [];\n for (var ndx in formatCode) {\n if (tokens.indexOf(ndx[0]) === -1) tokens.push(ndx[0]);\n }\n opts.tokenizer = \"(\" + tokens.join(\"+|\") + \")+?|.\";\n opts.tokenizer = new RegExp(opts.tokenizer, \"g\");\n }\n return opts.tokenizer;\n }\n function isValidDate(dateParts, currentResult) {\n return !isFinite(dateParts.rawday) || dateParts.day == \"29\" && !isFinite(dateParts.rawyear) || new Date(dateParts.date.getFullYear(), isFinite(dateParts.rawmonth) ? dateParts.month : dateParts.date.getMonth() + 1, 0).getDate() >= dateParts.day ? currentResult : false;\n }\n function isDateInRange(dateParts, opts) {\n var result = true;\n if (opts.min) {\n if (dateParts[\"rawyear\"]) {\n var rawYear = dateParts[\"rawyear\"].replace(/[^0-9]/g, \"\"), minYear = opts.min.year.substr(0, rawYear.length);\n result = minYear <= rawYear;\n }\n if (dateParts[\"year\"] === dateParts[\"rawyear\"]) {\n if (opts.min.date.getTime() === opts.min.date.getTime()) {\n result = opts.min.date.getTime() <= dateParts.date.getTime();\n }\n }\n }\n if (result && opts.max && opts.max.date.getTime() === opts.max.date.getTime()) {\n result = opts.max.date.getTime() >= dateParts.date.getTime();\n }\n return result;\n }\n function parse(format, dateObjValue, opts, raw) {\n var mask = \"\", match;\n while (match = getTokenizer(opts).exec(format)) {\n if (dateObjValue === undefined) {\n if (formatCode[match[0]]) {\n mask += \"(\" + formatCode[match[0]][0] + \")\";\n } else {\n switch (match[0]) {\n case \"[\":\n mask += \"(\";\n break;\n\n case \"]\":\n mask += \")?\";\n break;\n\n default:\n mask += Inputmask.escapeRegex(match[0]);\n }\n }\n } else {\n if (formatCode[match[0]]) {\n if (raw !== true && formatCode[match[0]][3]) {\n var getFn = formatCode[match[0]][3];\n mask += getFn.call(dateObjValue.date);\n } else if (formatCode[match[0]][2]) mask += dateObjValue[\"raw\" + formatCode[match[0]][2]]; else mask += match[0];\n } else mask += match[0];\n }\n }\n return mask;\n }\n function pad(val, len) {\n val = String(val);\n len = len || 2;\n while (val.length < len) val = \"0\" + val;\n return val;\n }\n function analyseMask(maskString, format, opts) {\n var dateObj = {\n date: new Date(1, 0, 1)\n }, targetProp, mask = maskString, match, dateOperation, targetValidator;\n function extendProperty(value) {\n var correctedValue = value.replace(/[^0-9]/g, \"0\");\n if (correctedValue != value) {\n var enteredPart = value.replace(/[^0-9]/g, \"\"), min = (opts.min && opts.min[targetProp] || value).toString(), max = (opts.max && opts.max[targetProp] || value).toString();\n correctedValue = enteredPart + (enteredPart < min.slice(0, enteredPart.length) ? min.slice(enteredPart.length) : enteredPart > max.slice(0, enteredPart.length) ? max.slice(enteredPart.length) : correctedValue.toString().slice(enteredPart.length));\n }\n return correctedValue;\n }\n function setValue(dateObj, value, opts) {\n dateObj[targetProp] = extendProperty(value);\n dateObj[\"raw\" + targetProp] = value;\n if (dateOperation !== undefined) dateOperation.call(dateObj.date, targetProp == \"month\" ? parseInt(dateObj[targetProp]) - 1 : dateObj[targetProp]);\n }\n if (typeof mask === \"string\") {\n while (match = getTokenizer(opts).exec(format)) {\n var value = mask.slice(0, match[0].length);\n if (formatCode.hasOwnProperty(match[0])) {\n targetValidator = formatCode[match[0]][0];\n targetProp = formatCode[match[0]][2];\n dateOperation = formatCode[match[0]][1];\n setValue(dateObj, value, opts);\n }\n mask = mask.slice(value.length);\n }\n return dateObj;\n } else if (mask && typeof mask === \"object\" && mask.hasOwnProperty(\"date\")) {\n return mask;\n }\n return undefined;\n }\n Inputmask.extendAliases({\n datetime: {\n mask: function(opts) {\n formatCode.S = opts.i18n.ordinalSuffix.join(\"|\");\n opts.inputFormat = formatAlias[opts.inputFormat] || opts.inputFormat;\n opts.displayFormat = formatAlias[opts.displayFormat] || opts.displayFormat || opts.inputFormat;\n opts.outputFormat = formatAlias[opts.outputFormat] || opts.outputFormat || opts.inputFormat;\n opts.placeholder = opts.placeholder !== \"\" ? opts.placeholder : opts.inputFormat.replace(/[\\[\\]]/, \"\");\n opts.regex = parse(opts.inputFormat, undefined, opts);\n return null;\n },\n placeholder: \"\",\n inputFormat: \"isoDateTime\",\n displayFormat: undefined,\n outputFormat: undefined,\n min: null,\n max: null,\n i18n: {\n dayNames: [ \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" ],\n monthNames: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n ordinalSuffix: [ \"st\", \"nd\", \"rd\", \"th\" ]\n },\n postValidation: function(buffer, pos, currentResult, opts) {\n opts.min = analyseMask(opts.min, opts.inputFormat, opts);\n opts.max = analyseMask(opts.max, opts.inputFormat, opts);\n var result = currentResult, dateParts = analyseMask(buffer.join(\"\"), opts.inputFormat, opts);\n if (result && dateParts.date.getTime() === dateParts.date.getTime()) {\n result = isValidDate(dateParts, result);\n result = result && isDateInRange(dateParts, opts);\n }\n if (pos && result && currentResult.pos !== pos) {\n return {\n buffer: parse(opts.inputFormat, dateParts, opts),\n refreshFromBuffer: {\n start: pos,\n end: currentResult.pos\n }\n };\n }\n return result;\n },\n onKeyDown: function(e, buffer, caretPos, opts) {\n var input = this;\n if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {\n var today = new Date(), match, date = \"\";\n while (match = getTokenizer(opts).exec(opts.inputFormat)) {\n if (match[0].charAt(0) === \"d\") {\n date += pad(today.getDate(), match[0].length);\n } else if (match[0].charAt(0) === \"m\") {\n date += pad(today.getMonth() + 1, match[0].length);\n } else if (match[0] === \"yyyy\") {\n date += today.getFullYear().toString();\n } else if (match[0].charAt(0) === \"y\") {\n date += pad(today.getYear(), match[0].length);\n }\n }\n input.inputmask._valueSet(date);\n $(input).trigger(\"setvalue\");\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return parse(opts.outputFormat, analyseMask(maskedValue, opts.inputFormat, opts), opts, true);\n },\n casing: function(elem, test, pos, validPositions) {\n if (test.nativeDef.indexOf(\"[ap]\") == 0) return elem.toLowerCase();\n if (test.nativeDef.indexOf(\"[AP]\") == 0) return elem.toUpperCase();\n return elem;\n },\n insertMode: false,\n shiftPositions: false\n }\n });\n return Inputmask;\n});","/*!\n* inputmask.numeric.extensions.js\n* https://github.com/RobinHerbots/Inputmask\n* Copyright (c) 2010 - 2019 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 4.0.9\n*/\n\n(function(factory) {\n if (typeof define === \"function\" && define.amd) {\n define([ \"./inputmask\" ], factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory(require(\"./inputmask\"));\n } else {\n factory(window.Inputmask);\n }\n})(function(Inputmask) {\n var $ = Inputmask.dependencyLib;\n function autoEscape(txt, opts) {\n var escapedTxt = \"\";\n for (var i = 0; i < txt.length; i++) {\n if (Inputmask.prototype.definitions[txt.charAt(i)] || opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i)) {\n escapedTxt += \"\\\\\" + txt.charAt(i);\n } else escapedTxt += txt.charAt(i);\n }\n return escapedTxt;\n }\n function alignDigits(buffer, digits, opts) {\n if (digits > 0) {\n var radixPosition = $.inArray(opts.radixPoint, buffer);\n if (radixPosition === -1) {\n buffer.push(opts.radixPoint);\n radixPosition = buffer.length - 1;\n }\n for (var i = 1; i <= digits; i++) {\n buffer[radixPosition + i] = buffer[radixPosition + i] || \"0\";\n }\n }\n return buffer;\n }\n Inputmask.extendAliases({\n numeric: {\n mask: function(opts) {\n if (opts.repeat !== 0 && isNaN(opts.integerDigits)) {\n opts.integerDigits = opts.repeat;\n }\n opts.repeat = 0;\n if (opts.groupSeparator === opts.radixPoint && opts.digits && opts.digits !== \"0\") {\n if (opts.radixPoint === \".\") {\n opts.groupSeparator = \",\";\n } else if (opts.radixPoint === \",\") {\n opts.groupSeparator = \".\";\n } else opts.groupSeparator = \"\";\n }\n if (opts.groupSeparator === \" \") {\n opts.skipOptionalPartCharacter = undefined;\n }\n opts.autoGroup = opts.autoGroup && opts.groupSeparator !== \"\";\n if (opts.autoGroup) {\n if (typeof opts.groupSize == \"string\" && isFinite(opts.groupSize)) opts.groupSize = parseInt(opts.groupSize);\n if (isFinite(opts.integerDigits)) {\n var seps = Math.floor(opts.integerDigits / opts.groupSize);\n var mod = opts.integerDigits % opts.groupSize;\n opts.integerDigits = parseInt(opts.integerDigits) + (mod === 0 ? seps - 1 : seps);\n if (opts.integerDigits < 1) {\n opts.integerDigits = \"*\";\n }\n }\n }\n if (opts.placeholder.length > 1) {\n opts.placeholder = opts.placeholder.charAt(0);\n }\n if (opts.positionCaretOnClick === \"radixFocus\" && (opts.placeholder === \"\" && opts.integerOptional === false)) {\n opts.positionCaretOnClick = \"lvp\";\n }\n opts.definitions[\";\"] = opts.definitions[\"~\"];\n opts.definitions[\";\"].definitionSymbol = \"~\";\n if (opts.numericInput === true) {\n opts.positionCaretOnClick = opts.positionCaretOnClick === \"radixFocus\" ? \"lvp\" : opts.positionCaretOnClick;\n opts.digitsOptional = false;\n if (isNaN(opts.digits)) opts.digits = 2;\n opts.decimalProtect = false;\n }\n var mask = \"[+]\";\n mask += autoEscape(opts.prefix, opts);\n if (opts.integerOptional === true) {\n mask += \"~{1,\" + opts.integerDigits + \"}\";\n } else mask += \"~{\" + opts.integerDigits + \"}\";\n if (opts.digits !== undefined) {\n var radixDef = opts.decimalProtect ? \":\" : opts.radixPoint;\n var dq = opts.digits.toString().split(\",\");\n if (isFinite(dq[0]) && dq[1] && isFinite(dq[1])) {\n mask += radixDef + \";{\" + opts.digits + \"}\";\n } else if (isNaN(opts.digits) || parseInt(opts.digits) > 0) {\n if (opts.digitsOptional) {\n mask += \"[\" + radixDef + \";{1,\" + opts.digits + \"}]\";\n } else mask += radixDef + \";{\" + opts.digits + \"}\";\n }\n }\n mask += autoEscape(opts.suffix, opts);\n mask += \"[-]\";\n opts.greedy = false;\n return mask;\n },\n placeholder: \"\",\n greedy: false,\n digits: \"*\",\n digitsOptional: true,\n enforceDigitsOnBlur: false,\n radixPoint: \".\",\n positionCaretOnClick: \"radixFocus\",\n groupSize: 3,\n groupSeparator: \"\",\n autoGroup: false,\n allowMinus: true,\n negationSymbol: {\n front: \"-\",\n back: \"\"\n },\n integerDigits: \"+\",\n integerOptional: true,\n prefix: \"\",\n suffix: \"\",\n rightAlign: true,\n decimalProtect: true,\n min: null,\n max: null,\n step: 1,\n insertMode: true,\n autoUnmask: false,\n unmaskAsNumber: false,\n inputType: \"text\",\n inputmode: \"numeric\",\n preValidation: function(buffer, pos, c, isSelection, opts, maskset) {\n if (c === \"-\" || c === opts.negationSymbol.front) {\n if (opts.allowMinus !== true) return false;\n opts.isNegative = opts.isNegative === undefined ? true : !opts.isNegative;\n if (buffer.join(\"\") === \"\") return true;\n return {\n caret: maskset.validPositions[pos] ? pos : undefined,\n dopost: true\n };\n }\n if (isSelection === false && c === opts.radixPoint && (opts.digits !== undefined && (isNaN(opts.digits) || parseInt(opts.digits) > 0))) {\n var radixPos = $.inArray(opts.radixPoint, buffer);\n if (radixPos !== -1 && maskset.validPositions[radixPos] !== undefined) {\n if (opts.numericInput === true) {\n return pos === radixPos;\n }\n return {\n caret: radixPos + 1\n };\n }\n }\n return true;\n },\n postValidation: function(buffer, pos, currentResult, opts) {\n function buildPostMask(buffer, opts) {\n var postMask = \"\";\n postMask += \"(\" + opts.groupSeparator + \"*{\" + opts.groupSize + \"}){*}\";\n if (opts.radixPoint !== \"\") {\n var radixSplit = buffer.join(\"\").split(opts.radixPoint);\n if (radixSplit[1]) {\n postMask += opts.radixPoint + \"*{\" + radixSplit[1].match(/^\\d*\\??\\d*/)[0].length + \"}\";\n }\n }\n return postMask;\n }\n var suffix = opts.suffix.split(\"\"), prefix = opts.prefix.split(\"\");\n if (currentResult.pos === undefined && currentResult.caret !== undefined && currentResult.dopost !== true) return currentResult;\n var caretPos = currentResult.caret !== undefined ? currentResult.caret : currentResult.pos;\n var maskedValue = buffer.slice();\n if (opts.numericInput) {\n caretPos = maskedValue.length - caretPos - 1;\n maskedValue = maskedValue.reverse();\n }\n var charAtPos = maskedValue[caretPos];\n if (charAtPos === opts.groupSeparator) {\n caretPos += 1;\n charAtPos = maskedValue[caretPos];\n }\n if (caretPos === maskedValue.length - opts.suffix.length - 1 && charAtPos === opts.radixPoint) return currentResult;\n if (charAtPos !== undefined) {\n if (charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back) {\n maskedValue[caretPos] = \"?\";\n if (opts.prefix.length > 0 && caretPos >= (opts.isNegative === false ? 1 : 0) && caretPos < opts.prefix.length - 1 + (opts.isNegative === false ? 1 : 0)) {\n prefix[caretPos - (opts.isNegative === false ? 1 : 0)] = \"?\";\n } else if (opts.suffix.length > 0 && caretPos >= maskedValue.length - opts.suffix.length - (opts.isNegative === false ? 1 : 0)) {\n suffix[caretPos - (maskedValue.length - opts.suffix.length - (opts.isNegative === false ? 1 : 0))] = \"?\";\n }\n }\n }\n prefix = prefix.join(\"\");\n suffix = suffix.join(\"\");\n var processValue = maskedValue.join(\"\").replace(prefix, \"\");\n processValue = processValue.replace(suffix, \"\");\n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n processValue = processValue.replace(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"), \"\");\n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\");\n if (isNaN(opts.placeholder)) {\n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), \"g\"), \"\");\n }\n if (processValue.length > 1 && processValue.indexOf(opts.radixPoint) !== 1) {\n if (charAtPos === \"0\") {\n processValue = processValue.replace(/^\\?/g, \"\");\n }\n processValue = processValue.replace(/^0/g, \"\");\n }\n if (processValue.charAt(0) === opts.radixPoint && opts.radixPoint !== \"\" && opts.numericInput !== true) {\n processValue = \"0\" + processValue;\n }\n if (processValue !== \"\") {\n processValue = processValue.split(\"\");\n if ((!opts.digitsOptional || opts.enforceDigitsOnBlur && currentResult.event === \"blur\") && isFinite(opts.digits)) {\n var radixPosition = $.inArray(opts.radixPoint, processValue);\n var rpb = $.inArray(opts.radixPoint, maskedValue);\n if (radixPosition === -1) {\n processValue.push(opts.radixPoint);\n radixPosition = processValue.length - 1;\n }\n for (var i = 1; i <= opts.digits; i++) {\n if ((!opts.digitsOptional || opts.enforceDigitsOnBlur && currentResult.event === \"blur\") && (processValue[radixPosition + i] === undefined || processValue[radixPosition + i] === opts.placeholder.charAt(0))) {\n processValue[radixPosition + i] = currentResult.placeholder || opts.placeholder.charAt(0);\n } else if (rpb !== -1 && maskedValue[rpb + i] !== undefined) {\n processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i];\n }\n }\n }\n if (opts.autoGroup === true && opts.groupSeparator !== \"\" && (charAtPos !== opts.radixPoint || currentResult.pos !== undefined || currentResult.dopost)) {\n var addRadix = processValue[processValue.length - 1] === opts.radixPoint && currentResult.c === opts.radixPoint;\n processValue = Inputmask(buildPostMask(processValue, opts), {\n numericInput: true,\n jitMasking: true,\n definitions: {\n \"*\": {\n validator: \"[0-9?]\",\n cardinality: 1\n }\n }\n }).format(processValue.join(\"\"));\n if (addRadix) processValue += opts.radixPoint;\n if (processValue.charAt(0) === opts.groupSeparator) {\n processValue.substr(1);\n }\n } else processValue = processValue.join(\"\");\n }\n if (opts.isNegative && currentResult.event === \"blur\") {\n opts.isNegative = processValue !== \"0\";\n }\n processValue = prefix + processValue;\n processValue += suffix;\n if (opts.isNegative) {\n processValue = opts.negationSymbol.front + processValue;\n processValue += opts.negationSymbol.back;\n }\n processValue = processValue.split(\"\");\n if (charAtPos !== undefined) {\n if (charAtPos !== opts.radixPoint && charAtPos !== opts.negationSymbol.front && charAtPos !== opts.negationSymbol.back) {\n caretPos = $.inArray(\"?\", processValue);\n if (caretPos > -1) {\n processValue[caretPos] = charAtPos;\n } else caretPos = currentResult.caret || 0;\n } else if (charAtPos === opts.radixPoint || charAtPos === opts.negationSymbol.front || charAtPos === opts.negationSymbol.back) {\n var newCaretPos = $.inArray(charAtPos, processValue);\n if (newCaretPos !== -1) caretPos = newCaretPos;\n }\n }\n if (opts.numericInput) {\n caretPos = processValue.length - caretPos - 1;\n processValue = processValue.reverse();\n }\n var rslt = {\n caret: (charAtPos === undefined || currentResult.pos !== undefined) && caretPos !== undefined ? caretPos + (opts.numericInput ? -1 : 1) : caretPos,\n buffer: processValue,\n refreshFromBuffer: currentResult.dopost || buffer.join(\"\") !== processValue.join(\"\")\n };\n return rslt.refreshFromBuffer ? rslt : currentResult;\n },\n onBeforeWrite: function(e, buffer, caretPos, opts) {\n function parseMinMaxOptions(opts) {\n if (opts.parseMinMaxOptions === undefined) {\n if (opts.min !== null) {\n opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n if (opts.radixPoint === \",\") opts.min = opts.min.replace(opts.radixPoint, \".\");\n opts.min = isFinite(opts.min) ? parseFloat(opts.min) : NaN;\n if (isNaN(opts.min)) opts.min = Number.MIN_VALUE;\n }\n if (opts.max !== null) {\n opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n if (opts.radixPoint === \",\") opts.max = opts.max.replace(opts.radixPoint, \".\");\n opts.max = isFinite(opts.max) ? parseFloat(opts.max) : NaN;\n if (isNaN(opts.max)) opts.max = Number.MAX_VALUE;\n }\n opts.parseMinMaxOptions = \"done\";\n }\n }\n if (e) {\n switch (e.type) {\n case \"keydown\":\n return opts.postValidation(buffer, caretPos, {\n caret: caretPos,\n dopost: true\n }, opts);\n\n case \"blur\":\n case \"checkval\":\n var unmasked;\n parseMinMaxOptions(opts);\n if (opts.min !== null || opts.max !== null) {\n unmasked = opts.onUnMask(buffer.join(\"\"), undefined, $.extend({}, opts, {\n unmaskAsNumber: true\n }));\n if (opts.min !== null && unmasked < opts.min) {\n opts.isNegative = opts.min < 0;\n return opts.postValidation(opts.min.toString().replace(\".\", opts.radixPoint).split(\"\"), caretPos, {\n caret: caretPos,\n dopost: true,\n placeholder: \"0\"\n }, opts);\n } else if (opts.max !== null && unmasked > opts.max) {\n opts.isNegative = opts.max < 0;\n return opts.postValidation(opts.max.toString().replace(\".\", opts.radixPoint).split(\"\"), caretPos, {\n caret: caretPos,\n dopost: true,\n placeholder: \"0\"\n }, opts);\n }\n }\n return opts.postValidation(buffer, caretPos, {\n caret: caretPos,\n placeholder: \"0\",\n event: \"blur\"\n }, opts);\n\n case \"_checkval\":\n return {\n caret: caretPos\n };\n\n default:\n break;\n }\n }\n },\n regex: {\n integerPart: function(opts, emptyCheck) {\n return emptyCheck ? new RegExp(\"[\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"+]?\") : new RegExp(\"[\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"+]?\\\\d+\");\n },\n integerNPart: function(opts) {\n return new RegExp(\"[\\\\d\" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + \"]+\");\n }\n },\n definitions: {\n \"~\": {\n validator: function(chrs, maskset, pos, strict, opts, isSelection) {\n var isValid, l;\n if (chrs === \"k\" || chrs === \"m\") {\n isValid = {\n insert: [],\n c: 0\n };\n for (var i = 0, l = chrs === \"k\" ? 2 : 5; i < l; i++) {\n isValid.insert.push({\n pos: pos + i,\n c: 0\n });\n }\n isValid.pos = pos + l;\n return isValid;\n }\n isValid = strict ? new RegExp(\"[0-9\" + Inputmask.escapeRegex(opts.groupSeparator) + \"]\").test(chrs) : new RegExp(\"[0-9]\").test(chrs);\n if (isValid === true) {\n if (opts.numericInput !== true && maskset.validPositions[pos] !== undefined && maskset.validPositions[pos].match.def === \"~\" && !isSelection) {\n var processValue = maskset.buffer.join(\"\");\n processValue = processValue.replace(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"), \"\");\n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\");\n var pvRadixSplit = processValue.split(opts.radixPoint);\n if (pvRadixSplit.length > 1) {\n pvRadixSplit[1] = pvRadixSplit[1].replace(/0/g, opts.placeholder.charAt(0));\n }\n if (pvRadixSplit[0] === \"0\") {\n pvRadixSplit[0] = pvRadixSplit[0].replace(/0/g, opts.placeholder.charAt(0));\n }\n processValue = pvRadixSplit[0] + opts.radixPoint + pvRadixSplit[1] || \"\";\n var bufferTemplate = maskset._buffer.join(\"\");\n if (processValue === opts.radixPoint) {\n processValue = bufferTemplate;\n }\n while (processValue.match(Inputmask.escapeRegex(bufferTemplate) + \"$\") === null) {\n bufferTemplate = bufferTemplate.slice(1);\n }\n processValue = processValue.replace(bufferTemplate, \"\");\n processValue = processValue.split(\"\");\n if (processValue[pos] === undefined) {\n isValid = {\n pos: pos,\n remove: pos\n };\n } else {\n isValid = {\n pos: pos\n };\n }\n }\n } else if (!strict && chrs === opts.radixPoint && maskset.validPositions[pos - 1] === undefined) {\n isValid = {\n insert: {\n pos: pos,\n c: 0\n },\n pos: pos + 1\n };\n }\n return isValid;\n },\n cardinality: 1\n },\n \"+\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.allowMinus && (chrs === \"-\" || chrs === opts.negationSymbol.front);\n },\n cardinality: 1,\n placeholder: \"\"\n },\n \"-\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.allowMinus && chrs === opts.negationSymbol.back;\n },\n cardinality: 1,\n placeholder: \"\"\n },\n \":\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var radix = \"[\" + Inputmask.escapeRegex(opts.radixPoint) + \"]\";\n var isValid = new RegExp(radix).test(chrs);\n if (isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint) {\n isValid = {\n caret: pos + 1\n };\n }\n return isValid;\n },\n cardinality: 1,\n placeholder: function(opts) {\n return opts.radixPoint;\n }\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n if (unmaskedValue === \"\" && opts.nullable === true) {\n return unmaskedValue;\n }\n var processValue = maskedValue.replace(opts.prefix, \"\");\n processValue = processValue.replace(opts.suffix, \"\");\n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\");\n if (opts.placeholder.charAt(0) !== \"\") {\n processValue = processValue.replace(new RegExp(opts.placeholder.charAt(0), \"g\"), \"0\");\n }\n if (opts.unmaskAsNumber) {\n if (opts.radixPoint !== \"\" && processValue.indexOf(opts.radixPoint) !== -1) processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), \".\");\n processValue = processValue.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"-\");\n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\");\n return Number(processValue);\n }\n return processValue;\n },\n isComplete: function(buffer, opts) {\n var maskedValue = (opts.numericInput ? buffer.slice().reverse() : buffer).join(\"\");\n maskedValue = maskedValue.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"-\");\n maskedValue = maskedValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\");\n maskedValue = maskedValue.replace(opts.prefix, \"\");\n maskedValue = maskedValue.replace(opts.suffix, \"\");\n maskedValue = maskedValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator) + \"([0-9]{3})\", \"g\"), \"$1\");\n if (opts.radixPoint === \",\") maskedValue = maskedValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\");\n return isFinite(maskedValue);\n },\n onBeforeMask: function(initialValue, opts) {\n opts.isNegative = undefined;\n var radixPoint = opts.radixPoint || \",\";\n if ((typeof initialValue == \"number\" || opts.inputType === \"number\") && radixPoint !== \"\") {\n initialValue = initialValue.toString().replace(\".\", radixPoint);\n }\n var valueParts = initialValue.split(radixPoint), integerPart = valueParts[0].replace(/[^\\-0-9]/g, \"\"), decimalPart = valueParts.length > 1 ? valueParts[1].replace(/[^0-9]/g, \"\") : \"\";\n initialValue = integerPart + (decimalPart !== \"\" ? radixPoint + decimalPart : decimalPart);\n var digits = 0;\n if (radixPoint !== \"\") {\n digits = decimalPart.length;\n if (decimalPart !== \"\") {\n var digitsFactor = Math.pow(10, digits || 1);\n if (isFinite(opts.digits)) {\n digits = parseInt(opts.digits);\n digitsFactor = Math.pow(10, digits);\n }\n initialValue = initialValue.replace(Inputmask.escapeRegex(radixPoint), \".\");\n if (isFinite(initialValue)) initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor;\n initialValue = initialValue.toString().replace(\".\", radixPoint);\n }\n }\n if (opts.digits === 0 && initialValue.indexOf(Inputmask.escapeRegex(radixPoint)) !== -1) {\n initialValue = initialValue.substring(0, initialValue.indexOf(Inputmask.escapeRegex(radixPoint)));\n }\n return alignDigits(initialValue.toString().split(\"\"), digits, opts).join(\"\");\n },\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey) {\n switch (e.keyCode) {\n case Inputmask.keyCode.UP:\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step));\n $input.trigger(\"setvalue\");\n break;\n\n case Inputmask.keyCode.DOWN:\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step));\n $input.trigger(\"setvalue\");\n break;\n }\n }\n }\n },\n currency: {\n prefix: \"$ \",\n groupSeparator: \",\",\n alias: \"numeric\",\n placeholder: \"0\",\n autoGroup: true,\n digits: 2,\n digitsOptional: false,\n clearMaskOnLostFocus: false\n },\n decimal: {\n alias: \"numeric\"\n },\n integer: {\n alias: \"numeric\",\n digits: 0,\n radixPoint: \"\"\n },\n percentage: {\n alias: \"numeric\",\n digits: 2,\n digitsOptional: true,\n radixPoint: \".\",\n placeholder: \"0\",\n autoGroup: false,\n min: 0,\n max: 100,\n suffix: \" %\",\n allowMinus: false\n }\n });\n return Inputmask;\n});","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","'use strict';\n\nmodule.exports = function (selector, keyFunctions, preFunction) {\n $(selector).on('keydown', function (e) {\n var key = e.which;\n var supportedKeyCodes = [37, 38, 39, 40, 27];\n if (supportedKeyCodes.indexOf(key) >= 0) {\n e.preventDefault();\n }\n var returnedScope = preFunction.call(this);\n if (keyFunctions[key]) {\n keyFunctions[key].call(this, returnedScope);\n }\n });\n};\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","/**\n * Remove modal classes needed for mobile suggestions\n *\n */\nfunction clearModals() {\n $(\"body\").removeClass(\"modal-open\");\n $(\"header\").siblings().attr(\"aria-hidden\", \"false\");\n $(\".header\").removeClass(\"menu-opened\");\n $(\".modal-background\").removeClass(\"close-search-modal\").hide();\n $(\".search-toggler\").removeClass(\"d-none\");\n $(\".navbar-toggler\").removeClass(\"d-none\");\n $(\".store-locator-button\").removeClass(\"d-none\");\n $(\".close-search-button\").addClass(\"d-none\");\n $(\".site-search\").removeClass(\"in\");\n $(\".site-search\").attr(\"aria-hidden\", \"true\");\n}\n\n/**\n * Tear down Suggestions panel\n */\nfunction tearDownSuggestions() {\n $(\"input.search-field\").val(\"\");\n $(\".site-search .reset-button\").addClass(\"d-none\");\n clearModals();\n $(\".search-mobile .suggestions\").unbind(\"scroll\");\n $(\".suggestions-inner\").empty();\n $(\".site-search\").css(\"height\", \"inherit\");\n $(\".popular-suggestions\").removeClass(\"d-none\");\n}\n\nmodule.exports = {\n tearDownSuggestions: tearDownSuggestions\n};\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","'use strict';\n\nmodule.exports = {\n setTabNextFocus: function (focusParams) {\n var KEYCODE_TAB = 9;\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\n\n if (!isTabPressed) {\n return;\n }\n\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\n\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\n if ($('.product-quickview.product-set').length > 0) {\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\n lastFocusableEl = linkElements[linkElements.length - 1];\n }\n }\n\n if (focusParams.event.shiftKey) /* shift + tab */ {\n if ($(':focus').is(firstFocusableEl)) {\n lastFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n } else /* tab */ {\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\n firstFocusableEl.focus();\n focusParams.event.preventDefault();\n }\n }\n }\n};\n","var commonFeature = require(\"./commonFeature\");\n\nvar $window = $(window);\n\n$(\".nav-link\").on(\"shown.bs.tab\", function (e) {\n const target = $(e.target).attr(\"href\");\n\n $(target).find(\".js-slick\").slick(\"refresh\");\n});\n\nvar slickCarousel = {\n initPDPSliders: function () {\n var $mainSliders = $(\"[id^=pdp-main-slider]\");\n var initPDPSliderByIndex = this.initPDPSliderByIndex;\n $mainSliders.each(function () {\n initPDPSliderByIndex($(this).data(\"sliderIndex\"));\n });\n },\n\n initPDPSliderByIndex: function (index, isDrive, isVirtualSku) {\n if (!index && index !== 0) {\n return;\n }\n var $mainSlider = $(\"#pdp-main-slider-\" + index);\n var $thumbSlider = $(\"#pdp-thumb-slider-\" + index);\n var thumbsToShowDesktop = 5;\n var thumbsToShowMobile = 3.5;\n var initialSlide = 0;\n\n var $customizerMain = $mainSlider.find(\".slide-inside--customizer\");\n if ($customizerMain.length > 0 && $customizerMain.data(\"loaded\") && isDrive && !isVirtualSku) {\n initialSlide = $mainSlider.find(\".slide-inside\").length - 1;\n }\n\n $mainSlider.slick({\n mobileFirst: true,\n slidesToShow: 1,\n infinite: false,\n arrows: false,\n initialSlide: initialSlide\n });\n\n $thumbSlider.slick({\n mobileFirst: true,\n focusOnSelect: true,\n slidesToShow: thumbsToShowMobile,\n infinite: false,\n arrows: true,\n dots: true,\n asNavFor: $mainSlider,\n initialSlide: initialSlide,\n responsive: [{\n breakpoint: commonFeature.getBreakpointMin(\"md\") - 0.2,\n settings: {\n slidesToShow: thumbsToShowDesktop,\n dots: false,\n initialSlide: initialSlide\n }\n }]\n });\n\n function updateArrows() {\n var currentSlide = $thumbSlider.slick(\"slickCurrentSlide\");\n var totalSlides = $thumbSlider.slick(\"getSlick\").slideCount;\n\n if (currentSlide === totalSlides - 1) {\n $(\".slick-next\").hide();\n } else {\n $(\".slick-next\").show();\n }\n\n if (currentSlide === 0) {\n $(\".slick-prev\").hide();\n } else {\n $(\".slick-prev\").show();\n }\n }\n\n $thumbSlider.on(\"init.slick\", function (_event, _slick) {\n $customizerMain = $mainSlider.find(\".slide-inside--customizer\");\n if ($customizerMain.length > 0 && $customizerMain.data(\"loaded\") && isDrive && !isVirtualSku) {\n var $customizerSlide = $customizerMain.closest(\".slick-slide\");\n var customizerIndex = $customizerSlide.attr(\"data-slick-index\");\n\n setTimeout(function () {\n $thumbSlider.slick(\"slickGoTo\", parseInt(customizerIndex, 10), true);\n }, 0);\n }\n if (commonFeature.isBreakpoint(\"<sm\") && $thumbSlider.find(\".slick-slide\").length < Math.ceil(thumbsToShowMobile)) {\n $thumbSlider.addClass(\"small-slider\");\n } else if (!commonFeature.isBreakpoint(\"<sm\") && $thumbSlider.find(\".slick-slide\").length < Math.ceil(thumbsToShowDesktop)) {\n $thumbSlider.addClass(\"small-slider\");\n } else {\n $thumbSlider.removeClass(\"small-slider\");\n }\n\n updateArrows();\n });\n\n $thumbSlider.on(\"click\", \".slick-slide:not(.slick-current)\", function () {\n var $clickedSlide = $(this);\n if ($clickedSlide.hasClass(\"slick-current\")) {\n return;\n }\n var goToSingleSlide = $clickedSlide.attr(\"data-slick-index\");\n $thumbSlider.slick(\"slickGoTo\", parseInt(goToSingleSlide, 10));\n });\n\n $thumbSlider.on(\"afterChange\", function () {\n updateArrows();\n });\n\n $mainSlider.on(\"afterChange\", function (_event, _slick, currentSlide) {\n var $targetSlide = $thumbSlider.find(\".slick-slide[data-slick-index=\\\"\" + currentSlide + \"\\\"]\");\n if ($targetSlide && !$targetSlide.hasClass(\"slick-current\")) {\n $thumbSlider.slick(\"slickGoTo\", currentSlide);\n }\n });\n },\n\n init: function () {\n $window.on(\"windowresize:width\", function () {\n $(\".slick-slider\").each(function () {\n var $this = $(this);\n\n if ($this.hasClass(\"slick-initialized\")) {\n $this.slick(\"refresh\");\n }\n });\n });\n },\n\n slickInit: function () {\n $(\".js-slick\").slick();\n }\n};\n\nmodule.exports = slickCarousel;\n","// eslint-disable-next-line\nwindow.jQuery = window.$ = require(\"jquery\");\nvar processInclude = require(\"base/util\");\nvar commonFeature = require(\"./components/commonFeature\");\nvar { slickInit } = require(\"./components/slickCarousel\");\ncommonFeature.init();\nimport \"slick-carousel\";\n\n$(document).ready(function () {\n processInclude(require(\"./components/menu\"));\n processInclude(require(\"base/components/cookie\"));\n processInclude(require(\"base/components/consentTracking\"));\n processInclude(require(\"./components/footer\"));\n processInclude(require(\"./components/header\"));\n processInclude(require(\"./components/miniCart\"));\n processInclude(require(\"./components/formFields\"));\n processInclude(require(\"./components/collapsibleItem\"));\n processInclude(require(\"./components/search\"));\n processInclude(require(\"./components/clientSideValidation\"));\n processInclude(require(\"base/components/countrySelector\"));\n processInclude(require(\"./components/tooltip\"));\n processInclude(require(\"gtm/main\"));\n processInclude(require(\"synchrony/main\"));\n processInclude(require(\"./components/phoneMask\"));\n processInclude(require(\"./components/soci\"));\n processInclude(require(\"pixel/main\"));\n processInclude(require(\"pinterest/main\"));\n processInclude(require(\"./components/contentAssetModal\"));\n\n commonFeature.initEvents();\n slickInit();\n});\n\nrequire(\"./thirdParty/bootstrap\");\nrequire(\"base/components/spinner\");\n","/*\n _ _ _ _\n ___| (_) ___| | __ (_)___\n/ __| | |/ __| |/ / | / __|\n\\__ \\ | | (__| < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n |__/\n\n Version: 1.8.1\n Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n Docs: http://kenwheeler.github.io/slick\n Repo: http://github.com/kenwheeler/slick\n Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n;(function(factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof exports !== 'undefined') {\n module.exports = factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n\n}(function($) {\n 'use strict';\n var Slick = window.Slick || {};\n\n Slick = (function() {\n\n var instanceUid = 0;\n\n function Slick(element, settings) {\n\n var _ = this, dataSettings;\n\n _.defaults = {\n accessibility: true,\n adaptiveHeight: false,\n appendArrows: $(element),\n appendDots: $(element),\n arrows: true,\n asNavFor: null,\n prevArrow: '<button class=\"slick-prev\" aria-label=\"Previous\" type=\"button\">Previous</button>',\n nextArrow: '<button class=\"slick-next\" aria-label=\"Next\" type=\"button\">Next</button>',\n autoplay: false,\n autoplaySpeed: 3000,\n centerMode: false,\n centerPadding: '50px',\n cssEase: 'ease',\n customPaging: function(slider, i) {\n return $('<button type=\"button\" />').text(i + 1);\n },\n dots: false,\n dotsClass: 'slick-dots',\n draggable: true,\n easing: 'linear',\n edgeFriction: 0.35,\n fade: false,\n focusOnSelect: false,\n focusOnChange: false,\n infinite: true,\n initialSlide: 0,\n lazyLoad: 'ondemand',\n mobileFirst: false,\n pauseOnHover: true,\n pauseOnFocus: true,\n pauseOnDotsHover: false,\n respondTo: 'window',\n responsive: null,\n rows: 1,\n rtl: false,\n slide: '',\n slidesPerRow: 1,\n slidesToShow: 1,\n slidesToScroll: 1,\n speed: 500,\n swipe: true,\n swipeToSlide: false,\n touchMove: true,\n touchThreshold: 5,\n useCSS: true,\n useTransform: true,\n variableWidth: false,\n vertical: false,\n verticalSwiping: false,\n waitForAnimate: true,\n zIndex: 1000\n };\n\n _.initials = {\n animating: false,\n dragging: false,\n autoPlayTimer: null,\n currentDirection: 0,\n currentLeft: null,\n currentSlide: 0,\n direction: 1,\n $dots: null,\n listWidth: null,\n listHeight: null,\n loadIndex: 0,\n $nextArrow: null,\n $prevArrow: null,\n scrolling: false,\n slideCount: null,\n slideWidth: null,\n $slideTrack: null,\n $slides: null,\n sliding: false,\n slideOffset: 0,\n swipeLeft: null,\n swiping: false,\n $list: null,\n touchObject: {},\n transformsEnabled: false,\n unslicked: false\n };\n\n $.extend(_, _.initials);\n\n _.activeBreakpoint = null;\n _.animType = null;\n _.animProp = null;\n _.breakpoints = [];\n _.breakpointSettings = [];\n _.cssTransitions = false;\n _.focussed = false;\n _.interrupted = false;\n _.hidden = 'hidden';\n _.paused = true;\n _.positionProp = null;\n _.respondTo = null;\n _.rowCount = 1;\n _.shouldClick = true;\n _.$slider = $(element);\n _.$slidesCache = null;\n _.transformType = null;\n _.transitionType = null;\n _.visibilityChange = 'visibilitychange';\n _.windowWidth = 0;\n _.windowTimer = null;\n\n dataSettings = $(element).data('slick') || {};\n\n _.options = $.extend({}, _.defaults, settings, dataSettings);\n\n _.currentSlide = _.options.initialSlide;\n\n _.originalSettings = _.options;\n\n if (typeof document.mozHidden !== 'undefined') {\n _.hidden = 'mozHidden';\n _.visibilityChange = 'mozvisibilitychange';\n } else if (typeof document.webkitHidden !== 'undefined') {\n _.hidden = 'webkitHidden';\n _.visibilityChange = 'webkitvisibilitychange';\n }\n\n _.autoPlay = $.proxy(_.autoPlay, _);\n _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n _.changeSlide = $.proxy(_.changeSlide, _);\n _.clickHandler = $.proxy(_.clickHandler, _);\n _.selectHandler = $.proxy(_.selectHandler, _);\n _.setPosition = $.proxy(_.setPosition, _);\n _.swipeHandler = $.proxy(_.swipeHandler, _);\n _.dragHandler = $.proxy(_.dragHandler, _);\n _.keyHandler = $.proxy(_.keyHandler, _);\n\n _.instanceUid = instanceUid++;\n\n // A simple way to check for HTML strings\n // Strict HTML recognition (must start with <)\n // Extracted from jQuery v1.11 source\n _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n _.registerBreakpoints();\n _.init(true);\n\n }\n\n return Slick;\n\n }());\n\n Slick.prototype.activateADA = function() {\n var _ = this;\n\n _.$slideTrack.find('.slick-active').attr({\n 'aria-hidden': 'false'\n }).find('a, input, button, select').attr({\n 'tabindex': '0'\n });\n\n };\n\n Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n var _ = this;\n\n if (typeof(index) === 'boolean') {\n addBefore = index;\n index = null;\n } else if (index < 0 || (index >= _.slideCount)) {\n return false;\n }\n\n _.unload();\n\n if (typeof(index) === 'number') {\n if (index === 0 && _.$slides.length === 0) {\n $(markup).appendTo(_.$slideTrack);\n } else if (addBefore) {\n $(markup).insertBefore(_.$slides.eq(index));\n } else {\n $(markup).insertAfter(_.$slides.eq(index));\n }\n } else {\n if (addBefore === true) {\n $(markup).prependTo(_.$slideTrack);\n } else {\n $(markup).appendTo(_.$slideTrack);\n }\n }\n\n _.$slides = _.$slideTrack.children(this.options.slide);\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slideTrack.append(_.$slides);\n\n _.$slides.each(function(index, element) {\n $(element).attr('data-slick-index', index);\n });\n\n _.$slidesCache = _.$slides;\n\n _.reinit();\n\n };\n\n Slick.prototype.animateHeight = function() {\n var _ = this;\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n _.$list.animate({\n height: targetHeight\n }, _.options.speed);\n }\n };\n\n Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n var animProps = {},\n _ = this;\n\n _.animateHeight();\n\n if (_.options.rtl === true && _.options.vertical === false) {\n targetLeft = -targetLeft;\n }\n if (_.transformsEnabled === false) {\n if (_.options.vertical === false) {\n _.$slideTrack.animate({\n left: targetLeft\n }, _.options.speed, _.options.easing, callback);\n } else {\n _.$slideTrack.animate({\n top: targetLeft\n }, _.options.speed, _.options.easing, callback);\n }\n\n } else {\n\n if (_.cssTransitions === false) {\n if (_.options.rtl === true) {\n _.currentLeft = -(_.currentLeft);\n }\n $({\n animStart: _.currentLeft\n }).animate({\n animStart: targetLeft\n }, {\n duration: _.options.speed,\n easing: _.options.easing,\n step: function(now) {\n now = Math.ceil(now);\n if (_.options.vertical === false) {\n animProps[_.animType] = 'translate(' +\n now + 'px, 0px)';\n _.$slideTrack.css(animProps);\n } else {\n animProps[_.animType] = 'translate(0px,' +\n now + 'px)';\n _.$slideTrack.css(animProps);\n }\n },\n complete: function() {\n if (callback) {\n callback.call();\n }\n }\n });\n\n } else {\n\n _.applyTransition();\n targetLeft = Math.ceil(targetLeft);\n\n if (_.options.vertical === false) {\n animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n } else {\n animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n }\n _.$slideTrack.css(animProps);\n\n if (callback) {\n setTimeout(function() {\n\n _.disableTransition();\n\n callback.call();\n }, _.options.speed);\n }\n\n }\n\n }\n\n };\n\n Slick.prototype.getNavTarget = function() {\n\n var _ = this,\n asNavFor = _.options.asNavFor;\n\n if ( asNavFor && asNavFor !== null ) {\n asNavFor = $(asNavFor).not(_.$slider);\n }\n\n return asNavFor;\n\n };\n\n Slick.prototype.asNavFor = function(index) {\n\n var _ = this,\n asNavFor = _.getNavTarget();\n\n if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n asNavFor.each(function() {\n var target = $(this).slick('getSlick');\n if(!target.unslicked) {\n target.slideHandler(index, true);\n }\n });\n }\n\n };\n\n Slick.prototype.applyTransition = function(slide) {\n\n var _ = this,\n transition = {};\n\n if (_.options.fade === false) {\n transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n } else {\n transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n }\n\n if (_.options.fade === false) {\n _.$slideTrack.css(transition);\n } else {\n _.$slides.eq(slide).css(transition);\n }\n\n };\n\n Slick.prototype.autoPlay = function() {\n\n var _ = this;\n\n _.autoPlayClear();\n\n if ( _.slideCount > _.options.slidesToShow ) {\n _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\n }\n\n };\n\n Slick.prototype.autoPlayClear = function() {\n\n var _ = this;\n\n if (_.autoPlayTimer) {\n clearInterval(_.autoPlayTimer);\n }\n\n };\n\n Slick.prototype.autoPlayIterator = function() {\n\n var _ = this,\n slideTo = _.currentSlide + _.options.slidesToScroll;\n\n if ( !_.paused && !_.interrupted && !_.focussed ) {\n\n if ( _.options.infinite === false ) {\n\n if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\n _.direction = 0;\n }\n\n else if ( _.direction === 0 ) {\n\n slideTo = _.currentSlide - _.options.slidesToScroll;\n\n if ( _.currentSlide - 1 === 0 ) {\n _.direction = 1;\n }\n\n }\n\n }\n\n _.slideHandler( slideTo );\n\n }\n\n };\n\n Slick.prototype.buildArrows = function() {\n\n var _ = this;\n\n if (_.options.arrows === true ) {\n\n _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n if( _.slideCount > _.options.slidesToShow ) {\n\n _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n if (_.htmlExpr.test(_.options.prevArrow)) {\n _.$prevArrow.prependTo(_.options.appendArrows);\n }\n\n if (_.htmlExpr.test(_.options.nextArrow)) {\n _.$nextArrow.appendTo(_.options.appendArrows);\n }\n\n if (_.options.infinite !== true) {\n _.$prevArrow\n .addClass('slick-disabled')\n .attr('aria-disabled', 'true');\n }\n\n } else {\n\n _.$prevArrow.add( _.$nextArrow )\n\n .addClass('slick-hidden')\n .attr({\n 'aria-disabled': 'true',\n 'tabindex': '-1'\n });\n\n }\n\n }\n\n };\n\n Slick.prototype.buildDots = function() {\n\n var _ = this,\n i, dot;\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n _.$slider.addClass('slick-dotted');\n\n dot = $('<ul />').addClass(_.options.dotsClass);\n\n for (i = 0; i <= _.getDotCount(); i += 1) {\n dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n }\n\n _.$dots = dot.appendTo(_.options.appendDots);\n\n _.$dots.find('li').first().addClass('slick-active');\n\n }\n\n };\n\n Slick.prototype.buildOut = function() {\n\n var _ = this;\n\n _.$slides =\n _.$slider\n .children( _.options.slide + ':not(.slick-cloned)')\n .addClass('slick-slide');\n\n _.slideCount = _.$slides.length;\n\n _.$slides.each(function(index, element) {\n $(element)\n .attr('data-slick-index', index)\n .data('originalStyling', $(element).attr('style') || '');\n });\n\n _.$slider.addClass('slick-slider');\n\n _.$slideTrack = (_.slideCount === 0) ?\n $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n _.$list = _.$slideTrack.wrap(\n '<div class=\"slick-list\"/>').parent();\n _.$slideTrack.css('opacity', 0);\n\n if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n _.options.slidesToScroll = 1;\n }\n\n $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n _.setupInfinite();\n\n _.buildArrows();\n\n _.buildDots();\n\n _.updateDots();\n\n\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n if (_.options.draggable === true) {\n _.$list.addClass('draggable');\n }\n\n };\n\n Slick.prototype.buildRows = function() {\n\n var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n newSlides = document.createDocumentFragment();\n originalSlides = _.$slider.children();\n\n if(_.options.rows > 0) {\n\n slidesPerSection = _.options.slidesPerRow * _.options.rows;\n numOfSlides = Math.ceil(\n originalSlides.length / slidesPerSection\n );\n\n for(a = 0; a < numOfSlides; a++){\n var slide = document.createElement('div');\n for(b = 0; b < _.options.rows; b++) {\n var row = document.createElement('div');\n for(c = 0; c < _.options.slidesPerRow; c++) {\n var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n if (originalSlides.get(target)) {\n row.appendChild(originalSlides.get(target));\n }\n }\n slide.appendChild(row);\n }\n newSlides.appendChild(slide);\n }\n\n _.$slider.empty().append(newSlides);\n _.$slider.children().children().children()\n .css({\n 'width':(100 / _.options.slidesPerRow) + '%',\n 'display': 'inline-block'\n });\n\n }\n\n };\n\n Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n var _ = this,\n breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n var sliderWidth = _.$slider.width();\n var windowWidth = window.innerWidth || $(window).width();\n\n if (_.respondTo === 'window') {\n respondToWidth = windowWidth;\n } else if (_.respondTo === 'slider') {\n respondToWidth = sliderWidth;\n } else if (_.respondTo === 'min') {\n respondToWidth = Math.min(windowWidth, sliderWidth);\n }\n\n if ( _.options.responsive &&\n _.options.responsive.length &&\n _.options.responsive !== null) {\n\n targetBreakpoint = null;\n\n for (breakpoint in _.breakpoints) {\n if (_.breakpoints.hasOwnProperty(breakpoint)) {\n if (_.originalSettings.mobileFirst === false) {\n if (respondToWidth < _.breakpoints[breakpoint]) {\n targetBreakpoint = _.breakpoints[breakpoint];\n }\n } else {\n if (respondToWidth > _.breakpoints[breakpoint]) {\n targetBreakpoint = _.breakpoints[breakpoint];\n }\n }\n }\n }\n\n if (targetBreakpoint !== null) {\n if (_.activeBreakpoint !== null) {\n if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n _.activeBreakpoint =\n targetBreakpoint;\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n _.unslick(targetBreakpoint);\n } else {\n _.options = $.extend({}, _.originalSettings,\n _.breakpointSettings[\n targetBreakpoint]);\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n }\n triggerBreakpoint = targetBreakpoint;\n }\n } else {\n _.activeBreakpoint = targetBreakpoint;\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n _.unslick(targetBreakpoint);\n } else {\n _.options = $.extend({}, _.originalSettings,\n _.breakpointSettings[\n targetBreakpoint]);\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n }\n triggerBreakpoint = targetBreakpoint;\n }\n } else {\n if (_.activeBreakpoint !== null) {\n _.activeBreakpoint = null;\n _.options = _.originalSettings;\n if (initial === true) {\n _.currentSlide = _.options.initialSlide;\n }\n _.refresh(initial);\n triggerBreakpoint = targetBreakpoint;\n }\n }\n\n // only trigger breakpoints during an actual break. not on initialize.\n if( !initial && triggerBreakpoint !== false ) {\n _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n }\n }\n\n };\n\n Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n var _ = this,\n $target = $(event.currentTarget),\n indexOffset, slideOffset, unevenOffset;\n\n // If target is a link, prevent default action.\n if($target.is('a')) {\n event.preventDefault();\n }\n\n // If target is not the <li> element (ie: a child), find the <li>.\n if(!$target.is('li')) {\n $target = $target.closest('li');\n }\n\n unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n switch (event.data.message) {\n\n case 'previous':\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n if (_.slideCount > _.options.slidesToShow) {\n _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n }\n break;\n\n case 'next':\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n if (_.slideCount > _.options.slidesToShow) {\n _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n }\n break;\n\n case 'index':\n var index = event.data.index === 0 ? 0 :\n event.data.index || $target.index() * _.options.slidesToScroll;\n\n _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n $target.children().trigger('focus');\n break;\n\n default:\n return;\n }\n\n };\n\n Slick.prototype.checkNavigable = function(index) {\n\n var _ = this,\n navigables, prevNavigable;\n\n navigables = _.getNavigableIndexes();\n prevNavigable = 0;\n if (index > navigables[navigables.length - 1]) {\n index = navigables[navigables.length - 1];\n } else {\n for (var n in navigables) {\n if (index < navigables[n]) {\n index = prevNavigable;\n break;\n }\n prevNavigable = navigables[n];\n }\n }\n\n return index;\n };\n\n Slick.prototype.cleanUpEvents = function() {\n\n var _ = this;\n\n if (_.options.dots && _.$dots !== null) {\n\n $('li', _.$dots)\n .off('click.slick', _.changeSlide)\n .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\n .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n if (_.options.accessibility === true) {\n _.$dots.off('keydown.slick', _.keyHandler);\n }\n }\n\n _.$slider.off('focus.slick blur.slick');\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);\n _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);\n }\n }\n\n _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n _.$list.off('click.slick', _.clickHandler);\n\n $(document).off(_.visibilityChange, _.visibility);\n\n _.cleanUpSlideEvents();\n\n if (_.options.accessibility === true) {\n _.$list.off('keydown.slick', _.keyHandler);\n }\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n }\n\n $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n\n };\n\n Slick.prototype.cleanUpSlideEvents = function() {\n\n var _ = this;\n\n _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n };\n\n Slick.prototype.cleanUpRows = function() {\n\n var _ = this, originalSlides;\n\n if(_.options.rows > 0) {\n originalSlides = _.$slides.children().children();\n originalSlides.removeAttr('style');\n _.$slider.empty().append(originalSlides);\n }\n\n };\n\n Slick.prototype.clickHandler = function(event) {\n\n var _ = this;\n\n if (_.shouldClick === false) {\n event.stopImmediatePropagation();\n event.stopPropagation();\n event.preventDefault();\n }\n\n };\n\n Slick.prototype.destroy = function(refresh) {\n\n var _ = this;\n\n _.autoPlayClear();\n\n _.touchObject = {};\n\n _.cleanUpEvents();\n\n $('.slick-cloned', _.$slider).detach();\n\n if (_.$dots) {\n _.$dots.remove();\n }\n\n if ( _.$prevArrow && _.$prevArrow.length ) {\n\n _.$prevArrow\n .removeClass('slick-disabled slick-arrow slick-hidden')\n .removeAttr('aria-hidden aria-disabled tabindex')\n .css('display','');\n\n if ( _.htmlExpr.test( _.options.prevArrow )) {\n _.$prevArrow.remove();\n }\n }\n\n if ( _.$nextArrow && _.$nextArrow.length ) {\n\n _.$nextArrow\n .removeClass('slick-disabled slick-arrow slick-hidden')\n .removeAttr('aria-hidden aria-disabled tabindex')\n .css('display','');\n\n if ( _.htmlExpr.test( _.options.nextArrow )) {\n _.$nextArrow.remove();\n }\n }\n\n\n if (_.$slides) {\n\n _.$slides\n .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n .removeAttr('aria-hidden')\n .removeAttr('data-slick-index')\n .each(function(){\n $(this).attr('style', $(this).data('originalStyling'));\n });\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slideTrack.detach();\n\n _.$list.detach();\n\n _.$slider.append(_.$slides);\n }\n\n _.cleanUpRows();\n\n _.$slider.removeClass('slick-slider');\n _.$slider.removeClass('slick-initialized');\n _.$slider.removeClass('slick-dotted');\n\n _.unslicked = true;\n\n if(!refresh) {\n _.$slider.trigger('destroy', [_]);\n }\n\n };\n\n Slick.prototype.disableTransition = function(slide) {\n\n var _ = this,\n transition = {};\n\n transition[_.transitionType] = '';\n\n if (_.options.fade === false) {\n _.$slideTrack.css(transition);\n } else {\n _.$slides.eq(slide).css(transition);\n }\n\n };\n\n Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n var _ = this;\n\n if (_.cssTransitions === false) {\n\n _.$slides.eq(slideIndex).css({\n zIndex: _.options.zIndex\n });\n\n _.$slides.eq(slideIndex).animate({\n opacity: 1\n }, _.options.speed, _.options.easing, callback);\n\n } else {\n\n _.applyTransition(slideIndex);\n\n _.$slides.eq(slideIndex).css({\n opacity: 1,\n zIndex: _.options.zIndex\n });\n\n if (callback) {\n setTimeout(function() {\n\n _.disableTransition(slideIndex);\n\n callback.call();\n }, _.options.speed);\n }\n\n }\n\n };\n\n Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n var _ = this;\n\n if (_.cssTransitions === false) {\n\n _.$slides.eq(slideIndex).animate({\n opacity: 0,\n zIndex: _.options.zIndex - 2\n }, _.options.speed, _.options.easing);\n\n } else {\n\n _.applyTransition(slideIndex);\n\n _.$slides.eq(slideIndex).css({\n opacity: 0,\n zIndex: _.options.zIndex - 2\n });\n\n }\n\n };\n\n Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n var _ = this;\n\n if (filter !== null) {\n\n _.$slidesCache = _.$slides;\n\n _.unload();\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.focusHandler = function() {\n\n var _ = this;\n\n _.$slider\n .off('focus.slick blur.slick')\n .on('focus.slick blur.slick', '*', function(event) {\n\n event.stopImmediatePropagation();\n var $sf = $(this);\n\n setTimeout(function() {\n\n if( _.options.pauseOnFocus ) {\n _.focussed = $sf.is(':focus');\n _.autoPlay();\n }\n\n }, 0);\n\n });\n };\n\n Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n var _ = this;\n return _.currentSlide;\n\n };\n\n Slick.prototype.getDotCount = function() {\n\n var _ = this;\n\n var breakPoint = 0;\n var counter = 0;\n var pagerQty = 0;\n\n if (_.options.infinite === true) {\n if (_.slideCount <= _.options.slidesToShow) {\n ++pagerQty;\n } else {\n while (breakPoint < _.slideCount) {\n ++pagerQty;\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n }\n } else if (_.options.centerMode === true) {\n pagerQty = _.slideCount;\n } else if(!_.options.asNavFor) {\n pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n }else {\n while (breakPoint < _.slideCount) {\n ++pagerQty;\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n }\n\n return pagerQty - 1;\n\n };\n\n Slick.prototype.getLeft = function(slideIndex) {\n\n var _ = this,\n targetLeft,\n verticalHeight,\n verticalOffset = 0,\n targetSlide,\n coef;\n\n _.slideOffset = 0;\n verticalHeight = _.$slides.first().outerHeight(true);\n\n if (_.options.infinite === true) {\n if (_.slideCount > _.options.slidesToShow) {\n _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n coef = -1\n\n if (_.options.vertical === true && _.options.centerMode === true) {\n if (_.options.slidesToShow === 2) {\n coef = -1.5;\n } else if (_.options.slidesToShow === 1) {\n coef = -2\n }\n }\n verticalOffset = (verticalHeight * _.options.slidesToShow) * coef;\n }\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n if (slideIndex > _.slideCount) {\n _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n } else {\n _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n }\n }\n }\n } else {\n if (slideIndex + _.options.slidesToShow > _.slideCount) {\n _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n }\n }\n\n if (_.slideCount <= _.options.slidesToShow) {\n _.slideOffset = 0;\n verticalOffset = 0;\n }\n\n if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\n _.slideOffset = ((_.slideWidth * Math.floor(_.options.slidesToShow)) / 2) - ((_.slideWidth * _.slideCount) / 2);\n } else if (_.options.centerMode === true && _.options.infinite === true) {\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n } else if (_.options.centerMode === true) {\n _.slideOffset = 0;\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n }\n\n if (_.options.vertical === false) {\n targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n } else {\n targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n }\n\n if (_.options.variableWidth === true) {\n\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n } else {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n }\n\n if (_.options.rtl === true) {\n if (targetSlide[0]) {\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n } else {\n targetLeft = 0;\n }\n } else {\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n }\n\n if (_.options.centerMode === true) {\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n } else {\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n }\n\n if (_.options.rtl === true) {\n if (targetSlide[0]) {\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n } else {\n targetLeft = 0;\n }\n } else {\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n }\n\n targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n }\n }\n\n return targetLeft;\n\n };\n\n Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n var _ = this;\n\n return _.options[option];\n\n };\n\n Slick.prototype.getNavigableIndexes = function() {\n\n var _ = this,\n breakPoint = 0,\n counter = 0,\n indexes = [],\n max;\n\n if (_.options.infinite === false) {\n max = _.slideCount;\n } else {\n breakPoint = _.options.slidesToScroll * -1;\n counter = _.options.slidesToScroll * -1;\n max = _.slideCount * 2;\n }\n\n while (breakPoint < max) {\n indexes.push(breakPoint);\n breakPoint = counter + _.options.slidesToScroll;\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n }\n\n return indexes;\n\n };\n\n Slick.prototype.getSlick = function() {\n\n return this;\n\n };\n\n Slick.prototype.getSlideCount = function() {\n\n var _ = this,\n slidesTraversed, swipedSlide, centerOffset;\n\n centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n if (_.options.swipeToSlide === true) {\n _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n swipedSlide = slide;\n return false;\n }\n });\n\n slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n return slidesTraversed;\n\n } else {\n return _.options.slidesToScroll;\n }\n\n };\n\n Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'index',\n index: parseInt(slide)\n }\n }, dontAnimate);\n\n };\n\n Slick.prototype.init = function(creation) {\n\n var _ = this;\n\n if (!$(_.$slider).hasClass('slick-initialized')) {\n\n $(_.$slider).addClass('slick-initialized');\n\n _.buildRows();\n _.buildOut();\n _.setProps();\n _.startLoad();\n _.loadSlider();\n _.initializeEvents();\n _.updateArrows();\n _.updateDots();\n _.checkResponsive(true);\n _.focusHandler();\n\n }\n\n if (creation) {\n _.$slider.trigger('init', [_]);\n }\n\n if (_.options.accessibility === true) {\n _.initADA();\n }\n\n if ( _.options.autoplay ) {\n\n _.paused = false;\n _.autoPlay();\n\n }\n\n };\n\n Slick.prototype.initADA = function() {\n var _ = this,\n numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\n tabControlIndexes = _.getNavigableIndexes().filter(function(val) {\n return (val >= 0) && (val < _.slideCount);\n });\n\n _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n 'aria-hidden': 'true',\n 'tabindex': '-1'\n }).find('a, input, button, select').attr({\n 'tabindex': '-1'\n });\n\n if (_.$dots !== null) {\n _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n var slideControlIndex = tabControlIndexes.indexOf(i);\n\n $(this).attr({\n 'role': 'tabpanel',\n 'id': 'slick-slide' + _.instanceUid + i,\n 'tabindex': -1\n });\n\n if (slideControlIndex !== -1) {\n var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex\n if ($('#' + ariaButtonControl).length) {\n $(this).attr({\n 'aria-describedby': ariaButtonControl\n });\n }\n }\n });\n\n _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n var mappedSlideIndex = tabControlIndexes[i];\n\n $(this).attr({\n 'role': 'presentation'\n });\n\n $(this).find('button').first().attr({\n 'role': 'tab',\n 'id': 'slick-slide-control' + _.instanceUid + i,\n 'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\n 'aria-label': (i + 1) + ' of ' + numDotGroups,\n 'aria-selected': null,\n 'tabindex': '-1'\n });\n\n }).eq(_.currentSlide).find('button').attr({\n 'aria-selected': 'true',\n 'tabindex': '0'\n }).end();\n }\n\n for (var i=_.currentSlide, max=i+_.options.slidesToShow; i < max; i++) {\n if (_.options.focusOnChange) {\n _.$slides.eq(i).attr({'tabindex': '0'});\n } else {\n _.$slides.eq(i).removeAttr('tabindex');\n }\n }\n\n _.activateADA();\n\n };\n\n Slick.prototype.initArrowEvents = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n _.$prevArrow\n .off('click.slick')\n .on('click.slick', {\n message: 'previous'\n }, _.changeSlide);\n _.$nextArrow\n .off('click.slick')\n .on('click.slick', {\n message: 'next'\n }, _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$prevArrow.on('keydown.slick', _.keyHandler);\n _.$nextArrow.on('keydown.slick', _.keyHandler);\n }\n }\n\n };\n\n Slick.prototype.initDotEvents = function() {\n\n var _ = this;\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n $('li', _.$dots).on('click.slick', {\n message: 'index'\n }, _.changeSlide);\n\n if (_.options.accessibility === true) {\n _.$dots.on('keydown.slick', _.keyHandler);\n }\n }\n\n if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {\n\n $('li', _.$dots)\n .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\n .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n }\n\n };\n\n Slick.prototype.initSlideEvents = function() {\n\n var _ = this;\n\n if ( _.options.pauseOnHover ) {\n\n _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n }\n\n };\n\n Slick.prototype.initializeEvents = function() {\n\n var _ = this;\n\n _.initArrowEvents();\n\n _.initDotEvents();\n _.initSlideEvents();\n\n _.$list.on('touchstart.slick mousedown.slick', {\n action: 'start'\n }, _.swipeHandler);\n _.$list.on('touchmove.slick mousemove.slick', {\n action: 'move'\n }, _.swipeHandler);\n _.$list.on('touchend.slick mouseup.slick', {\n action: 'end'\n }, _.swipeHandler);\n _.$list.on('touchcancel.slick mouseleave.slick', {\n action: 'end'\n }, _.swipeHandler);\n\n _.$list.on('click.slick', _.clickHandler);\n\n $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n if (_.options.accessibility === true) {\n _.$list.on('keydown.slick', _.keyHandler);\n }\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n }\n\n $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n $(_.setPosition);\n\n };\n\n Slick.prototype.initUI = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n _.$prevArrow.show();\n _.$nextArrow.show();\n\n }\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n _.$dots.show();\n\n }\n\n };\n\n Slick.prototype.keyHandler = function(event) {\n\n var _ = this;\n //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n if (event.keyCode === 37 && _.options.accessibility === true) {\n _.changeSlide({\n data: {\n message: _.options.rtl === true ? 'next' : 'previous'\n }\n });\n } else if (event.keyCode === 39 && _.options.accessibility === true) {\n _.changeSlide({\n data: {\n message: _.options.rtl === true ? 'previous' : 'next'\n }\n });\n }\n }\n\n };\n\n Slick.prototype.lazyLoad = function() {\n\n var _ = this,\n loadRange, cloneRange, rangeStart, rangeEnd;\n\n function loadImages(imagesScope) {\n\n $('img[data-lazy]', imagesScope).each(function() {\n\n var image = $(this),\n imageSource = $(this).attr('data-lazy'),\n imageSrcSet = $(this).attr('data-srcset'),\n imageSizes = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\n imageToLoad = document.createElement('img');\n\n imageToLoad.onload = function() {\n\n image\n .animate({ opacity: 0 }, 100, function() {\n\n if (imageSrcSet) {\n image\n .attr('srcset', imageSrcSet );\n\n if (imageSizes) {\n image\n .attr('sizes', imageSizes );\n }\n }\n\n image\n .attr('src', imageSource)\n .animate({ opacity: 1 }, 200, function() {\n image\n .removeAttr('data-lazy data-srcset data-sizes')\n .removeClass('slick-loading');\n });\n _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n });\n\n };\n\n imageToLoad.onerror = function() {\n\n image\n .removeAttr( 'data-lazy' )\n .removeClass( 'slick-loading' )\n .addClass( 'slick-lazyload-error' );\n\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n };\n\n imageToLoad.src = imageSource;\n\n });\n\n }\n\n if (_.options.centerMode === true) {\n if (_.options.infinite === true) {\n rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n rangeEnd = rangeStart + _.options.slidesToShow + 2;\n } else {\n rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n }\n } else {\n rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n if (_.options.fade === true) {\n if (rangeStart > 0) rangeStart--;\n if (rangeEnd <= _.slideCount) rangeEnd++;\n }\n }\n\n loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n\n if (_.options.lazyLoad === 'anticipated') {\n var prevSlide = rangeStart - 1,\n nextSlide = rangeEnd,\n $slides = _.$slider.find('.slick-slide');\n\n for (var i = 0; i < _.options.slidesToScroll; i++) {\n if (prevSlide < 0) prevSlide = _.slideCount - 1;\n loadRange = loadRange.add($slides.eq(prevSlide));\n loadRange = loadRange.add($slides.eq(nextSlide));\n prevSlide--;\n nextSlide++;\n }\n }\n\n loadImages(loadRange);\n\n if (_.slideCount <= _.options.slidesToShow) {\n cloneRange = _.$slider.find('.slick-slide');\n loadImages(cloneRange);\n } else\n if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n loadImages(cloneRange);\n } else if (_.currentSlide === 0) {\n cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n loadImages(cloneRange);\n }\n\n };\n\n Slick.prototype.loadSlider = function() {\n\n var _ = this;\n\n _.setPosition();\n\n _.$slideTrack.css({\n opacity: 1\n });\n\n _.$slider.removeClass('slick-loading');\n\n _.initUI();\n\n if (_.options.lazyLoad === 'progressive') {\n _.progressiveLazyLoad();\n }\n\n };\n\n Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'next'\n }\n });\n\n };\n\n Slick.prototype.orientationChange = function() {\n\n var _ = this;\n\n _.checkResponsive();\n _.setPosition();\n\n };\n\n Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n var _ = this;\n\n _.autoPlayClear();\n _.paused = true;\n\n };\n\n Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n var _ = this;\n\n _.autoPlay();\n _.options.autoplay = true;\n _.paused = false;\n _.focussed = false;\n _.interrupted = false;\n\n };\n\n Slick.prototype.postSlide = function(index) {\n\n var _ = this;\n\n if( !_.unslicked ) {\n\n _.$slider.trigger('afterChange', [_, index]);\n\n _.animating = false;\n\n if (_.slideCount > _.options.slidesToShow) {\n _.setPosition();\n }\n\n _.swipeLeft = null;\n\n if ( _.options.autoplay ) {\n _.autoPlay();\n }\n\n if (_.options.accessibility === true) {\n _.initADA();\n\n if (_.options.focusOnChange) {\n var $currentSlide = $(_.$slides.get(_.currentSlide));\n $currentSlide.attr('tabindex', 0).focus();\n }\n }\n\n }\n\n };\n\n Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n var _ = this;\n\n _.changeSlide({\n data: {\n message: 'previous'\n }\n });\n\n };\n\n Slick.prototype.preventDefault = function(event) {\n\n event.preventDefault();\n\n };\n\n Slick.prototype.progressiveLazyLoad = function( tryCount ) {\n\n tryCount = tryCount || 1;\n\n var _ = this,\n $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\n image,\n imageSource,\n imageSrcSet,\n imageSizes,\n imageToLoad;\n\n if ( $imgsToLoad.length ) {\n\n image = $imgsToLoad.first();\n imageSource = image.attr('data-lazy');\n imageSrcSet = image.attr('data-srcset');\n imageSizes = image.attr('data-sizes') || _.$slider.attr('data-sizes');\n imageToLoad = document.createElement('img');\n\n imageToLoad.onload = function() {\n\n if (imageSrcSet) {\n image\n .attr('srcset', imageSrcSet );\n\n if (imageSizes) {\n image\n .attr('sizes', imageSizes );\n }\n }\n\n image\n .attr( 'src', imageSource )\n .removeAttr('data-lazy data-srcset data-sizes')\n .removeClass('slick-loading');\n\n if ( _.options.adaptiveHeight === true ) {\n _.setPosition();\n }\n\n _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\n _.progressiveLazyLoad();\n\n };\n\n imageToLoad.onerror = function() {\n\n if ( tryCount < 3 ) {\n\n /**\n * try to load the image 3 times,\n * leave a slight delay so we don't get\n * servers blocking the request.\n */\n setTimeout( function() {\n _.progressiveLazyLoad( tryCount + 1 );\n }, 500 );\n\n } else {\n\n image\n .removeAttr( 'data-lazy' )\n .removeClass( 'slick-loading' )\n .addClass( 'slick-lazyload-error' );\n\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n _.progressiveLazyLoad();\n\n }\n\n };\n\n imageToLoad.src = imageSource;\n\n } else {\n\n _.$slider.trigger('allImagesLoaded', [ _ ]);\n\n }\n\n };\n\n Slick.prototype.refresh = function( initializing ) {\n\n var _ = this, currentSlide, lastVisibleIndex;\n\n lastVisibleIndex = _.slideCount - _.options.slidesToShow;\n\n // in non-infinite sliders, we don't want to go past the\n // last visible index.\n if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\n _.currentSlide = lastVisibleIndex;\n }\n\n // if less slides than to show, go to start.\n if ( _.slideCount <= _.options.slidesToShow ) {\n _.currentSlide = 0;\n\n }\n\n currentSlide = _.currentSlide;\n\n _.destroy(true);\n\n $.extend(_, _.initials, { currentSlide: currentSlide });\n\n _.init();\n\n if( !initializing ) {\n\n _.changeSlide({\n data: {\n message: 'index',\n index: currentSlide\n }\n }, false);\n\n }\n\n };\n\n Slick.prototype.registerBreakpoints = function() {\n\n var _ = this, breakpoint, currentBreakpoint, l,\n responsiveSettings = _.options.responsive || null;\n\n if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\n\n _.respondTo = _.options.respondTo || 'window';\n\n for ( breakpoint in responsiveSettings ) {\n\n l = _.breakpoints.length-1;\n\n if (responsiveSettings.hasOwnProperty(breakpoint)) {\n currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n // loop through the breakpoints and cut out any existing\n // ones with the same breakpoint number, we don't want dupes.\n while( l >= 0 ) {\n if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n _.breakpoints.splice(l,1);\n }\n l--;\n }\n\n _.breakpoints.push(currentBreakpoint);\n _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n }\n\n }\n\n _.breakpoints.sort(function(a, b) {\n return ( _.options.mobileFirst ) ? a-b : b-a;\n });\n\n }\n\n };\n\n Slick.prototype.reinit = function() {\n\n var _ = this;\n\n _.$slides =\n _.$slideTrack\n .children(_.options.slide)\n .addClass('slick-slide');\n\n _.slideCount = _.$slides.length;\n\n if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n }\n\n if (_.slideCount <= _.options.slidesToShow) {\n _.currentSlide = 0;\n }\n\n _.registerBreakpoints();\n\n _.setProps();\n _.setupInfinite();\n _.buildArrows();\n _.updateArrows();\n _.initArrowEvents();\n _.buildDots();\n _.updateDots();\n _.initDotEvents();\n _.cleanUpSlideEvents();\n _.initSlideEvents();\n\n _.checkResponsive(false, true);\n\n if (_.options.focusOnSelect === true) {\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n }\n\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n _.setPosition();\n _.focusHandler();\n\n _.paused = !_.options.autoplay;\n _.autoPlay();\n\n _.$slider.trigger('reInit', [_]);\n\n };\n\n Slick.prototype.resize = function() {\n\n var _ = this;\n\n if ($(window).width() !== _.windowWidth) {\n clearTimeout(_.windowDelay);\n _.windowDelay = window.setTimeout(function() {\n _.windowWidth = $(window).width();\n _.checkResponsive();\n if( !_.unslicked ) { _.setPosition(); }\n }, 50);\n }\n };\n\n Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n var _ = this;\n\n if (typeof(index) === 'boolean') {\n removeBefore = index;\n index = removeBefore === true ? 0 : _.slideCount - 1;\n } else {\n index = removeBefore === true ? --index : index;\n }\n\n if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n return false;\n }\n\n _.unload();\n\n if (removeAll === true) {\n _.$slideTrack.children().remove();\n } else {\n _.$slideTrack.children(this.options.slide).eq(index).remove();\n }\n\n _.$slides = _.$slideTrack.children(this.options.slide);\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slideTrack.append(_.$slides);\n\n _.$slidesCache = _.$slides;\n\n _.reinit();\n\n };\n\n Slick.prototype.setCSS = function(position) {\n\n var _ = this,\n positionProps = {},\n x, y;\n\n if (_.options.rtl === true) {\n position = -position;\n }\n x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n positionProps[_.positionProp] = position;\n\n if (_.transformsEnabled === false) {\n _.$slideTrack.css(positionProps);\n } else {\n positionProps = {};\n if (_.cssTransitions === false) {\n positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n _.$slideTrack.css(positionProps);\n } else {\n positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n _.$slideTrack.css(positionProps);\n }\n }\n\n };\n\n Slick.prototype.setDimensions = function() {\n\n var _ = this;\n\n if (_.options.vertical === false) {\n if (_.options.centerMode === true) {\n _.$list.css({\n padding: ('0px ' + _.options.centerPadding)\n });\n }\n } else {\n _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n if (_.options.centerMode === true) {\n _.$list.css({\n padding: (_.options.centerPadding + ' 0px')\n });\n }\n }\n\n _.listWidth = _.$list.width();\n _.listHeight = _.$list.height();\n\n\n if (_.options.vertical === false && _.options.variableWidth === false) {\n _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n } else if (_.options.variableWidth === true) {\n _.$slideTrack.width(5000 * _.slideCount);\n } else {\n _.slideWidth = Math.ceil(_.listWidth);\n _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n }\n\n var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n };\n\n Slick.prototype.setFade = function() {\n\n var _ = this,\n targetLeft;\n\n _.$slides.each(function(index, element) {\n targetLeft = (_.slideWidth * index) * -1;\n if (_.options.rtl === true) {\n $(element).css({\n position: 'relative',\n right: targetLeft,\n top: 0,\n zIndex: _.options.zIndex - 2,\n opacity: 0\n });\n } else {\n $(element).css({\n position: 'relative',\n left: targetLeft,\n top: 0,\n zIndex: _.options.zIndex - 2,\n opacity: 0\n });\n }\n });\n\n _.$slides.eq(_.currentSlide).css({\n zIndex: _.options.zIndex - 1,\n opacity: 1\n });\n\n };\n\n Slick.prototype.setHeight = function() {\n\n var _ = this;\n\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n _.$list.css('height', targetHeight);\n }\n\n };\n\n Slick.prototype.setOption =\n Slick.prototype.slickSetOption = function() {\n\n /**\n * accepts arguments in format of:\n *\n * - for changing a single option's value:\n * .slick(\"setOption\", option, value, refresh )\n *\n * - for changing a set of responsive options:\n * .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n *\n * - for updating multiple values at once (not responsive)\n * .slick(\"setOption\", { 'option': value, ... }, refresh )\n */\n\n var _ = this, l, item, option, value, refresh = false, type;\n\n if( $.type( arguments[0] ) === 'object' ) {\n\n option = arguments[0];\n refresh = arguments[1];\n type = 'multiple';\n\n } else if ( $.type( arguments[0] ) === 'string' ) {\n\n option = arguments[0];\n value = arguments[1];\n refresh = arguments[2];\n\n if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\n\n type = 'responsive';\n\n } else if ( typeof arguments[1] !== 'undefined' ) {\n\n type = 'single';\n\n }\n\n }\n\n if ( type === 'single' ) {\n\n _.options[option] = value;\n\n\n } else if ( type === 'multiple' ) {\n\n $.each( option , function( opt, val ) {\n\n _.options[opt] = val;\n\n });\n\n\n } else if ( type === 'responsive' ) {\n\n for ( item in value ) {\n\n if( $.type( _.options.responsive ) !== 'array' ) {\n\n _.options.responsive = [ value[item] ];\n\n } else {\n\n l = _.options.responsive.length-1;\n\n // loop through the responsive object and splice out duplicates.\n while( l >= 0 ) {\n\n if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n\n _.options.responsive.splice(l,1);\n\n }\n\n l--;\n\n }\n\n _.options.responsive.push( value[item] );\n\n }\n\n }\n\n }\n\n if ( refresh ) {\n\n _.unload();\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.setPosition = function() {\n\n var _ = this;\n\n _.setDimensions();\n\n _.setHeight();\n\n if (_.options.fade === false) {\n _.setCSS(_.getLeft(_.currentSlide));\n } else {\n _.setFade();\n }\n\n _.$slider.trigger('setPosition', [_]);\n\n };\n\n Slick.prototype.setProps = function() {\n\n var _ = this,\n bodyStyle = document.body.style;\n\n _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n if (_.positionProp === 'top') {\n _.$slider.addClass('slick-vertical');\n } else {\n _.$slider.removeClass('slick-vertical');\n }\n\n if (bodyStyle.WebkitTransition !== undefined ||\n bodyStyle.MozTransition !== undefined ||\n bodyStyle.msTransition !== undefined) {\n if (_.options.useCSS === true) {\n _.cssTransitions = true;\n }\n }\n\n if ( _.options.fade ) {\n if ( typeof _.options.zIndex === 'number' ) {\n if( _.options.zIndex < 3 ) {\n _.options.zIndex = 3;\n }\n } else {\n _.options.zIndex = _.defaults.zIndex;\n }\n }\n\n if (bodyStyle.OTransform !== undefined) {\n _.animType = 'OTransform';\n _.transformType = '-o-transform';\n _.transitionType = 'OTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.MozTransform !== undefined) {\n _.animType = 'MozTransform';\n _.transformType = '-moz-transform';\n _.transitionType = 'MozTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.webkitTransform !== undefined) {\n _.animType = 'webkitTransform';\n _.transformType = '-webkit-transform';\n _.transitionType = 'webkitTransition';\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n }\n if (bodyStyle.msTransform !== undefined) {\n _.animType = 'msTransform';\n _.transformType = '-ms-transform';\n _.transitionType = 'msTransition';\n if (bodyStyle.msTransform === undefined) _.animType = false;\n }\n if (bodyStyle.transform !== undefined && _.animType !== false) {\n _.animType = 'transform';\n _.transformType = 'transform';\n _.transitionType = 'transition';\n }\n _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\n };\n\n\n Slick.prototype.setSlideClasses = function(index) {\n\n var _ = this,\n centerOffset, allSlides, indexOffset, remainder;\n\n allSlides = _.$slider\n .find('.slick-slide')\n .removeClass('slick-active slick-center slick-current')\n .attr('aria-hidden', 'true');\n\n _.$slides\n .eq(index)\n .addClass('slick-current');\n\n if (_.options.centerMode === true) {\n\n var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;\n\n centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n if (_.options.infinite === true) {\n\n if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n _.$slides\n .slice(index - centerOffset + evenCoef, index + centerOffset + 1)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n indexOffset = _.options.slidesToShow + index;\n allSlides\n .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n }\n\n if (index === 0) {\n\n allSlides\n .eq(allSlides.length - 1 - _.options.slidesToShow)\n .addClass('slick-center');\n\n } else if (index === _.slideCount - 1) {\n\n allSlides\n .eq(_.options.slidesToShow)\n .addClass('slick-center');\n\n }\n\n }\n\n _.$slides\n .eq(index)\n .addClass('slick-center');\n\n } else {\n\n if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n _.$slides\n .slice(index, index + _.options.slidesToShow)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else if (allSlides.length <= _.options.slidesToShow) {\n\n allSlides\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n remainder = _.slideCount % _.options.slidesToShow;\n indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n allSlides\n .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n } else {\n\n allSlides\n .slice(indexOffset, indexOffset + _.options.slidesToShow)\n .addClass('slick-active')\n .attr('aria-hidden', 'false');\n\n }\n\n }\n\n }\n\n if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\n _.lazyLoad();\n }\n };\n\n Slick.prototype.setupInfinite = function() {\n\n var _ = this,\n i, slideIndex, infiniteCount;\n\n if (_.options.fade === true) {\n _.options.centerMode = false;\n }\n\n if (_.options.infinite === true && _.options.fade === false) {\n\n slideIndex = null;\n\n if (_.slideCount > _.options.slidesToShow) {\n\n if (_.options.centerMode === true) {\n infiniteCount = _.options.slidesToShow + 1;\n } else {\n infiniteCount = _.options.slidesToShow;\n }\n\n for (i = _.slideCount; i > (_.slideCount -\n infiniteCount); i -= 1) {\n slideIndex = i - 1;\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\n .attr('data-slick-index', slideIndex - _.slideCount)\n .prependTo(_.$slideTrack).addClass('slick-cloned');\n }\n for (i = 0; i < infiniteCount + _.slideCount; i += 1) {\n slideIndex = i;\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\n .attr('data-slick-index', slideIndex + _.slideCount)\n .appendTo(_.$slideTrack).addClass('slick-cloned');\n }\n _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n $(this).attr('id', '');\n });\n\n }\n\n }\n\n };\n\n Slick.prototype.interrupt = function( toggle ) {\n\n var _ = this;\n\n if( !toggle ) {\n _.autoPlay();\n }\n _.interrupted = toggle;\n\n };\n\n Slick.prototype.selectHandler = function(event) {\n\n var _ = this;\n\n var targetElement =\n $(event.target).is('.slick-slide') ?\n $(event.target) :\n $(event.target).parents('.slick-slide');\n\n var index = parseInt(targetElement.attr('data-slick-index'));\n\n if (!index) index = 0;\n\n if (_.slideCount <= _.options.slidesToShow) {\n\n _.slideHandler(index, false, true);\n return;\n\n }\n\n _.slideHandler(index);\n\n };\n\n Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n _ = this, navTarget;\n\n sync = sync || false;\n\n if (_.animating === true && _.options.waitForAnimate === true) {\n return;\n }\n\n if (_.options.fade === true && _.currentSlide === index) {\n return;\n }\n\n if (sync === false) {\n _.asNavFor(index);\n }\n\n targetSlide = index;\n targetLeft = _.getLeft(targetSlide);\n slideLeft = _.getLeft(_.currentSlide);\n\n _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n if (_.options.fade === false) {\n targetSlide = _.currentSlide;\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(slideLeft, function() {\n _.postSlide(targetSlide);\n });\n } else {\n _.postSlide(targetSlide);\n }\n }\n return;\n } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n if (_.options.fade === false) {\n targetSlide = _.currentSlide;\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(slideLeft, function() {\n _.postSlide(targetSlide);\n });\n } else {\n _.postSlide(targetSlide);\n }\n }\n return;\n }\n\n if ( _.options.autoplay ) {\n clearInterval(_.autoPlayTimer);\n }\n\n if (targetSlide < 0) {\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n } else {\n animSlide = _.slideCount + targetSlide;\n }\n } else if (targetSlide >= _.slideCount) {\n if (_.slideCount % _.options.slidesToScroll !== 0) {\n animSlide = 0;\n } else {\n animSlide = targetSlide - _.slideCount;\n }\n } else {\n animSlide = targetSlide;\n }\n\n _.animating = true;\n\n _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n oldSlide = _.currentSlide;\n _.currentSlide = animSlide;\n\n _.setSlideClasses(_.currentSlide);\n\n if ( _.options.asNavFor ) {\n\n navTarget = _.getNavTarget();\n navTarget = navTarget.slick('getSlick');\n\n if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\n navTarget.setSlideClasses(_.currentSlide);\n }\n\n }\n\n _.updateDots();\n _.updateArrows();\n\n if (_.options.fade === true) {\n if (dontAnimate !== true) {\n\n _.fadeSlideOut(oldSlide);\n\n _.fadeSlide(animSlide, function() {\n _.postSlide(animSlide);\n });\n\n } else {\n _.postSlide(animSlide);\n }\n _.animateHeight();\n return;\n }\n\n if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n _.animateSlide(targetLeft, function() {\n _.postSlide(animSlide);\n });\n } else {\n _.postSlide(animSlide);\n }\n\n };\n\n Slick.prototype.startLoad = function() {\n\n var _ = this;\n\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n _.$prevArrow.hide();\n _.$nextArrow.hide();\n\n }\n\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n _.$dots.hide();\n\n }\n\n _.$slider.addClass('slick-loading');\n\n };\n\n Slick.prototype.swipeDirection = function() {\n\n var xDist, yDist, r, swipeAngle, _ = this;\n\n xDist = _.touchObject.startX - _.touchObject.curX;\n yDist = _.touchObject.startY - _.touchObject.curY;\n r = Math.atan2(yDist, xDist);\n\n swipeAngle = Math.round(r * 180 / Math.PI);\n if (swipeAngle < 0) {\n swipeAngle = 360 - Math.abs(swipeAngle);\n }\n\n if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n return (_.options.rtl === false ? 'left' : 'right');\n }\n if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n return (_.options.rtl === false ? 'left' : 'right');\n }\n if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n return (_.options.rtl === false ? 'right' : 'left');\n }\n if (_.options.verticalSwiping === true) {\n if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n return 'down';\n } else {\n return 'up';\n }\n }\n\n return 'vertical';\n\n };\n\n Slick.prototype.swipeEnd = function(event) {\n\n var _ = this,\n slideCount,\n direction;\n\n _.dragging = false;\n _.swiping = false;\n\n if (_.scrolling) {\n _.scrolling = false;\n return false;\n }\n\n _.interrupted = false;\n _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\n\n if ( _.touchObject.curX === undefined ) {\n return false;\n }\n\n if ( _.touchObject.edgeHit === true ) {\n _.$slider.trigger('edge', [_, _.swipeDirection() ]);\n }\n\n if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\n\n direction = _.swipeDirection();\n\n switch ( direction ) {\n\n case 'left':\n case 'down':\n\n slideCount =\n _.options.swipeToSlide ?\n _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\n _.currentSlide + _.getSlideCount();\n\n _.currentDirection = 0;\n\n break;\n\n case 'right':\n case 'up':\n\n slideCount =\n _.options.swipeToSlide ?\n _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\n _.currentSlide - _.getSlideCount();\n\n _.currentDirection = 1;\n\n break;\n\n default:\n\n\n }\n\n if( direction != 'vertical' ) {\n\n _.slideHandler( slideCount );\n _.touchObject = {};\n _.$slider.trigger('swipe', [_, direction ]);\n\n }\n\n } else {\n\n if ( _.touchObject.startX !== _.touchObject.curX ) {\n\n _.slideHandler( _.currentSlide );\n _.touchObject = {};\n\n }\n\n }\n\n };\n\n Slick.prototype.swipeHandler = function(event) {\n\n var _ = this;\n\n if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n return;\n } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n return;\n }\n\n _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n event.originalEvent.touches.length : 1;\n\n _.touchObject.minSwipe = _.listWidth / _.options\n .touchThreshold;\n\n if (_.options.verticalSwiping === true) {\n _.touchObject.minSwipe = _.listHeight / _.options\n .touchThreshold;\n }\n\n switch (event.data.action) {\n\n case 'start':\n _.swipeStart(event);\n break;\n\n case 'move':\n _.swipeMove(event);\n break;\n\n case 'end':\n _.swipeEnd(event);\n break;\n\n }\n\n };\n\n Slick.prototype.swipeMove = function(event) {\n\n var _ = this,\n edgeWasHit = false,\n curLeft, swipeDirection, swipeLength, positionOffset, touches, verticalSwipeLength;\n\n touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\n return false;\n }\n\n curLeft = _.getLeft(_.currentSlide);\n\n _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n _.touchObject.swipeLength = Math.round(Math.sqrt(\n Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n verticalSwipeLength = Math.round(Math.sqrt(\n Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n\n if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\n _.scrolling = true;\n return false;\n }\n\n if (_.options.verticalSwiping === true) {\n _.touchObject.swipeLength = verticalSwipeLength;\n }\n\n swipeDirection = _.swipeDirection();\n\n if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n _.swiping = true;\n event.preventDefault();\n }\n\n positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n if (_.options.verticalSwiping === true) {\n positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n }\n\n\n swipeLength = _.touchObject.swipeLength;\n\n _.touchObject.edgeHit = false;\n\n if (_.options.infinite === false) {\n if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n _.touchObject.edgeHit = true;\n }\n }\n\n if (_.options.vertical === false) {\n _.swipeLeft = curLeft + swipeLength * positionOffset;\n } else {\n _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n }\n if (_.options.verticalSwiping === true) {\n _.swipeLeft = curLeft + swipeLength * positionOffset;\n }\n\n if (_.options.fade === true || _.options.touchMove === false) {\n return false;\n }\n\n if (_.animating === true) {\n _.swipeLeft = null;\n return false;\n }\n\n _.setCSS(_.swipeLeft);\n\n };\n\n Slick.prototype.swipeStart = function(event) {\n\n var _ = this,\n touches;\n\n _.interrupted = true;\n\n if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n _.touchObject = {};\n return false;\n }\n\n if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n touches = event.originalEvent.touches[0];\n }\n\n _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n _.dragging = true;\n\n };\n\n Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n var _ = this;\n\n if (_.$slidesCache !== null) {\n\n _.unload();\n\n _.$slideTrack.children(this.options.slide).detach();\n\n _.$slidesCache.appendTo(_.$slideTrack);\n\n _.reinit();\n\n }\n\n };\n\n Slick.prototype.unload = function() {\n\n var _ = this;\n\n $('.slick-cloned', _.$slider).remove();\n\n if (_.$dots) {\n _.$dots.remove();\n }\n\n if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n _.$prevArrow.remove();\n }\n\n if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n _.$nextArrow.remove();\n }\n\n _.$slides\n .removeClass('slick-slide slick-active slick-visible slick-current')\n .attr('aria-hidden', 'true')\n .css('width', '');\n\n };\n\n Slick.prototype.unslick = function(fromBreakpoint) {\n\n var _ = this;\n _.$slider.trigger('unslick', [_, fromBreakpoint]);\n _.destroy();\n\n };\n\n Slick.prototype.updateArrows = function() {\n\n var _ = this,\n centerOffset;\n\n centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n if ( _.options.arrows === true &&\n _.slideCount > _.options.slidesToShow &&\n !_.options.infinite ) {\n\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n if (_.currentSlide === 0) {\n\n _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n }\n\n }\n\n };\n\n Slick.prototype.updateDots = function() {\n\n var _ = this;\n\n if (_.$dots !== null) {\n\n _.$dots\n .find('li')\n .removeClass('slick-active')\n .end();\n\n _.$dots\n .find('li')\n .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n .addClass('slick-active');\n\n }\n\n };\n\n Slick.prototype.visibility = function() {\n\n var _ = this;\n\n if ( _.options.autoplay ) {\n\n if ( document[_.hidden] ) {\n\n _.interrupted = true;\n\n } else {\n\n _.interrupted = false;\n\n }\n\n }\n\n };\n\n $.fn.slick = function() {\n var _ = this,\n opt = arguments[0],\n args = Array.prototype.slice.call(arguments, 1),\n l = _.length,\n i,\n ret;\n for (i = 0; i < l; i++) {\n if (typeof opt == 'object' || typeof opt == 'undefined')\n _[i].slick = new Slick(_[i], opt);\n else\n ret = _[i].slick[opt].apply(_[i].slick, args);\n if (typeof ret != 'undefined') return ret;\n }\n return _;\n };\n\n}));\n","var keyboardAccessibility = require(\"base/components/keyboardAccessibility\");\n\nvar clearSelection = function (element) {\n $(element).closest(\".custom-dropdown.show\").children(\".nav-link, .custom-dropdown-link\").attr(\"aria-expanded\", \"false\");\n $(element).closest(\".custom-dropdown.show\").children(\".custom-dropdown-menu\").attr(\"aria-hidden\", \"true\");\n $(element).closest(\".custom-dropdown.show\").removeClass(\"show\");\n $(element).removeClass(\"show\");\n $(element).closest(\".custom-dropdown-menu\").removeClass(\"submenu-opened\");\n if ($(element).children(\".nav-link\").length) {\n $(\"div.menu-group > ul.nav.navbar-nav > li.nav-item > a\").attr(\"aria-hidden\", \"false\");\n } else {\n $(\"div.menu-group > ul.nav.navbar-nav > li.nav-item > ul.custom-dropdown-menu > li.custom-dropdown-item > a\").attr(\"aria-hidden\", \"false\");\n }\n $(element).closest(\".custom-dropdown\").children(\".custom-dropdown-menu\").children(\".top-category\")\n .detach();\n};\n\nvar isDesktop = function (element) {\n return $(element).parents(\".menu-toggleable-left\").css(\"position\") !== \"fixed\";\n};\n\nvar openMenu = function (element, e) {\n if ($(\".modal-background\").hasClass(\"close-search-modal\")) {\n $(\".modal-background.close-search-modal\").trigger(\"click\");\n }\n\n var $this = $(element); // a.nav-link\n var $parent = $this.closest(\".custom-dropdown\"); // li.nav-item\n\n if ($parent.hasClass(\"show\")) {\n return;\n }\n\n if (!isDesktop(element)) {\n // copy parent element into current UL\n var ariaLabelBack = $(\".navbar\").data(\"back-label\");\n var li = $(\"<li class='custom-dropdown-item top-category' role='button'></li>\");\n var link = $(element)\n .clone()\n .removeClass(\"custom-dropdown-toggle\")\n .removeAttr(\"data-toggle\")\n .removeAttr(\"aria-expanded\")\n .attr(\"aria-haspopup\", \"false\")\n .attr(\"aria-label\", ariaLabelBack);\n li.append(link);\n $(element).parent().children(\".custom-dropdown-menu\").prepend(li).attr(\"aria-hidden\", \"false\");\n // copy navigation menu into view\n $(element).parent().addClass(\"show\");\n $(element).attr(\"aria-expanded\", \"true\");\n $(link).focus();\n if ($(element).hasClass(\"custom-dropdown-link\")) {\n $(\"div.menu-group > ul.nav.navbar-nav > li.nav-item > ul.custom-dropdown-menu > li.custom-dropdown-item > a\").attr(\"aria-hidden\", \"true\");\n } else {\n $(\"div.menu-group > ul.nav.navbar-nav > li.nav-item > a\").attr(\"aria-hidden\", \"true\");\n }\n e.preventDefault();\n } else {\n e.preventDefault();\n var eventElement = element;\n $(\".navbar-nav > .nav-item-wrapper\").each(function () {\n if (!$.contains(this, eventElement)) {\n $(this)\n .find(\".show\")\n .each(function () {\n clearSelection(this);\n });\n if ($(this).hasClass(\"show\")) {\n $(this).removeClass(\"show\");\n $(this).closest(\".custom-dropdown-menu\").removeClass(\"submenu-opened\");\n $(this).children(\"ul.custom-dropdown-menu\").removeClass(\"show\");\n $(this).children(\"ul.custom-dropdown-menu\").attr(\"aria-hidden\", \"true\");\n $(this).children(\".nav-link\").attr(\"aria-expanded\", \"false\");\n }\n }\n });\n\n // need to close all the custom-dropdowns that are not direct parent of current custom-dropdown\n $(element).parent().addClass(\"show\");\n $(element).closest(\".custom-dropdown-menu\").addClass(\"submenu-opened\");\n $(element).siblings(\".custom-dropdown-menu\").addClass(\"show\");\n $(element).siblings(\".custom-dropdown-menu\").attr(\"aria-hidden\", \"false\");\n $(element).attr(\"aria-expanded\", \"true\");\n $(\".header-wrapper\").addClass(\"menu-opened\");\n $(\"body\").addClass(\"modal-open\");\n $(\".modal-background\").addClass(\"close-menu-modal\").show();\n\n // Add mouseleave functionality to dropdown menu to hide the menu\n $(element).siblings(\".custom-dropdown-menu\").on(\"mouseleave\", function () {\n $(this).removeClass(\"show\").attr(\"aria-hidden\", \"true\");\n $(element).attr(\"aria-expanded\", \"false\");\n $(element).parent().removeClass(\"show\");\n $(\".header-wrapper\").removeClass(\"menu-opened\");\n $(\"body\").removeClass(\"modal-open\");\n $(\".modal-background\").removeClass(\"close-menu-modal\").hide();\n });\n\n // Add mouseleave functionality to li.nav-item to hide the menu\n $parent.on(\"mouseleave\", function () {\n $(this).removeClass(\"show\").attr(\"aria-hidden\", \"true\");\n $(element).attr(\"aria-expanded\", \"false\");\n $(element).parent().removeClass(\"show\");\n\n $(element).closest(\".custom-dropdown-menu\").removeClass(\"submenu-opened\");\n $(element).siblings(\".custom-dropdown-menu\").removeClass(\"show\");\n $(element).siblings(\".custom-dropdown-menu\").attr(\"aria-hidden\", \"true\");\n $(\".header-wrapper\").removeClass(\"menu-opened\");\n $(\"body\").removeClass(\"modal-open\");\n $(\".modal-background\").removeClass(\"close-menu-modal\").hide();\n });\n }\n};\n\nmodule.exports = function () {\n keyboardAccessibility(\n \".main-menu .nav-link, .main-menu .custom-dropdown-link\",\n {\n 40: function (menuItem) {\n if ($(\".modal-background\").hasClass(\"close-search-modal\")) {\n $(\".modal-background.close-search-modal\").trigger(\"click\");\n }\n\n // down\n if (menuItem.hasClass(\"nav-item\")) {\n // top level\n $(\".navbar-nav .show\").removeClass(\"show\").children(\".custom-dropdown-menu\").removeClass(\"show\");\n menuItem.addClass(\"show\").children(\".custom-dropdown-menu\").addClass(\"show\");\n menuItem.find(\"ul > li > a\")\n .first()\n .focus();\n\n if (menuItem.hasClass(\"custom-dropdown\")) {\n menuItem.closest(\".custom-dropdown-menu\").addClass(\"submenu-opened\");\n $(\".header-wrapper\").addClass(\"menu-opened\");\n $(\"body\").addClass(\"modal-open\");\n $(\".modal-background\").addClass(\"close-menu-modal\").show();\n }\n } else {\n menuItem.removeClass(\"show\").children(\".custom-dropdown-menu\").removeClass(\"show\");\n if (!(menuItem.next().length > 0)) {\n // if this is the last menuItem\n menuItem\n .parent()\n .parent()\n .find(\"li > a\") // set focus to the first menuitem\n .first()\n .focus();\n } else {\n menuItem.next().children().first().focus();\n }\n }\n },\n 39: function (menuItem) {\n // right\n if (menuItem.hasClass(\"nav-item\")) {\n // top level\n menuItem.removeClass(\"show\").children(\".custom-dropdown-menu\").removeClass(\"show\");\n $(this).attr(\"aria-expanded\", \"false\");\n menuItem.next().children().first().focus();\n } else if (menuItem.hasClass(\"custom-dropdown\")) {\n menuItem.addClass(\"show\").children(\".custom-dropdown-menu\").addClass(\"show\");\n $(this).attr(\"aria-expanded\", \"true\");\n menuItem.find(\"ul > li > a\").first().focus();\n }\n },\n 38: function (menuItem) {\n // up\n if (menuItem.hasClass(\"nav-item\")) {\n // top level\n menuItem.removeClass(\"show\").children(\".custom-dropdown-menu\").removeClass(\"show\");\n if (menuItem.hasClass(\"custom-dropdown\")) {\n menuItem.closest(\".custom-dropdown-menu\").removeClass(\"submenu-opened\");\n $(\".header-wrapper\").removeClass(\"menu-opened\");\n $(\"body\").removeClass(\"modal-open\");\n $(\".modal-background\").removeClass(\"close-menu-modal\").hide();\n }\n } else if (menuItem.prev().length === 0) { // first menuItem\n menuItem.parent().parent().removeClass(\"show\")\n .children(\".nav-link\")\n .attr(\"aria-expanded\", \"false\");\n menuItem.parent().children().last().children() // set the focus to the last menuItem\n .first()\n .focus();\n } else {\n menuItem.prev().children().first().focus();\n }\n },\n 37: function (menuItem) {\n // left\n if (menuItem.hasClass(\"nav-item\")) {\n // top level\n menuItem.removeClass(\"show\").children(\".custom-dropdown-menu\").removeClass(\"show\");\n $(this).attr(\"aria-expanded\", \"false\");\n menuItem.prev().children().first().focus();\n if (menuItem.hasClass(\"custom-dropdown\")) {\n menuItem.closest(\".custom-dropdown-menu\").removeClass(\"submenu-opened\");\n $(\".header-wrapper\").removeClass(\"menu-opened\");\n $(\"body\").removeClass(\"modal-open\");\n $(\".modal-background\").removeClass(\"close-menu-modal\").hide();\n }\n } else {\n menuItem\n .closest(\".show\")\n .removeClass(\"show\")\n .closest(\"li.show\")\n .removeClass(\"show\")\n .children()\n .first()\n .focus()\n .attr(\"aria-expanded\", \"false\");\n }\n },\n 27: function (menuItem) {\n // escape\n var parentMenu = menuItem.hasClass(\"show\") ? menuItem : menuItem.closest(\"li.show\");\n parentMenu.children(\".show\").removeClass(\"show\");\n parentMenu.removeClass(\"show\").children(\".nav-link\").attr(\"aria-expanded\", \"false\");\n parentMenu.children().first().focus();\n if (menuItem.hasClass(\"nav-item custom-dropdown\")) {\n menuItem.closest(\".custom-dropdown-menu\").removeClass(\"submenu-opened\");\n $(\".header-wrapper\").removeClass(\"menu-opened\");\n $(\"body\").removeClass(\"modal-open\");\n $(\".modal-background\").removeClass(\"close-menu-modal\").hide();\n }\n }\n },\n function () {\n return $(this).parent();\n }\n );\n\n $(\".global-desktop-utility-links .dropdown:not(.disabled) [data-toggle='dropdown']\")\n .on(\"mouseenter\", function () {\n if (isDesktop(this) && !window.pdEditorOpen) {\n $(this).parent().addClass(\"show\");\n $(this).siblings(\".dropdown-menu\").addClass(\"show\").attr(\"aria-hidden\", \"false\");\n $(this).attr(\"aria-expanded\", \"true\");\n }\n })\n .parent()\n .on(\"mouseleave\", function () {\n if (isDesktop(this) && !window.pdEditorOpen) {\n $(this).removeClass(\"show\");\n $(this).children(\".dropdown-menu\").removeClass(\"show\").attr(\"aria-hidden\", \"true\");\n $(this).children(\".dropdown-toggle\").attr(\"aria-expanded\", \"false\");\n }\n });\n\n $(\".main-menu .custom-dropdown:not(.disabled) [data-toggle='custom-dropdown'].nav-link\")\n .on(\"mouseover\", function (e) {\n if (isDesktop(this) && !window.pdEditorOpen) {\n openMenu(this, e);\n }\n });\n \n $(\".main-menu .custom-dropdown:not(.disabled) [data-toggle='custom-dropdown']\")\n .on(\"click\", function (e) {\n if ((isDesktop(this) && !$(this).hasClass(\"nav-link\")) || (!isDesktop(this))) {\n openMenu(this, e);\n }\n });\n\n $(document).on(\"click\", \".modal-background.close-menu-modal\", function (e) {\n e.preventDefault();\n\n $(\".navbar-nav > li\").each(function () {\n $(this).find(\".show\").each(function () {\n clearSelection(this);\n });\n if ($(this).hasClass(\"show\")) {\n $(this).removeClass(\"show\");\n $(this).closest(\".custom-dropdown-menu\").removeClass(\"submenu-opened\");\n $(this).children(\"ul.custom-dropdown-menu\").removeClass(\"show\");\n $(this).children(\"ul.custom-dropdown-menu\").attr(\"aria-hidden\", \"true\");\n $(this).children(\".nav-link, .custom-dropdown-link\").attr(\"aria-expanded\", \"false\");\n }\n });\n\n $(\".header-wrapper\").removeClass(\"menu-opened\");\n $(\"body\").removeClass(\"modal-open\");\n $(\".modal-background\").removeClass(\"close-menu-modal\").hide();\n });\n\n $(\".navbar-nav\").on(\"click\", \".close-button > button\", function () {\n $(\".modal-background.close-menu-modal\").trigger(\"click\");\n });\n\n $(\".navbar-nav\").on(\"click\", \".nav-link:not(.custom-dropdown-toggle), .custom-dropdown-link:not(.custom-dropdown-toggle)\", function (e) {\n var $this = $(this);\n\n if ($this.closest(\".top-category\").length) {\n return;\n }\n\n e.preventDefault();\n if (!isDesktop(this)) {\n $(\".navbar-header .close-button\").trigger(\"click\");\n } else {\n $(\".modal-background.close-menu-modal\").trigger(\"click\");\n }\n setTimeout(function () {\n window.location.href = $this.attr(\"href\");\n }, 500);\n });\n\n $(\".navbar-nav\").on(\"click\", \".top-category\", function (e) {\n e.preventDefault();\n clearSelection(this);\n });\n\n $(\".navbar-header\").on(\"click\", \".close-button\", function (e) {\n e.preventDefault();\n $(\".navbar-nav\").find(\".top-category\").detach();\n $(\".navbar-nav\").find(\".show\").removeClass(\"show\");\n $(\".menu-toggleable-left\").removeClass(\"in\");\n $(\".header\").removeClass(\"menu-opened\");\n $(\"body\").removeClass(\"modal-open\");\n $(\".header\").removeClass(\"store-locator-opened\");\n\n $(\".navbar-toggler\").focus();\n\n $(\".main-menu\").attr(\"aria-hidden\", \"true\");\n $(\"header\").siblings().attr(\"aria-hidden\", \"false\");\n });\n\n $(\".navbar-toggler\").click(function (e) {\n e.preventDefault();\n\n if ($(\".modal-background\").hasClass(\"close-search-modal\")) {\n $(\".modal-background.close-search-modal\").trigger(\"click\");\n }\n $(\".main-menu\").toggleClass(\"in\");\n\n $(\".header\").toggleClass(\"menu-opened\");\n $(\"body\").toggleClass(\"modal-open\");\n\n $(\".main-menu\").removeClass(\"d-none\");\n $(\".main-menu\").attr(\"aria-hidden\", \"false\");\n $(\"header\").siblings().attr(\"aria-hidden\", \"true\");\n\n $(\".main-menu .nav.navbar-nav .nav-link\").first().focus();\n });\n\n keyboardAccessibility(\n \".navbar-header .user\",\n {\n 40: function ($popover) {\n // down\n if ($popover.children(\"a\").first().is(\":focus\")) {\n $popover.next().children().first().focus();\n } else {\n $popover.children(\"a\").first().focus();\n }\n },\n 38: function ($popover) {\n // up\n if ($popover.children(\"a\").first().is(\":focus\")) {\n $(this).focus();\n $popover.removeClass(\"show\");\n } else {\n $popover.children(\"a\").first().focus();\n }\n },\n 27: function () {\n // escape\n $(\".navbar-header .user .popover\").removeClass(\"show\");\n $(\".user\").attr(\"aria-expanded\", \"false\");\n },\n 9: function () {\n // tab\n $(\".navbar-header .user .popover\").removeClass(\"show\");\n $(\".user\").attr(\"aria-expanded\", \"false\");\n }\n },\n function () {\n var $popover = $(\".user .popover li.nav-item\");\n return $popover;\n }\n );\n\n $(\".navbar-header .user\").on(\"click\", function (e) {\n var $popover = $(\".navbar-header .user .popover\");\n if ($popover.length > 0 && $popover.has(e.target).length <= 0 && $popover[0] !== e.target) {\n $popover.toggleClass(\"show\");\n $(\".user\").attr(\"aria-expanded\", $popover.hasClass(\"show\"));\n }\n });\n\n $(\"body\").on(\"click\", function (e) {\n if ($(\".navbar-header .user\").has(e.target).length <= 0) {\n $(\".navbar-header .user .popover\").removeClass(\"show\");\n $(\".user\").attr(\"aria-expanded\", false);\n }\n });\n\n $(\"body\").on(\"click\", \"#myaccount\", function (event) {\n event.preventDefault();\n });\n\n $(window).on(\"breakpoint:change\", function () {\n if ($(\".menu-toggleable-left\").hasClass(\"in\")) {\n $(\".navbar-header .close-button\").trigger(\"click\");\n } else if ($(\".header-wrapper\").hasClass(\"menu-opened\")) {\n $(\".modal-background.close-menu-modal\").trigger(\"click\");\n }\n });\n};\n","'use strict';\n\n/**\n * Get cookie value by cookie name from browser\n * @param {string} cookieName - name of the cookie\n * @returns {string} cookie value of the found cookie name\n */\nfunction getCookie(cookieName) {\n var name = cookieName + '=';\n var decodedCookie = decodeURIComponent(document.cookie);\n var cookieArray = decodedCookie.split(';');\n for (var i = 0; i < cookieArray.length; i++) {\n var cookieItem = cookieArray[i];\n while (cookieItem.charAt(0) === ' ') {\n cookieItem = cookieItem.substring(1);\n }\n if (cookieItem.indexOf(name) === 0) {\n return cookieItem.substring(name.length, cookieItem.length);\n }\n }\n return '';\n}\n\nmodule.exports = function () {\n if ($('.valid-cookie-warning').length > 0) {\n var previousSessionID = window.localStorage.getItem('previousSid');\n var currentSessionID = getCookie('sid');\n if (!previousSessionID && currentSessionID) {\n // When a user first time visit the home page,\n // set the previousSessionID to currentSessionID\n // and Show the cookie alert\n previousSessionID = currentSessionID;\n window.localStorage.setItem('previousSid', previousSessionID);\n $('.cookie-warning-messaging').show();\n } else if (previousSessionID && previousSessionID === currentSessionID) {\n // Hide the cookie alert if user is in the same session\n $('.cookie-warning-messaging').hide();\n } else {\n // Clear the previousSessionID from localStorage\n // when user session is changed or expired\n window.localStorage.removeItem('previousSid');\n }\n }\n};\n","'use strict';\n\nvar focusHelper = require('../components/focus');\n\n/**\n * Renders a modal window that will track the users consenting to accepting site tracking policy\n */\nfunction showConsentModal() {\n var trackingConsentData = $('.tracking-consent');\n if (!trackingConsentData.data('caonline')) {\n return;\n }\n\n var urlContent = trackingConsentData.data('url');\n var urlAccept = trackingConsentData.data('accept');\n var urlReject = trackingConsentData.data('reject');\n var textYes = trackingConsentData.data('accepttext');\n var textNo = trackingConsentData.data('rejecttext');\n var textHeader = trackingConsentData.data('heading');\n var tokenName = trackingConsentData.data('tokenname');\n var token = trackingConsentData.data('token');\n\n var htmlString = '<!-- Modal -->'\n + '<div class=\"modal show\" id=\"consent-tracking\" aria-modal=\"true\" role=\"dialog\" style=\"display: block;\">'\n + '<div class=\"modal-dialog\">'\n + '<!-- Modal content-->'\n + '<div class=\"modal-content\">'\n + '<div class=\"modal-header\">'\n + textHeader\n + '</div>'\n + '<div class=\"modal-body\"></div>'\n + '<div class=\"modal-footer\">'\n + '<div class=\"button-wrapper\">'\n + '<button class=\"affirm btn btn-primary\" data-url=\"' + urlAccept + '\" autofocus data-dismiss=\"modal\">'\n + textYes\n + '</button>'\n + '<button class=\"decline btn btn-primary\" data-url=\"' + urlReject + '\" data-dismiss=\"modal\" >'\n + textNo\n + '</button>'\n + '</div>'\n + '</div>'\n + '</div>'\n + '</div>'\n + '</div>';\n $.spinner().start();\n $('body').append(htmlString);\n\n $.ajax({\n url: urlContent,\n type: 'get',\n dataType: 'html',\n success: function (response) {\n $('.modal-body').html(response);\n $('#consent-tracking').modal('show');\n },\n error: function () {\n $('#consent-tracking').remove();\n }\n });\n\n $('#consent-tracking .button-wrapper button').click(function (e) {\n e.preventDefault();\n var url = $(this).data('url');\n var data = {};\n data[tokenName] = token;\n $.ajax({\n url: url,\n type: 'post',\n data: data,\n dataType: 'json',\n success: function (response) {\n // Only hide modal if the operation is successful - don't want to give a false impression\n if (response.success) {\n $('#consent-tracking').remove();\n $.spinner().stop();\n }\n },\n error: function (err) {\n // Expected error response is for CSRF failure, which will include a redirect to CSRF-Fail\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n }\n }\n });\n });\n}\n\nmodule.exports = function () {\n if ($('.consented').length === 0 && $('.tracking-consent').hasClass('api-true')) {\n showConsentModal();\n }\n\n if ($('.tracking-consent').hasClass('api-true')) {\n $('.tracking-consent').click(function () {\n showConsentModal();\n });\n }\n\n $('body').on('shown.bs.modal', '#consent-tracking', function () {\n $('#consent-tracking').siblings().attr('aria-hidden', 'true');\n $('#consent-tracking .affirm').focus();\n });\n\n $('body').on('hidden.bs.modal', '#consent-tracking', function () {\n $('#consent-tracking').siblings().attr('aria-hidden', 'false');\n });\n\n $('body').on('keydown', '#consent-tracking', function (e) {\n var focusParams = {\n event: e,\n containerSelector: '#consent-tracking',\n firstElementSelector: '.affirm',\n lastElementSelector: '.decline',\n nextToLastElementSelector: '.affirm'\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n};\n","var scrollAnimate = require(\"./scrollAnimate\");\nconst commonFeature = require(\"./commonFeature\");\nconst debounce = require(\"lodash/debounce\");\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} button - button that was clicked for email sign-up\n */\nfunction displayMessage(data, button) {\n $.spinner().stop();\n var emailField = $(\"#footer-input\");\n if (data.success) {\n emailField.addClass(\"is-valid\");\n emailField.removeClass(\"is-invalid\");\n } else {\n emailField.addClass(\"is-invalid\");\n emailField.removeClass(\"is-valid\");\n }\n\n var errorElement = $(\".footer-email-signup .invalid-feedback\");\n var successElement = $(\".footer-email-signup .valid-feedback\");\n\n if (errorElement) {\n $(errorElement).empty().append(data.msg).addClass(\"is-invalid\");\n }\n\n if (successElement) {\n $(successElement).empty().append(data.msg).addClass(\"is-valid\");\n }\n\n if (emailField.hasClass(\"is-valid\")) {\n $(errorElement).addClass(\"hide\");\n } else {\n $(errorElement).removeClass(\"hide\");\n }\n\n $(button).attr(\"disabled\", false);\n}\n\nfunction positionBtnBackToTop() {\n let $backToTop = $(\".back-to-top\");\n \n if ($(window).scrollTop() >= ($(window).height() / 100) * 10) {\n $backToTop.addClass(\"show\"); \n } else {\n $backToTop.removeClass(\"show\");\n }\n}\n\nmodule.exports = function () {\n $(\".back-to-top\").click(function () {\n scrollAnimate();\n });\n\n $(document).ready(function () {\n if (commonFeature.isBreakpoint(\">=md\")) {\n $(\".footer-navigation .item__sublinks\").removeClass(\"collapse\");\n $(\".footer-navigation .item__main-link\").removeAttr(\"data-toggle\");\n }\n });\n\n $(window).on(\"breakpoint:change\", function () {\n if (commonFeature.isBreakpoint(\">=md\")) {\n $(\".footer-navigation .item__sublinks\").removeClass(\"collapse\");\n $(\".footer-navigation .item__main-link\").removeAttr(\"data-toggle\");\n } else {\n $(\".footer-navigation .item__sublinks\").addClass(\"collapse\");\n $(\".footer-navigation .item__main-link\").attr(\"data-toggle\", \"collapse\");\n }\n });\n\n $(window).on(\"scroll\", debounce(positionBtnBackToTop, 50));\n\n $(\"#footer-input\").on(\"change keyup\", function () {\n $(\"#footer-input\").removeClass(\"is-invalid is-valid\");\n $(\".invalid-feedback\").contents().filter(function () {\n return this.nodeType === 3;\n }).remove();\n $(\".valid-feedback\").contents().filter(function () {\n return this.nodeType === 3;\n }).remove();\n });\n\n $(\".subscribe-email\").on(\"click\", function (e) {\n e.preventDefault();\n var button = $(this);\n var url = button.data(\"href\");\n\n var emailField = $(\"#footer-input\");\n var emailId = emailField.val();\n $.spinner().start();\n button.attr(\"disabled\", true);\n\n $.ajax({\n url: url,\n type: \"post\",\n dataType: \"json\",\n data: {\n emailId: emailId\n },\n success: function (data) {\n displayMessage(data, button);\n },\n error: function (err) {\n displayMessage(err, button);\n }\n });\n });\n\n $(\".footer-email-signup form\").on(\"submit\", function (e) {\n e.preventDefault();\n var error = true;\n\n // Validate email\n var email = $(this).find(\"input#email\").val();\n var isValidEmail = email && /^[\\w.%+-]+@[\\w.-]+\\.[\\w]{2,6}$/.test(email) ? true : false; \n\n if (isValidEmail) {\n // Remove the iframe if already exists\n if (document.querySelectorAll(\"#web2leadIFrame\").length) {\n document.querySelector(\"#web2leadIFrame\").remove();\n }\n\n // Create new iframe\n var web2leadIFrame = document.createElement(\"iframe\");\n web2leadIFrame.id = \"web2leadIFrame\";\n web2leadIFrame.style.display = \"none\";\n document.body.appendChild(web2leadIFrame);\n\n // Append values and submit iframe form\n web2leadIFrame = document.querySelector(\"#web2leadIFrame\");\n if (web2leadIFrame) {\n var web2leadIFrameContent = web2leadIFrame.contentDocument || web2leadIFrame.contentWindow.document;\n web2leadIFrameContent.body.appendChild(this.cloneNode(true));\n web2leadIFrameContent.body.querySelector(\"form\").submit();\n error = false;\n }\n\n // make call to sfsc with email\n if ($(this).closest(\".footer-content\").data(\"save-session-email-url\")) {\n var sfscVerifyUrl = $(this).closest(\".footer-content\").data(\"save-session-email-url\");\n var data = $(this).serialize();\n $.ajax({\n url: sfscVerifyUrl,\n data: data,\n type: \"post\"\n });\n }\n }\n\n // Reset original form\n if (!error) {\n this.reset();\n }\n\n // Handle error msg\n $(\".footer-email-signup .response-msg .success-msg\").addClass(\"d-none\");\n $(\".footer-email-signup .response-msg .error-msg\").addClass(\"d-none\");\n if (error) {\n $(\".footer-email-signup .response-msg .error-msg\").removeClass(\"d-none\");\n } else {\n $(\".footer-email-signup .response-msg .success-msg\").removeClass(\"d-none\");\n }\n });\n\n $(\".footer-email-signup input#email\").on(\"input\", function () {\n $(\".footer-email-signup .response-msg .success-msg\").addClass(\"d-none\");\n $(\".footer-email-signup .response-msg .error-msg\").addClass(\"d-none\");\n });\n\n $(\"form#web2leadForm\").on(\"submit\", function () {\n // Validate email\n var email = $(this).find(\"input#email\").val();\n var isValidEmail = email && /^[\\w.%+-]+@[\\w.-]+\\.[\\w]{2,6}$/.test(email) ? true : false; \n\n if (isValidEmail) {\n // make call to sfsc with email\n if ($(\".footer-content\").data(\"save-session-email-url\")) {\n var sfscVerifyUrl = $(\".footer-content\").data(\"save-session-email-url\");\n var data = $(this).serialize();\n $.ajax({\n url: sfscVerifyUrl,\n data: data,\n type: \"post\"\n });\n }\n }\n });\n};\n","\nconst debounce = require(\"lodash/debounce\");\nconst commonFeature = require(\"./commonFeature\");\nconst searchHelpers = require(\"./searchHelpers\");\n\nlet $cache = {};\n\nlet initCache = function () {\n $cache.window = $(window);\n $cache.header = $(\"header\");\n $cache.mainContent = $(\"#maincontent\");\n $cache.headerBanner = $(\".header-banner\");\n $cache.navigation = $(\".header-wrapper\");\n $cache.menu = $(\".multilevel-dropdown .custom-dropdown-menu\");\n $cache.minicart = $(\".minicart .popover\");\n $cache.searchRefinementGridHeader = $(\".search-results .sticky-grid-header-wrapper\");\n $cache.headerBannerHeight = $cache.headerBanner.length ? $cache.headerBanner.outerHeight() : 0;\n $cache.navigationHeight = $cache.navigation.length ? $cache.navigation.outerHeight() : 0;\n $cache.headerHeight = $cache.headerBannerHeight + $cache.navigationHeight;\n $cache.lastScrollTop = 0;\n};\n\nfunction updateSearchRefinementStickyGridHeader() {\n if ($cache.navigation && $cache.navigation) {\n var navHeaderOffsetTop = $cache.navigation.offset().top;\n var navHeaderHeight = $cache.navigation.height();\n var windowScrollTop = $cache.window.scrollTop();\n var gridHeaderCSSTop = navHeaderOffsetTop + navHeaderHeight - windowScrollTop;\n\n $cache.searchRefinementGridHeader.css(\"top\", gridHeaderCSSTop < 0 ? 0 : gridHeaderCSSTop);\n }\n}\n\nfunction handleHeaderBannerPosition() {\n if (commonFeature.isBreakpoint(\">=md\")) {\n let scrollFromTop = $cache.window.scrollTop();\n\n if (scrollFromTop == 0) {\n $cache.headerBanner.css(\"top\", 0);\n $cache.navigation.css({\"top\": $cache.headerBannerHeight});\n $cache.mainContent.css(\"padding-top\", $cache.headerHeight);\n $cache.menu.css({\"top\": $cache.headerHeight});\n $cache.minicart.css({\"height\": $cache.window.height() - $cache.headerHeight});\n } else if (scrollFromTop < $cache.lastScrollTop || (scrollFromTop > $cache.headerBannerHeight && scrollFromTop + $cache.window.height() < $(document).height())) {\n // Scroll Up or Down\n $cache.headerBanner.css(\"top\", -$cache.headerBannerHeight);\n $cache.navigation.css({\"top\": 0});\n $cache.mainContent.css(\"padding-top\", $cache.headerHeight);\n $cache.menu.css({\"top\": $cache.navigationHeight});\n $cache.minicart.css({\"height\": $cache.window.height() - $cache.navigationHeight});\n $cache.searchRefinementGridHeader.css(\"top\", $cache.navigation.height());\n }\n\n $cache.lastScrollTop = scrollFromTop;\n }\n}\n\nfunction handleHeaderMobilePosition() {\n if (!commonFeature.isBreakpoint(\">=md\")) {\n let scrollFromTop = $cache.window.scrollTop();\n\n if (scrollFromTop == 0) {\n $cache.header.css(\"top\", 0);\n $cache.mainContent.css(\"padding-top\", $cache.headerHeight);\n } else if (scrollFromTop < $cache.lastScrollTop) {\n // Scroll Up\n $cache.header.css(\"top\", 0);\n $cache.mainContent.css(\"padding-top\", $cache.headerHeight);\n $cache.searchRefinementGridHeader.css(\"top\", $cache.navigation.height() + $cache.headerBanner.height());\n } else if (scrollFromTop > $cache.headerHeight && scrollFromTop + $cache.window.height() < $(document).height()) {\n // Scroll Down\n $cache.header.css(\"top\", -$cache.headerHeight);\n $cache.mainContent.css(\"padding-top\", $cache.headerHeight);\n $cache.searchRefinementGridHeader.css(\"top\", 0);\n }\n\n if ($(\".modal-background.close-search-modal\").length && !$(\".search-mobile .suggestions-wrapper .suggestions-inner\").children().length) {\n searchHelpers.tearDownSuggestions();\n }\n\n $cache.lastScrollTop = scrollFromTop;\n }\n}\n\nfunction handleHeaderPosition() {\n if (commonFeature.isBreakpoint(\">=md\")) {\n $cache.navigation.css({\"top\": $cache.headerBannerHeight});\n $cache.mainContent.css({\"padding-top\": $cache.headerHeight});\n if (commonFeature.isBreakpoint(\">=customLG\")) {\n $cache.menu.css({\"top\": $cache.headerHeight});\n } else {\n $cache.menu.css({\"top\": 0});\n }\n $cache.minicart.css({\"height\": $cache.window.height() - $cache.headerHeight});\n\n $cache.window.on(\"scroll\", debounce(handleHeaderBannerPosition, 50));\n } else {\n $cache.navigation.css({\"top\": 0});\n $cache.mainContent.css({\"padding-top\": $cache.headerHeight});\n $cache.menu.css({\"top\": 0});\n $cache.minicart.css({\"height\": \"100%\"});\n\n $cache.window.on(\"scroll\", debounce(handleHeaderMobilePosition, 50));\n }\n}\n\nmodule.exports = function () {\n initCache();\n handleHeaderPosition();\n\n $cache.window.on(\"breakpoint:change\", debounce(function () {\n initCache();\n\n $cache.headerBanner.css(\"top\", 0);\n $cache.header.css(\"top\", 0);\n\n handleHeaderPosition();\n }, 1000));\n\n $cache.window.on(\"windowresize:width\", function () {\n if ($cache.searchRefinementGridHeader && $cache.searchRefinementGridHeader.length) {\n updateSearchRefinementStickyGridHeader();\n }\n });\n};\n","var cart = require(\"../cart/cart\");\nvar saveForLaterList = require(\"../product/saveForLaterList\");\nvar wishlist = require(\"../product/wishlist\");\n/* eslint-disable no-undef */\n\n/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n */\nfunction displayMessage(data) {\n $.spinner().stop();\n var status = data.success ? \"alert-success\" : \"alert-danger\";\n\n if ($(\".add-to-wishlist-messages\").length === 0) {\n $(\"body\").append(\"<div class='add-to-wishlist-messages '></div>\");\n }\n $(\".add-to-wishlist-messages\")\n .append(\"<div class='add-to-wishlist-alert text-center \" + status + \" alert'>\" + data.msg + \"</div>\");\n\n setTimeout(function () {\n $(\".add-to-wishlist-messages\").remove();\n }, 6500);\n}\n\nfunction addToList($actionBtn) {\n var url = $actionBtn.data(\"url\");\n var pid = $actionBtn.data(\"pid\");\n\n // drive commerve customizer related data\n var recipeId = $actionBtn.data(\"recipeId\");\n var recipeLocation = $actionBtn.data(\"recipeLocation\");\n var listType = $actionBtn.data(\"listType\");\n\n var optionId = $actionBtn.closest(\".product-info\").find(\".lineItem-options-values\").data(\"option-id\");\n var optionVal = $actionBtn.closest(\".product-info\").find(\".lineItem-options-values\").data(\"value-id\");\n optionId = optionId || null;\n optionVal = optionVal || null;\n if (!url || !pid) {\n return;\n }\n\n var removeUrl = $($actionBtn).data(\"action\");\n var uuid = $actionBtn.data(\"uuid\");\n var bundleParentName = $actionBtn.data(\"bundleParentName\");\n var bundleParentSKU = $actionBtn.data(\"bundleParentSku\");\n\n $.spinner().start();\n $.ajax({\n url: url,\n type: \"post\",\n dataType: \"json\",\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal,\n recipe: JSON.stringify({\n id: recipeId,\n location: recipeLocation\n }),\n bundleParentSKU: bundleParentSKU,\n bundleParentName: bundleParentName,\n type: listType\n },\n success: function (data) {\n displayMessage(data);\n $(\"body\").trigger(\"removeItemFromCartAjax\", [removeUrl, uuid]);\n },\n error: function (err) {\n displayMessage(err);\n }\n });\n}\n\n\nmodule.exports = function () {\n cart();\n\n $(\".minicart\").on(\"count:update\", function (event, count) {\n if (count && $.isNumeric(count.quantityTotal)) {\n $(\".minicart .minicart-quantity\").text(count.quantityTotal);\n $(\".minicart .minicart-link\").attr({\n \"aria-label\": count.minicartCountOfItems,\n title: count.minicartCountOfItems\n });\n if (count.quantityTotal > 0) {\n $(\".minicart-quantity\").removeClass(\"d-none\");\n $(\".minicart-link\").removeClass(\"minicart-empty\");\n } else {\n $(\".minicart-quantity\").addClass(\"d-none\");\n $(\".minicart-link\").addClass(\"minicart-empty\");\n }\n }\n });\n\n $(\".b2b-active-project-folder\").on(\"count:update\", function (event, count) {\n if (count && $.isNumeric(count.qty)) {\n $(\".b2b-active-project-folder .b2b-active-project-quantity\").text(count.qty);\n $(\".b2b-active-project-folder .b2b-active-project-link\").attr({\n \"aria-label\": count.label,\n title: count.label\n });\n if (count.qty > 0) {\n $(\".b2b-active-project-quantity\").removeClass(\"d-none\");\n } else {\n $(\".b2b-active-project-quantity\").addClass(\"d-none\");\n }\n }\n });\n\n $(\".minicart\")\n .off(\"click\")\n .on(\"click\", function () {\n if ($(\".search:visible\").length === 0) {\n return;\n }\n var url = $(\".minicart\").data(\"action-url\");\n var count = parseInt($(\".minicart .minicart-quantity\").text(), 10);\n if (count !== 0 && $(\".minicart .popover.show\").length === 0 && $(\".cart-wrapper\").length === 0) {\n $(\".minicart .popover\").addClass(\"show\");\n $(\".minicart .popover\").spinner().start();\n $(\".modal-background\").addClass(\"d-block\");\n\n $.get(url, function (data) {\n if (data.indexOf(\"product-line-item\") < 0) {\n window.location.href = $(\".minicart .popover\").data(\"cartRedirect\");\n } else {\n $(\".minicart .popover\").empty();\n $(\".minicart .popover\").append(data);\n\n var isPaypalEnabled = !!(\n $(\"#paypal_enabled\").length > 0 && document.getElementById(\"paypal_enabled\").value === \"true\"\n );\n var isGooglePayEnabled = !!(\n $(\"#isGooglePayEnabled\").length > 0 && $(\"#isGooglePayEnabled\").val() === \"true\"\n );\n \n if (isPaypalEnabled) {\n paypalhelper.paypalMini();\n }\n if (isGooglePayEnabled) {\n onGooglePayLoaded();\n }\n \n $.spinner().stop();\n }\n }).then(function () {\n wishlist.addToWishlist();\n saveForLaterList.addToList();\n });\n }\n });\n\n\n $(\"body\").on(\"click\", function (e) {\n if ($(\".minicart\").has(e.target).length <= 0) {\n $(\".minicart .popover\").empty();\n $(\".minicart .popover\").removeClass(\"show\");\n $(\".modal-background\").removeClass(\"d-block\");\n }\n });\n\n $(\"body\").on(\"change\", \".minicart .quantity\", function () {\n if ($(this).parents(\".bonus-product-line-item\").length && $(\".cart-page\").length) {\n // eslint-disable-next-line\n location.reload();\n }\n });\n\n $(\"body\").on(\"click\", \".minicart-remove-btn\", function () {\n $(\".minicart .popover\").empty();\n $(\".minicart .popover\").removeClass(\"show\");\n $(\".modal-background\").removeClass(\"d-block\");\n });\n\n $(\"body\").on(\"click\", \"#cartMoveWishlistModal .move-to-wishlist-confirmation\", function (e) {\n e.preventDefault();\n var $actionBtn = $(this);\n addToList($actionBtn); \n });\n\n $(\"body\").on(\"click\", \"#cartMoveSaveForLater .move-to-wishlist-confirmation\", function (e) {\n e.preventDefault();\n var $actionBtn = $(this);\n addToList($actionBtn);\n });\n\n // drive commerve customizer code start\n $(\"body\").on(\"click\", \".cart-move-drive-customizer\", function (e) {\n e.preventDefault();\n\n // doesn't continue if this button is opening a confirmation modal\n if ($(this).data(\"toggle\") === \"modal\") {\n return;\n }\n\n var url = $(this).attr(\"href\") || $(this).data(\"url\");\n var pid = $(this).data(\"pid\");\n var recipeId = $(this).data(\"recipeId\") || null;\n var recipeLocation = $(this).data(\"recipeLocation\") || null;\n var listType = $(this).data(\"listType\") || 10;\n\n if (!url || !recipeId || !recipeLocation) {\n return;\n }\n\n $.spinner().start();\n $.ajax({\n url: url,\n type: \"post\",\n dataType: \"json\",\n data: {\n pid: pid,\n type: listType,\n recipe: JSON.stringify({\n id: recipeId,\n location: recipeLocation\n })\n },\n success: function (data) {\n displayMessage(data);\n },\n error: function (err) {\n displayMessage(err);\n }\n });\n });\n // drive commerve customizer code end\n\n $(window).on(\"breakpoint:change\", function () {\n $(\".minicart-remove-btn\").trigger(\"click\");\n });\n\n};\n","var focusHelper = require(\"base/components/focus\");\nvar slickCarousel = require(\"../components/slickCarousel\");\nvar gtm = require(\"gtm/product/gtm\");\n\n/**\n * Retrieves the relevant pid value\n * @param {jquery} $el - DOM container for a given add to cart button\n * @return {string} - value to be used when adding product to cart\n */\nfunction getPidValue($el) {\n var pid;\n\n if ($(\"#quickViewModal\").hasClass(\"show\") && !$(\".product-set\").length) {\n pid = $($el).closest(\".modal-content\").find(\".product-quickview\").data(\"pid\");\n } else if ($(\".product-set-detail\").length || $(\".product-set\").length) {\n pid = $($el).closest(\".product-detail\").find(\".product-id\").text();\n } else {\n pid = $(\".product-detail:not('.bundle-item')\").data(\"pid\");\n }\n\n return pid;\n}\n\n/**\n * Retrieve contextual quantity selector\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {jquery} - quantity selector DOM container\n */\nfunction getQuantitySelector($el) {\n var quantitySelected;\n if ($el && $(\".set-items\").length) {\n quantitySelected = $($el).closest(\".product-detail\").find(\".quantity-select\");\n } else if ($el && $(\".product-bundle\").length) {\n var quantitySelectedModal = $($el).closest(\".modal-footer\").find(\".quantity-select\");\n var quantitySelectedPDP = $($el).closest(\".bundle-footer\").find(\".quantity-select\");\n if (quantitySelectedModal.val() === undefined) {\n quantitySelected = quantitySelectedPDP;\n } else {\n quantitySelected = quantitySelectedModal;\n }\n } else {\n quantitySelected = $(\".quantity-select\");\n }\n return quantitySelected;\n}\n\n/**\n * Retrieves the value associated with the Quantity pull-down menu\n * @param {jquery} $el - DOM container for the relevant quantity\n * @return {string} - value found in the quantity input\n */\nfunction getQuantitySelected($el) {\n return getQuantitySelector($el).val();\n}\n\n/**\n * Process attribute values\n *\n * @param {Object} attr - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {Object[]} attr.values - Array of attribute value objects\n * @param {string} attr.values.value - Attribute coded value\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\n * selected. If there is no variant that corresponds to a specific combination of attribute\n * values, an attribute may be disabled in the Product Detail Page\n * @param {jQuery} $productContainer - DOM container for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction processValues(attr, $productContainer, msgs) {\n var $variationsToggler = $productContainer.find(\"[data-attr='\" + attr.id + \"'] .variations-toggler\");\n var selectedValueHtml;\n var selectedSwatchValue;\n\n $variationsToggler.find(\".attr-selected-value\").remove();\n $variationsToggler.find(\".swatch-value-selected\").remove();\n\n attr.values.forEach(function (attrValue) {\n var $attr = $productContainer.find(\"[data-attr='\" + attr.id + \"']\");\n var $attrValue = $productContainer.find(\"[data-attr='\" + attr.id + \"'] [data-attr-value]\").filter(function () {\n return $(this).data(\"attrValue\") == attrValue.value;\n });\n var $button = $attrValue.parent();\n\n if (attrValue.selected) {\n $attrValue.addClass(\"selected\");\n selectedValueHtml = `<span class=\"attr-selected-value text-b2-global\">${attrValue.displayValue}</span>`;\n $(selectedValueHtml).insertAfter($variationsToggler.find(\".attr-name\"));\n if (attr.swatchable) {\n selectedSwatchValue = `<span class=\"swatch-value-selected\" style=\"background-image: url(${attrValue.images && attrValue.images.swatch.length > 0 ? attrValue.images.swatch[0].url : \"\"})\"></span>`;\n $(selectedSwatchValue).insertAfter($variationsToggler.find(\".attr-name\"));\n $attrValue.siblings(\".selected-assistive-text\").text(msgs.assistiveSelectedText);\n $attr.find(\".selected-swatch__name\").text(attrValue.displayValue);\n\n if (attr.isContentAttribute) {\n $attrValue.closest(\"button\").addClass(\"selected\");\n }\n\n if ($attr.find(\".selected-swatch__family\").length > 0) {\n $attr.find(\".selected-swatch__family\").text(attrValue.fabricFamily);\n }\n\n if (attrValue.images && attrValue.images.swatch.length > 0) {\n $attr.find(\".selected-swatch__image\").attr(\"src\", attrValue.images.swatch[0].url.replace(/\\s+/g, \"%20\"));\n }\n if ($attr.find(\".selected-swatch__actions\").length) {\n $attr.find(\".selected-swatch__actions .material-details-modal-button\").attr(\"data-url\", attrValue.showModalURL);\n $attr.find(\".selected-swatch__actions .add-to-cart--workroom\").attr(\"data-pid\", attrValue.orderableSwatchSKU);\n }\n }\n } else {\n if (attr.isContentAttribute) {\n $attrValue.closest(\"button\").removeClass(\"selected\");\n }\n $attrValue.removeClass(\"selected\");\n if (attr.swatchable) {\n $attrValue.siblings(\".selected-assistive-text\").empty();\n }\n }\n\n if (attrValue.url) {\n $button.attr(\"data-url\", attrValue.url);\n } else {\n $button.removeAttr(\"data-url\");\n }\n\n // Disable if not selectable\n $attrValue.removeClass(\"selectable unselectable\");\n $button.attr(\"disabled\", !attrValue.selectable);\n\n $attrValue.addClass(attrValue.selectable ? \"selectable\" : \"unselectable\");\n });\n}\n\n/**\n * Routes the handling of attribute processing depending on whether the attribute has image\n * swatches or not\n *\n * @param {Object} attrs - Attribute\n * @param {string} attr.id - Attribute ID\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Object} msgs - object containing resource messages\n */\nfunction updateAttrs(attrs, $productContainer, msgs) {\n attrs.forEach(function (attr) {\n processValues(attr, $productContainer, msgs);\n if (attr.hasTabs) {\n $(\".color-attribute-number\").text(attr.valueCount[attr.selectedValue.pairedValue]);\n }\n });\n}\n\n/**\n * Updates the availability status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateAvailability(response, $productContainer) {\n var availabilityValue = \"\";\n var availabilityMessages = response.product.availability.messages;\n if (!response.product.readyToOrder) {\n availabilityValue = \"<li><div>\" + response.resources.info_selectforstock + \"</div></li>\";\n } else {\n availabilityMessages.forEach(function (message) {\n availabilityValue += \"<li><div>\" + message + \"</div></li>\";\n });\n }\n\n $($productContainer).trigger(\"product:updateAvailability\", {\n product: response.product,\n $productContainer: $productContainer,\n message: availabilityValue,\n resources: response.resources\n });\n}\n\n\n/**\n * Updates the wishlist status in the Product Detail Page\n *\n * @param {Object} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n */\nfunction updateWishlist(response, $productContainer) {\n var iconEmpty = $productContainer.closest(\".product-detail .product-main-region\").find(\".wishlist-add\");\n var iconFilled = $productContainer.closest(\".product-detail .product-main-region\").find(\".wishlist-remove\");\n if (response.isInWhishlist) {\n iconEmpty.addClass(\"d-none\");\n iconFilled.removeClass(\"d-none\");\n } else {\n iconFilled.addClass(\"d-none\");\n iconEmpty.removeClass(\"d-none\");\n }\n}\n\n/**\n * Generates html for product attributes section\n *\n * @param {array} attributes - list of attributes\n * @return {string} - Compiled HTML\n */\nfunction getAttributesHtml(attributes) {\n if (!attributes) {\n return \"\";\n }\n\n var html = \"\";\n\n attributes.forEach(function (attributeGroup) {\n if (attributeGroup.ID === \"dimensions\") {\n attributeGroup.attributes.forEach(function (attribute) {\n html += \"<div class='attribute-values'><span class='text-b2-medium'>\" + attribute.label + \"</span> \" +\n \"<span class='text-b2-global'>\" + attribute.value + \"</span></div>\";\n });\n }\n });\n\n var viewAllLabel = $(\".main-attributes\").data(\"view-all\");\n html += `<a href=\"#\" class=\"text-b2-underlined specifications-toggler\">${viewAllLabel}</a>`;\n\n return html;\n}\n\n/**\n * @typedef UpdatedOptionValue\n * @type Object\n * @property {string} id - Option value ID for look up\n * @property {string} url - Updated option value selection URL\n */\n\n/**\n * @typedef OptionSelectionResponse\n * @type Object\n * @property {string} priceHtml - Updated price HTML code\n * @property {Object} options - Updated Options\n * @property {string} options.id - Option ID\n * @property {UpdatedOptionValue[]} options.values - Option values\n */\n\n/**\n * Updates DOM using post-option selection Ajax response\n *\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction updateOptions(optionsHtml, $productContainer) {\n // Update options\n $productContainer.find(\".product-options\").empty().html(optionsHtml);\n}\n\n/**\n * Dynamically creates Slick carousel slides from response containing images\n * @param {Object[]} images - Array of product images, along with related information\n *\n * @param {jQuery} type - type of product images (large, small..)\n */\nfunction getSliderElements(images, type) {\n var htmlTemplateString = \"\";\n var htmlSubString = \"\";\n\n images[type].forEach(function (image, idx) {\n if (type == \"large\") {\n var highResImg = images.large[idx] || image;\n htmlSubString = `<div class=\"slide-inside\">\n <div class=\"anchor-image text-center position-relative\">\n <img class=\"product-slider-image img-fluid\" src=\"${image.url}\" srcset=\"${image.srcset || \"\"}\" sizes=\"${image.sizes || \"\"}\" data-high-res-src=\"${highResImg.url}\" data-modal-srcset=\"${image.modal && image.modal.srcset ? image.modal.srcset : \"\"}\" data-modal-sizes=\"${image.modal && image.modal.sizes ? image.modal.sizes : \"\"}\" alt=\"${image.alt} image number ${image.index}\" loading=\"${idx > 0 ? \"lazy\" : \"auto\"}\" itemprop=\"image\"/>\n </div></div>`;\n } else {\n htmlSubString = `<div class=\"slide-inside\">\n <div class=\"thumb-image overflow-hidden\">\n <img src=\"${image.url}\" srcset=\"${image.srcset || \"\"}\" sizes=\"${image.sizes || \"\"}\" data-modal-sizes=\"${image.modal.sizes || \"\"}\" alt=\"${image.alt}\" loading=\"${idx > 4 ? \"lazy\" : \"auto\"}\" itemprop=\"image\"/>\n </div></div>`;\n }\n\n htmlTemplateString += htmlSubString;\n });\n\n return htmlTemplateString;\n}\n\n/**\n * Dynamically creates Slick carousel from response containing images\n * @param {Object[]} response - Ajax response object after an\n * attribute value has been [de]selected\n * @param {jQuery} $productContainer - DOM element for a given product\n * @param {Boolean} isDrive - determines if product is a drive product\n * @param {Boolean} isVirtualSku - determines if carousel should switch to 360 view\n * @param {Boolean} preventGalleryRefresh - Drive indicator to skip images rerender\n */\nfunction updateProductImages(response, $productContainer, isDrive, isVirtualSku, preventGalleryRefresh) {\n var primaryImageUrls;\n\n if (preventGalleryRefresh === true || preventGalleryRefresh === \"true\") {\n return;\n }\n\n if (response.isDriveCustomizerUpdate && !(response.bundleProduct && response.bundleProduct.images)) {\n primaryImageUrls = {\n large: [],\n small: []\n };\n response.products.forEach(function (product) {\n primaryImageUrls.large = primaryImageUrls.large.concat(product.images.large);\n primaryImageUrls.small = primaryImageUrls.small.concat(product.images.small);\n });\n } else {\n primaryImageUrls = response.bundleProduct && response.bundleProduct.images ? response.bundleProduct.images : response.product.images;\n }\n\n var $mainSlider = $productContainer.find(\".primary-images-carousel .slick-slider\").first();\n var $thumbSlider = $productContainer.find(\"[id^=pdp-thumb-slider]\").first();\n var sliderIndex = $mainSlider.data(\"sliderIndex\");\n var mainSlliderElements;\n var thumbSlliderElements;\n\n if (primaryImageUrls.large && primaryImageUrls.large.length) {\n mainSlliderElements = getSliderElements(primaryImageUrls, \"large\");\n $mainSlider.slick(\"unslick\");\n $mainSlider.find(\".slide-inside:not(.slide-inside--customizer)\").remove();\n $mainSlider.prepend(mainSlliderElements);\n $(\".pdp-images-print-container\").find(\"img\").attr(\"src\", primaryImageUrls.large[0].url);\n }\n if (primaryImageUrls.small && primaryImageUrls.small.length && $thumbSlider.hasClass(\"slick-initialized\")) {\n thumbSlliderElements = getSliderElements(primaryImageUrls, \"small\");\n $thumbSlider.slick(\"unslick\");\n $thumbSlider.find(\".slide-inside:not(.slide-inside--preview)\").remove();\n $thumbSlider.prepend(thumbSlliderElements);\n }\n if (mainSlliderElements || thumbSlliderElements) {\n slickCarousel.initPDPSliderByIndex(sliderIndex, isDrive, isVirtualSku);\n }\n}\n\nfunction calculateSavings() {\n var $priceSelector = $(\".single-price .price\");\n var $productContainer = $priceSelector.closest(\".product-detail\");\n var $savingsContainer = $productContainer.find(\".attributes .savings\");\n var salesPriceSelector = $priceSelector.find(\".sales .value\");\n var originalPriceSelector = $priceSelector.find(\".strike-through .value\");\n var savingsLabel = $savingsContainer.data(\"label\");\n var displaySavingsMessage = $savingsContainer.data(\"savings-message\") || \"\";\n var salesPrice;\n var originalPrice;\n var discount;\n var percentageDiscount;\n var savingsMessage;\n\n if (!$productContainer.parents(\".choose-bonus-product-dialog\").length > 0) {\n if (originalPriceSelector.length && salesPriceSelector.length) {\n salesPrice = parseFloat($(salesPriceSelector[0]).text().replace(/[^0-9.-]+/g, \"\"));\n originalPrice = parseFloat($(originalPriceSelector[0]).text().replace(/[^0-9.-]+/g, \"\"));\n discount = Math.round(originalPrice - salesPrice);\n percentageDiscount = Math.round((discount * 100) / originalPrice) + \"%\";\n\n switch (displaySavingsMessage) {\n case \"NONE\":\n savingsMessage = \"\";\n break;\n case \"PERCENT\":\n savingsMessage = `${savingsLabel} ${percentageDiscount}`;\n break;\n case \"DOLLAR\":\n savingsMessage = `${savingsLabel} $${discount.toFixed(0).replace(/(\\d)(?=(\\d{3})+(?:\\.\\d+)?$)/g, \"$1,\")}`;\n break;\n case \"BOTH\":\n savingsMessage = `${savingsLabel} ${percentageDiscount} ($${discount.toFixed(0).replace(/(\\d)(?=(\\d{3})+(?:\\.\\d+)?$)/g, \"$1,\")})`;\n break;\n default:\n savingsMessage = \"\";\n break;\n }\n\n $savingsContainer.each(function () {\n if (discount <= 0 || !savingsMessage) {\n $(this).addClass(\"d-none\").empty();\n } else {\n $(this).removeClass(\"d-none\").empty().text(savingsMessage);\n }\n });\n } else {\n $savingsContainer.each(function () {\n $(this).empty();\n });\n }\n }\n}\n\n/**\n * updates shipping message based on product shipping flag\n * @param {Object} response - response from Ajax call \n */\nfunction updateShippingMessage(response) {\n var $shippingMessage = $(\".shipping-message\");\n\n if (response && $shippingMessage && $shippingMessage.length) {\n var freeShippingFlag = $shippingMessage.data(\"free-shipping-flag\");\n var showShippingMessage = false;\n\n if (response.product && response.product.ShippingFlag && response.product.ShippingFlag.trim().toLowerCase() === freeShippingFlag) {\n showShippingMessage = true;\n } else if (response.products && response.products.length) {\n var allProductsFreeShipping = true;\n\n for (let i = 0; i < response.products.length; i++) {\n var product = response.products[i];\n if (!(product && product.ShippingFlag && product.ShippingFlag.trim().toLowerCase() === freeShippingFlag)) {\n allProductsFreeShipping = false;\n }\n }\n\n if (allProductsFreeShipping) {\n showShippingMessage = true;\n }\n }\n\n if (showShippingMessage) {\n $shippingMessage.removeClass(\"d-none\");\n } else {\n $shippingMessage.addClass(\"d-none\");\n }\n }\n}\n\n/**\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\n * @param {Object} response - response from Ajax call\n * @param {Object} response.product - Product object\n * @param {string} response.product.id - Product ID\n * @param {Object[]} response.product.variationAttributes - Product attributes\n * @param {Object[]} response.product.images - Product images\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\n * attributes have been selected. Used partially to\n * determine whether the Add to Cart button can be enabled\n * @param {jQuery} $productContainer - DOM element for a given product.\n */\nfunction handleVariantResponse(response, $productContainer) {\n var isChoiceOfBonusProducts =\n $productContainer.parents(\".choose-bonus-product-dialog\").length > 0;\n var isVaraint;\n if (response.product.variationAttributes) {\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\n isVaraint = response.product.productType === \"variant\";\n if (isChoiceOfBonusProducts && isVaraint) {\n $productContainer.parent(\".bonus-product-item\")\n .data(\"pid\", response.product.id);\n\n $productContainer.parent(\".bonus-product-item\")\n .data(\"ready-to-order\", response.product.readyToOrder);\n }\n }\n\n // Update product images\n updateProductImages(response, $productContainer);\n\n // Update pricing\n if (!isChoiceOfBonusProducts) {\n var $priceSelector = $(\".prices .price\", $productContainer).length\n ? $(\".prices .price\", $productContainer)\n : $(\".prices .price\");\n $priceSelector.each(function () {\n $(this).find(\".sales\").find(\".synchrony-price-widget\").text(response.product.price.sales.decimalPrice);\n $(this).find(\".sales\").find(\".value\").text(response.product.price.sales.pdpTileFormat).attr(\"content\", response.product.price.sales.decimalPrice);\n $(this).find(\".list\").find(\".synchrony-price-widget\").text(response.product.price.list.decimalPrice);\n $(this).find(\".list\").find(\".value\").text(response.product.price.list.pdpTileFormat).attr(\"content\", response.product.price.list.decimalPrice);\n\n if (response.product.price && response.product.price.sales && response.product.price.list\n && response.product.price.sales.decimalPrice && response.product.price.list.decimalPrice)\n {\n var salesPriceFloat = parseFloat(response.product.price.sales.decimalPrice);\n var listPriceFloat = parseFloat(response.product.price.list.decimalPrice);\n if (salesPriceFloat < listPriceFloat) {\n $(this).find(\".list\").removeClass(\"d-none\");\n } else {\n $(this).find(\".list\").addClass(\"d-none\");\n }\n }\n });\n calculateSavings();\n }\n\n // Update promotions\n $productContainer.find(\".promotions\").empty().html(response.product.promotionsHtml);\n\n updateAvailability(response, $productContainer);\n updateWishlist(response, $productContainer);\n\n if (isChoiceOfBonusProducts) {\n var $selectButton = $productContainer.find(\".select-bonus-product\");\n $selectButton.trigger(\"bonusproduct:updateSelectButton\", {\n product: response.product, $productContainer: $productContainer\n });\n } else {\n // Enable \"Add to Cart\" button if all required attributes have been selected\n $(\"button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global, button.add-to-gift-registry, button.add-to-gift-registry-drive-customizer\").trigger(\"product:updateAddToCart\", {\n product: response.product, $productContainer: $productContainer\n }).trigger(\"product:statusUpdate\", {\n product: response.product, $productContainer: $productContainer\n });\n }\n\n // Update attributes\n $productContainer.find(\".main-attributes\").empty()\n .html(getAttributesHtml(response.product.attributes));\n\n updateShippingMessage(response);\n}\n\n/**\n * @typespec UpdatedQuantity\n * @type Object\n * @property {boolean} selected - Whether the quantity has been selected\n * @property {string} value - The number of products to purchase\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\n * etc.\n */\n\n/**\n * Updates the quantity DOM elements post Ajax call\n * @param {UpdatedQuantity[]} quantities -\n * @param {jQuery} $productContainer - DOM container for a given product\n */\nfunction updateQuantities(quantities, $productContainer) {\n if ($productContainer.parent(\".bonus-product-item\").length <= 0) {\n var maxQty = quantities.length < 100 ? quantities.length : \"99\";\n var selectedQty;\n var url;\n\n quantities.forEach(function (quantity) {\n if (quantity.selected) {\n selectedQty = quantity.value;\n url = quantity.url;\n }\n });\n\n var $qtySelector = getQuantitySelector($productContainer);\n\n $qtySelector.data(\"max-qty\", maxQty);\n $qtySelector.data(\"url\", url);\n $qtySelector.val(selectedQty);\n\n var priceSelector = $(\".cart-and-ipay .prices .price .sales .value\", $productContainer).length\n ? $(\".cart-and-ipay .prices .price .sales .value\", $productContainer)\n : $(\".cart-and-ipay .prices .price .sales .value\");\n var price = Math.round($(priceSelector[0]).text().replace(/[^0-9.-]+/g, \"\"));\n var finalPrice = price * selectedQty;\n\n priceSelector.text(\"$\" + finalPrice.toFixed(0).replace(/(\\d)(?=(\\d{3})+(?:\\.\\d+)?$)/g, \"$1,\"));\n }\n}\n\n/**\n * updates the product view when a product attribute is selected or deselected or when\n * changing quantity\n * @param {string} selectedValueUrl - the Url for the selected variation value\n * @param {jQuery} $productContainer - DOM element for current product\n */\nfunction attributeSelect(selectedValueUrl, $productContainer) {\n if (selectedValueUrl) {\n var $savingsContainer = $productContainer.find(\".attributes .savings\");\n $(\"body\").trigger(\"product:beforeAttributeSelect\",\n { url: selectedValueUrl, container: $productContainer });\n\n $.ajax({\n url: selectedValueUrl,\n method: \"GET\",\n success: function (data) {\n var displaySavingsMessage = data.displaySavingsMessage;\n $savingsContainer.data(\"savings-message\", displaySavingsMessage);\n handleVariantResponse(data, $productContainer);\n updateOptions(data.product.optionsHtml, $productContainer);\n updateQuantities(data.product.quantities, $productContainer);\n $(\"body\").trigger(\"product:afterAttributeSelect\",\n { data: data, container: $productContainer });\n gtm.updateGTM(data, $productContainer);\n $(\"body\").trigger(\"pixel:updateAddToCartSku\", data);\n $(\"body\").trigger(\"pinterest:updateAddToCartData\", data);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @return {string} - The provided URL to use when adding a product to the cart\n */\nfunction getAddToCartUrl() {\n return $(\".add-to-cart-url\").val();\n}\n\n/**\n * Parses the html for a modal window\n * @param {string} html - representing the body and footer of the modal window\n *\n * @return {Object} - Object with properties body and footer.\n */\nfunction parseHtml(html) {\n var $html = $(\"<div>\").append($.parseHTML(html));\n\n var body = $html.find(\".choice-of-bonus-product\");\n var footer = $html.find(\".modal-footer\").children();\n\n return { body: body, footer: footer };\n}\n\n/**\n * Retrieves url to use when adding a product to the cart\n *\n * @param {Object} data - data object used to fill in dynamic portions of the html\n */\nfunction chooseBonusProducts(data) {\n $(\".modal-body\").spinner().start();\n\n if ($(\"#chooseBonusProductModal\").length !== 0) {\n $(\"#chooseBonusProductModal\").remove();\n }\n var bonusUrl;\n if (data.bonusChoiceRuleBased) {\n bonusUrl = data.showProductsUrlRuleBased;\n } else {\n bonusUrl = data.showProductsUrlListBased;\n }\n\n var htmlString = \"<!-- Modal -->\"\n + \"<div class='modal fade' id='chooseBonusProductModal' tabindex='-1' role='dialog'>\"\n + \"<span class='enter-message sr-only' ></span>\"\n + \"<div class='modal-dialog choose-bonus-product-dialog' \"\n + \"data-total-qty='\" + data.maxBonusItems + \"'\"\n + \"data-UUID='\" + data.uuid + \"'\"\n + \"data-pliUUID='\" + data.pliUUID + \"'\"\n + \"data-addToCartUrl='\" + data.addToCartUrl + \"'\"\n + \"data-pageStart='0'\"\n + \"data-pageSize='\" + data.pageSize + \"'\"\n + \"data-moreURL='\" + data.showProductsUrlRuleBased + \"'\"\n + \"data-bonusChoiceRuleBased='\" + data.bonusChoiceRuleBased + \"'>\"\n + \"<!-- Modal content-->\"\n + \"<div class='modal-content'>\"\n + \"<div class='modal-header'>\"\n + \" <span class=''>\" + data.labels.selectprods + \"</span>\"\n + \" <button type='button' class='close pull-right' data-dismiss='modal'>\"\n + \" <span aria-hidden='true'>×</span>\"\n + \" <span class='sr-only'> </span>\"\n + \" </button>\"\n + \"</div>\"\n + \"<div class='modal-body'></div>\"\n + \"<div class='modal-footer'></div>\"\n + \"</div>\"\n + \"</div>\"\n + \"</div>\";\n $(\"body\").append(htmlString);\n $(\".modal-body\").spinner().start();\n\n $.ajax({\n url: bonusUrl,\n method: \"GET\",\n dataType: \"json\",\n success: function (response) {\n var parsedHtml = parseHtml(response.renderedTemplate);\n $(\"#chooseBonusProductModal .modal-body\").empty();\n $(\"#chooseBonusProductModal .enter-message\").text(response.enterDialogMessage);\n $(\"#chooseBonusProductModal .modal-header .close .sr-only\").text(response.closeButtonText);\n $(\"#chooseBonusProductModal .modal-body\").html(parsedHtml.body);\n $(\"#chooseBonusProductModal .modal-footer\").html(parsedHtml.footer);\n $(\"#chooseBonusProductModal\").modal(\"show\");\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\n * @param {string} response - ajax response from clicking the add to cart button\n */\nfunction handlePostCartAdd(response) {\n $(\".minicart\").trigger(\"count:update\", response);\n var messageType = response.error ? \"alert-danger\" : \"alert-success\";\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n if ($(\".add-to-cart-messages\").length === 0) {\n $(\"body\").append(\n \"<div class='add-to-cart-messages'></div>\"\n );\n }\n\n $(\".add-to-cart-messages\").append(\n \"<div class='alert \" + messageType + \" add-to-basket-alert text-center' role='alert'>\"\n + response.message\n + \"</div>\"\n );\n\n setTimeout(function () {\n $(\".add-to-basket-alert\").remove();\n }, 5000);\n }\n}\n\n/**\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\n * items with their selected variants\n *\n * @return {string[]} - List of selected bundle product item ID's\n */\nfunction getChildProducts() {\n var childProducts = [];\n $(\".bundle-item\").each(function () {\n childProducts.push({\n pid: $(this).find(\".product-id\").text(),\n quantity: parseInt($(this).find(\"label.quantity\").data(\"quantity\"), 10)\n });\n });\n\n return childProducts.length ? JSON.stringify(childProducts) : [];\n}\n\n/**\n * Retrieve product options\n *\n * @param {jQuery} $productContainer - DOM element for current product\n * @return {string} - Product options and their selected values\n */\nfunction getOptions($productContainer) {\n var options = $productContainer\n .find(\".product-option\")\n .map(function () {\n var $elOption = $(this).find(\".options-select\");\n var urlValue = $elOption.val();\n var selectedValueId = $elOption.find(\"option[value='\" + urlValue + \"']\")\n .data(\"value-id\");\n return {\n optionId: $(this).data(\"option-id\"),\n selectedValueId: selectedValueId\n };\n }).toArray();\n\n return JSON.stringify(options);\n}\n\n/**\n * Makes a call to the server to report the event of adding an item to the cart\n *\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\n */\nfunction miniCartReportingUrl(url) {\n if (url) {\n $.ajax({\n url: url,\n method: \"GET\",\n success: function () {\n // reporting urls hit on the server\n },\n error: function () {\n // no reporting urls hit on the server\n }\n });\n }\n}\n\n/**\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Edit\" button\n * @param {string} response - ajax response from clicking the edit cart item button\n */\nfunction handleEditCartItem(response) {\n $(\".minicart\").trigger(\"count:update\", response);\n var messageType = response.error ? \"alert-danger\" : \"alert-success\";\n // show add to cart toast\n if (response.newBonusDiscountLineItem\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\n chooseBonusProducts(response.newBonusDiscountLineItem);\n } else {\n if ($(\".add-to-cart-messages\").length === 0) {\n $(\"body\").append(\n \"<div class='add-to-cart-messages'></div>\"\n );\n }\n\n $(\".add-to-cart-messages\").append(\n \"<div class='alert \" + messageType + \" add-to-basket-alert text-center' role='alert'>\"\n + response.message\n + \"</div>\"\n );\n\n setTimeout(function () {\n $(\".add-to-basket-alert\").remove();\n }, 5000);\n }\n}\n\nmodule.exports = {\n attributeSelect: attributeSelect,\n methods: {\n editBonusProducts: function (data) {\n chooseBonusProducts(data);\n },\n calculateSavings: calculateSavings,\n updateProductImages: updateProductImages,\n handlePostCartAdd: handlePostCartAdd,\n updateShippingMessage: updateShippingMessage\n },\n\n focusChooseBonusProductModal: function () {\n $(\"body\").on(\"shown.bs.modal\", \"#chooseBonusProductModal\", function () {\n $(\"#chooseBonusProductModal\").siblings().attr(\"aria-hidden\", \"true\");\n $(\"#chooseBonusProductModal .close\").focus();\n });\n },\n\n onClosingChooseBonusProductModal: function () {\n $(\"body\").on(\"hidden.bs.modal\", \"#chooseBonusProductModal\", function () {\n $(\"#chooseBonusProductModal\").siblings().attr(\"aria-hidden\", \"false\");\n });\n },\n\n trapChooseBonusProductModalFocus: function () {\n $(\"body\").on(\"keydown\", \"#chooseBonusProductModal\", function (e) {\n var focusParams = {\n event: e,\n containerSelector: \"#chooseBonusProductModal\",\n firstElementSelector: \".close\",\n lastElementSelector: \".add-bonus-products\"\n };\n focusHelper.setTabNextFocus(focusParams);\n });\n },\n\n colorAttribute: function () {\n $(document).on(\"click\", \".attribute .card-body button:not(.material-details-modal-button):not(.add-to-cart--workroom)\", function (e) {\n e.preventDefault();\n\n if ($(this).attr(\"disabled\")) {\n return;\n }\n var $productContainer = $(this).closest(\".set-item\");\n if (!$productContainer.length) {\n $productContainer = $(this).closest(\".product-detail\");\n }\n\n attributeSelect($(this).attr(\"data-url\"), $productContainer);\n });\n },\n\n tabAttribute: function () {\n $(document).on(\"show.bs.tab\", \".nav-attribute\", function () {\n var $productContainer = $(this).closest(\".set-item\");\n if (!$productContainer.length) {\n $productContainer = $(this).closest(\".product-detail\");\n }\n\n var resetAttributeName = $(this).attr(\"data-reset-attribute-name\");\n var concatString = \"&resetAttributeName=\" + resetAttributeName;\n\n var url = $(this).attr(\"data-url\").concat(concatString);\n\n attributeSelect(url, $productContainer);\n });\n },\n\n selectAttribute: function () {\n $(document).on(\"change\", \".options-select\", function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest(\".set-item\");\n if (!$productContainer.length) {\n $productContainer = $(this).closest(\".product-detail\");\n }\n attributeSelect(e.currentTarget.value, $productContainer);\n });\n },\n\n availability: function () {\n $(document).on(\"click\", \".product-detail .btn-change-quantity\", function (e) {\n e.preventDefault();\n\n var $productContainer = $(this).closest(\".product-detail\");\n if (!$productContainer.length) {\n $productContainer = $(this).closest(\".modal-content\").find(\".product-quickview\");\n }\n\n var $qtySelector = getQuantitySelector($productContainer);\n var currentValue = $qtySelector.val();\n var maxValue = $qtySelector.data(\"max-qty\");\n var oldUrl = $qtySelector.data(\"url\");\n var withoutQty = oldUrl.split(\"&quantity=\")[0];\n var newValue = +currentValue;\n if ($(this).hasClass(\"btn-increase-quantity\") && maxValue < 100 && maxValue > currentValue) {\n newValue += 1;\n }\n if ($(this).hasClass(\"btn-decrease-quantity\") && currentValue > 1) {\n newValue -= 1;\n }\n if ($(this).hasClass(\"btn-decrease-quantity\") && currentValue == 1) {\n return;\n }\n if (newValue == 1) {\n $(this).closest(\".product-detail\").find(\".btn-decrease-quantity\").addClass(\"disabled\");\n } else {\n $(this).closest(\".product-detail\").find(\".btn-decrease-quantity\").removeClass(\"disabled\");\n }\n $qtySelector.val(newValue);\n var url = withoutQty + \"&quantity=\" + newValue;\n $qtySelector.data(\"url\", url);\n attributeSelect($qtySelector.data(\"url\"),\n $productContainer);\n });\n },\n\n addToCart: function () {\n $(document).on(\"click\", \"button.add-to-cart, button.add-to-cart-global\", function () {\n var addToCartUrl;\n var pid;\n var pidsObj;\n var setPids;\n\n $(\"body\").trigger(\"product:beforeAddToCart\", this);\n\n var addToCartContainer = $(this).closest(\".cart-and-ipay\").find(\".gtm-add-to-cart-container\");\n var gtmAddToCartObj = addToCartContainer.find(\".gtm-add-to-cart\").attr(\"data-gtm-add-to-cart\");\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"add_to_cart\",\n data: JSON.parse(gtmAddToCartObj)\n });\n\n var fbqPixelPID = $(\".pixel-add-to-cart\").data(\"pixel-add-to-cart-pid\");\n if (!fbqPixelPID) {\n fbqPixelPID = $(this).data(\"pid\");\n }\n var addToCartObj = {\n content_type: \"product_group\",\n content_ids: [fbqPixelPID]\n };\n $(\"body\").trigger(\"pixel:trackEvent\", {\n event: \"AddToCart\",\n data: addToCartObj\n });\n\n var pintrestAddToCartObj = $(\".pinterest-add-to-cart\").data(\"pinterest-add-to-cart\");\n $(\"body\").trigger(\"pinterest:trackEvent\", {\n event: \"addtocart\",\n data: pintrestAddToCartObj\n });\n\n if ($(\".set-items\").length && $(this).hasClass(\"add-to-cart-global\")) {\n setPids = [];\n\n $(\".product-detail\").each(function () {\n if (!$(this).hasClass(\"product-set-detail\")) {\n setPids.push({\n pid: $(this).find(\".product-id\").text(),\n qty: $(this).find(\".quantity-select\").val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n\n var $productContainer = $(this).closest(\".product-detail\");\n if (!$productContainer.length) {\n $productContainer = $(this).closest(\".quick-view-dialog\").find(\".product-detail\");\n }\n\n addToCartUrl = getAddToCartUrl();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this))\n };\n\n if (!$(\".bundle-item\").length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger(\"updateAddToCartFormData\", form);\n if (addToCartUrl) {\n $.ajax({\n url: addToCartUrl,\n method: \"POST\",\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $(\"body\").trigger(\"product:afterAddToCart\", data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n },\n\n selectBonusProduct: function () {\n $(document).on(\"click\", \".select-bonus-product\", function () {\n var $choiceOfBonusProduct = $(this).parents(\".choice-of-bonus-product\");\n var pid = $(this).data(\"pid\");\n var maxPids = $(\".choose-bonus-product-dialog\").data(\"total-qty\");\n var submittedQty = parseInt($choiceOfBonusProduct.find(\".bonus-quantity-select\").val(), 10);\n var totalQty = 0;\n $.each($(\"#chooseBonusProductModal .selected-bonus-products .selected-pid\"), function () {\n totalQty += $(this).data(\"qty\");\n });\n totalQty += submittedQty;\n var optionID = $choiceOfBonusProduct.find(\".product-option\").data(\"option-id\");\n var valueId = $choiceOfBonusProduct.find(\".options-select option:selected\").data(\"valueId\");\n if (totalQty <= maxPids) {\n var selectedBonusProductHtml = \"\"\n + \"<div class='selected-pid row' \"\n + \"data-pid='\" + pid + \"'\"\n + \"data-qty='\" + submittedQty + \"'\"\n + \"data-optionID='\" + (optionID || \"\") + \"'\"\n + \"data-option-selected-value='\" + (valueId || \"\") + \"'\"\n + \">\"\n + \"<div class='col-sm-11 col-9 bonus-product-name' >\"\n + $choiceOfBonusProduct.find(\".product-name\").html()\n + \"</div>\"\n + \"<div class='col-1'><i class='fa fa-times' aria-hidden='true'></i></div>\"\n + \"</div>\"\n ;\n $(\"#chooseBonusProductModal .selected-bonus-products\").append(selectedBonusProductHtml);\n $(\".pre-cart-products\").html(totalQty);\n $(\".selected-bonus-products .bonus-summary\").removeClass(\"alert-danger\");\n } else {\n $(\".selected-bonus-products .bonus-summary\").addClass(\"alert-danger\");\n }\n });\n },\n\n removeBonusProduct: function () {\n $(document).on(\"click\", \".selected-pid\", function () {\n $(this).remove();\n var $selected = $(\"#chooseBonusProductModal .selected-bonus-products .selected-pid\");\n var count = 0;\n if ($selected.length) {\n $selected.each(function () {\n count += parseInt($(this).data(\"qty\"), 10);\n });\n }\n\n $(\".pre-cart-products\").html(count);\n $(\".selected-bonus-products .bonus-summary\").removeClass(\"alert-danger\");\n });\n },\n\n enableBonusProductSelection: function () {\n $(\"body\").on(\"bonusproduct:updateSelectButton\", function (e, response) {\n $(\"button.select-bonus-product\", response.$productContainer).attr(\"disabled\",\n (!response.product.readyToOrder || !response.product.available));\n var pid = response.product.id;\n $(\"button.select-bonus-product\", response.$productContainer).data(\"pid\", pid);\n });\n },\n\n showMoreBonusProducts: function () {\n $(document).on(\"click\", \".show-more-bonus-products\", function () {\n var url = $(this).data(\"url\");\n $(\".modal-content\").spinner().start();\n $.ajax({\n url: url,\n method: \"GET\",\n success: function (html) {\n var parsedHtml = parseHtml(html);\n $(\".modal-body\").append(parsedHtml.body);\n $(\".show-more-bonus-products:first\").remove();\n $(\".modal-content\").spinner().stop();\n },\n error: function () {\n $(\".modal-content\").spinner().stop();\n }\n });\n });\n },\n\n addBonusProductsToCart: function () {\n $(document).on(\"click\", \".add-bonus-products\", function () {\n var $readyToOrderBonusProducts = $(\".choose-bonus-product-dialog .selected-pid\");\n var queryString = \"?pids=\";\n var url = $(\".choose-bonus-product-dialog\").data(\"addtocarturl\");\n var pidsObject = {\n bonusProducts: []\n };\n\n $.each($readyToOrderBonusProducts, function () {\n var qtyOption =\n parseInt($(this)\n .data(\"qty\"), 10);\n\n var option = null;\n if (qtyOption > 0) {\n if ($(this).data(\"optionid\") && $(this).data(\"option-selected-value\")) {\n option = {};\n option.optionId = $(this).data(\"optionid\");\n option.productId = $(this).data(\"pid\");\n option.selectedValueId = $(this).data(\"option-selected-value\");\n }\n pidsObject.bonusProducts.push({\n pid: $(this).data(\"pid\"),\n qty: qtyOption,\n options: [option]\n });\n pidsObject.totalQty = parseInt($(\".pre-cart-products\").html(), 10);\n }\n });\n queryString += JSON.stringify(pidsObject);\n queryString = queryString + \"&uuid=\" + $(\".choose-bonus-product-dialog\").data(\"uuid\");\n queryString = queryString + \"&pliuuid=\" + $(\".choose-bonus-product-dialog\").data(\"pliuuid\");\n $.spinner().start();\n $.ajax({\n url: url + queryString,\n method: \"POST\",\n success: function (data) {\n $.spinner().stop();\n if (data.error) {\n $(\"#chooseBonusProductModal\").modal(\"hide\");\n if ($(\".add-to-cart-messages\").length === 0) {\n $(\"body\").append(\"<div class='add-to-cart-messages'></div>\");\n }\n $(\".add-to-cart-messages\").append(\n \"<div class='alert alert-danger add-to-basket-alert text-center'\"\n + \" role='alert'>\"\n + data.errorMessage + \"</div>\"\n );\n setTimeout(function () {\n $(\".add-to-basket-alert\").remove();\n }, 3000);\n } else {\n $(\".configure-bonus-product-attributes\").html(data);\n $(\".bonus-products-step2\").removeClass(\"hidden-xl-down\");\n $(\"#chooseBonusProductModal\").modal(\"hide\");\n\n if ($(\".add-to-cart-messages\").length === 0) {\n $(\"body\").append(\"<div class='add-to-cart-messages'></div>\");\n }\n $(\".minicart-quantity\").html(data.totalQty);\n $(\".add-to-cart-messages\").append(\n \"<div class='alert alert-success add-to-basket-alert text-center'\"\n + \" role='alert'>\"\n + data.msgSuccess + \"</div>\"\n );\n setTimeout(function () {\n $(\".add-to-basket-alert\").remove();\n if ($(\".cart-page\").length) {\n location.reload(); // eslint-disable-line\n }\n }, 1500);\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n },\n\n editCartItem: function () {\n $(document).on(\"click\", \"button.edit-cart-item\", function () {\n var editCartItemURL;\n var pid;\n var pidsObj;\n var setPids;\n var uuid;\n\n $(\"body\").trigger(\"product:beforeEditCartItem\", this);\n\n if ($(\".set-items\").length && $(this).hasClass(\"add-to-cart-global\")) {\n setPids = [];\n\n $(\".product-detail\").each(function () {\n if (!$(this).hasClass(\"product-set-detail\")) {\n setPids.push({\n pid: $(this).find(\".product-id\").text(),\n qty: $(this).find(\".quantity-select\").val(),\n options: getOptions($(this))\n });\n }\n });\n pidsObj = JSON.stringify(setPids);\n }\n\n pid = getPidValue($(this));\n uuid = $(\".edit-cart-item\").data(\"uuid\");\n\n var $productContainer = $(this).closest(\".product-detail\");\n if (!$productContainer.length) {\n $productContainer = $(this).closest(\".quick-view-dialog\").find(\".product-detail\");\n }\n\n editCartItemURL = $(\".edit-cart-item-url\").val();\n\n var form = {\n pid: pid,\n pidsObj: pidsObj,\n childProducts: getChildProducts(),\n quantity: getQuantitySelected($(this)),\n uuid: uuid\n };\n\n if (!$(\".bundle-item\").length) {\n form.options = getOptions($productContainer);\n }\n\n $(this).trigger(\"updateEditCartItemFormData\", form);\n if (editCartItemURL) {\n $.ajax({\n url: editCartItemURL,\n method: \"POST\",\n data: form,\n success: function (data) {\n handleEditCartItem(data);\n $(\"body\").trigger(\"product:afterEditCartItem\", data);\n $.spinner().stop();\n miniCartReportingUrl(data.reportingURL);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n\n });\n },\n\n getPidValue: getPidValue,\n getQuantitySelected: getQuantitySelected,\n miniCartReportingUrl: miniCartReportingUrl\n};\n","var base = require(\"../product/base\");\nvar commonFeature = require(\"../components/commonFeature\");\nvar $window = $(window);\nconst debounce = require(\"lodash/debounce\");\nvar saveForLaterList = require(\"../product/saveForLaterList\");\nconst wishlist = require(\"../product/wishlistHeart\");\n\n/**\n * appends params to a url\n * @param {string} url - Original url\n * @param {Object} params - Parameters to append\n * @returns {string} result url with appended parameters\n */\nfunction appendToUrl(url, params) {\n var newUrl = url;\n newUrl +=\n (newUrl.indexOf(\"?\") !== -1 ? \"&\" : \"?\") +\n Object.keys(params)\n .map(function (key) {\n return key + \"=\" + encodeURIComponent(params[key]);\n })\n .join(\"&\");\n\n return newUrl;\n}\n\n/**\n * Checks whether the basket is valid. if invalid displays error message and disables\n * checkout button\n * @param {Object} data - AJAX response from the server\n */\nfunction validateBasket(data) {\n if (data.valid.error) {\n if (data.valid.message) {\n var errorHtml =\n \"<div class='alert alert-danger alert-dismissible valid-cart-error \" +\n \"fade show' role='alert'>\" +\n \"<button type='button' class='close' data-dismiss='alert' aria-label='Close'>\" +\n \"<span aria-hidden='true'>×</span>\" +\n \"</button>\" +\n data.valid.message +\n \"</div>\";\n\n $(\".cart-error\").append(errorHtml);\n } else {\n $(\"<div class='cart-empty'><div class='row'> \" +\n \"<div class='col-12 text-center cart-empty-title'> \" +\n \"<div class='text-h1'>\" +\n data.resources.emptyCartMsg +\n \"</div> \" +\n \"<a class='continue-shopping-link button-primary-dark' href='\" + data.urls.continueShopping + \"' \" +\n \"title='\" + data.urls.continueShoppingLink + \"'>\" +\n data.urls.continueShoppingLink +\n \"</a> \" +\n \"</div> \" +\n \"</div></div>\").insertAfter(\".cart-container-header\");\n $(\".cart-wrapper\").addClass(\"is-empty-cart\").find(\".cart-sidebar-background\").remove();\n $(\".cart-wrapper\").find(\".cart-page-row\").removeClass(\"col-md-9\").addClass(\"col-12\");\n $(\".cart-wrapper\").find(\".continue-shopping-link__wrapper\").remove();\n $(\".cart-wrapper\").find(\".product-cards-wrapper\").remove();\n $(\".cart-wrapper\").find(\".approaching-discounts\").remove();\n $(\".cart-wrapper\").find(\".sticky-secure-checkout\").remove();\n $(\".cart-wrapper\").find(\".cart-sidebar\").remove();\n $(\".number-of-items\").empty().append(data.resources.numberOfItems);\n $(\".minicart-quantity\").empty().append(data.numItems);\n if (data.numItems > 0) {\n $(\".minicart-quantity\").removeClass(\"d-none\");\n $(\".minicart-link\").removeClass(\"minicart-empty\");\n } else {\n $(\".minicart-quantity\").addClass(\"d-none\");\n $(\".minicart-link\").addClass(\"minicart-empty\");\n }\n $(\".minicart-link\").attr({\n \"aria-label\": data.resources.minicartCountOfItems,\n title: data.resources.minicartCountOfItems\n });\n $(\".minicart .popover\").empty();\n $(\".minicart .popover\").removeClass(\"show\");\n $(\".modal-background\").removeClass(\"d-block\");\n }\n\n $(\".checkout-btn\").addClass(\"disabled\");\n } else if (data.isMaterialQtyExceeded) {\n $(\".checkout-btn\").addClass(\"disabled d-none\");\n $(\".checkout-btn-swatch-error\").removeClass(\"d-none\");\n } else {\n $(\".checkout-btn-swatch-error\").addClass(\"d-none\");\n $(\".checkout-btn\").removeClass(\"disabled d-none\");\n }\n \n}\n\nfunction updateEstimatedDelivery(data, $form) {\n var $estimatedDeliveryTitle = $form.find(\".estimated-delivery-title\");\n if (data.deliveryData && data.deliveryData.zipcode) {\n $form.find(\".cart-estimated-delivery-zipcode-form-group\").addClass(\"d-none\");\n $form.find(\".estimated-delivery-total\").removeClass(\"d-none\");\n\n if (data.deliveryData.isShipmentZip) {\n $form.find(\"button[type='reset']\").addClass(\"d-none\");\n } else {\n $form.find(\"button[type='reset']\").removeClass(\"d-none\");\n }\n\n\n var estimatedDeliveryTitle = $estimatedDeliveryTitle.data(\"estimated-delivery-to-msg\");\n\n if (data.totals) {\n var shippingCost = 0;\n if (data.totals.shippingLevelDiscountTotal.value > 0) {\n shippingCost = data.totals.discountedShippingCost;\n\n if (data.totals.discountedShippingCostVal > 0) {\n estimatedDeliveryTitle = $estimatedDeliveryTitle.data(\"discounted-delivery-msg\");\n } else {\n estimatedDeliveryTitle = $estimatedDeliveryTitle.data(\"free-delivery-msg\");\n }\n } else {\n shippingCost = data.totals.totalShippingCost;\n }\n $form.find(\".estimated-delivery-total\").text(shippingCost);\n }\n\n $estimatedDeliveryTitle.text(estimatedDeliveryTitle + \" \" + data.deliveryData.zipcode);\n } else {\n $form.find(\".invalid-feedback\").hide();\n $form.find(\".cart-estimated-delivery-zipcode-form-group\").removeClass(\"d-none\");\n $form.find(\".estimated-delivery-total\").addClass(\"d-none\");\n $form.find(\"button[type='reset']\").addClass(\"d-none\");\n\n $estimatedDeliveryTitle.text($estimatedDeliveryTitle.data(\"estimated-delivery-msg\"));\n }\n\n if (data.action === \"Cart-UpdateShippingZip\") {\n if (data.deliveryData && !data.deliveryData.deliveryZipCode) {\n $form.find(\".cart-estimated-delivery-zipcode\").addClass(\"nondelivery-zipcode\");\n $form.find(\".estimated-delivery-nondelivery-zipcode-msg\").removeClass(\"d-none\");\n } else {\n $form.find(\".cart-estimated-delivery-zipcode\").removeClass(\"nondelivery-zipcode\");\n $form.find(\".estimated-delivery-nondelivery-zipcode-msg\").addClass(\"d-none\");\n }\n }\n}\n\n/**\n * re-renders the order totals and the number of items in the cart\n * @param {Object} data - AJAX response from the server\n */\nfunction updateCartTotals(data) {\n var affirmLimits = { min: data.affirmPaymentMinTotal, max: data.affirmPaymentMaxTotal };\n $(\".number-of-items\").empty().append(data.resources.numberOfItems);\n if (data.isShippingAddress) {\n $(\".shipping-cost\").empty().append(data.totals.totalShippingCost);\n }\n if (data.isShippingAddress) {\n $(\".tax-total\").empty().append(data.totals.totalTax);\n }\n\n $(\".grand-total-cart\").empty().append(data.totals.estimatedTotal);\n if (data.fullPriceObj.isSales) {\n $(\".sub-total\").empty().append(data.fullPriceObj.formatted);\n $(\".grand-total\").empty().append(data.fullPriceObj.adjustedPrice + \" \");\n } else {\n $(\".grand-total\").empty().append(data.totals.subTotal);\n $(\".sub-total\").empty();\n }\n\n if (data.fullPriceObj.totalSavingsFormatted) {\n $(\".cart-total-savings-value\").empty().append(data.fullPriceObj.totalSavingsFormatted);\n $(\".cart-total-savings\").removeClass(\"d-none\");\n } else {\n $(\".cart-total-savings\").addClass(\"d-none\");\n }\n\n // Affirm\n var totalCalculated = data.totals.grandTotal.substr(1).replace(/,/g, \"\");\n $(\".affirm-as-low-as\").attr(\"data-amount\", (totalCalculated * 100).toFixed());\n var isWithinAffirmLimit =\n parseFloat(totalCalculated) >= parseFloat(affirmLimits.min) &&\n parseFloat(totalCalculated) <= parseFloat(affirmLimits.max);\n if (isWithinAffirmLimit) {\n $(\"#js-affirm-checkout-now\").show();\n } else {\n $(\"#js-affirm-checkout-now\").hide();\n $(\".affirm-as-low-as\").attr(\"data-amount\", NaN);\n }\n\n var affirmenabled = $(\".affirmenabled\").data(\"affirmenabled\");\n\n if (affirmenabled) {\n affirm.ui.refresh();\n }\n\n // Affirm\n $(\".minicart-quantity\").empty().append(data.numItems);\n if (data.numItems > 0) {\n $(\".minicart-quantity\").removeClass(\"d-none\");\n $(\".minicart-link\").removeClass(\"minicart-empty\");\n } else {\n $(\".minicart-quantity\").addClass(\"d-none\");\n $(\".minicart-link\").addClass(\"minicart-empty\");\n }\n $(\".minicart-link\").attr({\n \"aria-label\": data.resources.minicartCountOfItems,\n title: data.resources.minicartCountOfItems\n });\n if (data.idmeDiscountObj.orderDiscountWithoutIDME > 0) {\n $(\".order-discount-total\")\n .empty()\n .append(\"- \" + data.idmeDiscountObj.orderDiscountWithoutIDMEFormatted);\n $(\".order-discount\").removeClass(\"d-none\");\n $(\".order-discount\").addClass(\"d-flex\");\n } else {\n $(\".order-discount\").removeClass(\"d-flex\");\n $(\".order-discount\").addClass(\"d-none\");\n $(\".order-discount-total\")\n .empty()\n .append(data.totals.orderLevelDiscountTotal.formatted);\n }\n\n // Synchrony\n var $synchronyCartPrice = $(\".synchrony-widget-cart-price\");\n if ($synchronyCartPrice) {\n $synchronyCartPrice.text(data.totals.estimatedTotal);\n }\n\n if (data.totals.shippingLevelDiscountTotal.value > 0) {\n $(\".shipping-discount\").removeClass(\"hide-shipping-discount\");\n $(\".shipping-discount-total\")\n .empty()\n .append(\"- \" + data.totals.shippingLevelDiscountTotal.formatted);\n } else {\n $(\".shipping-discount\").addClass(\"hide-shipping-discount\");\n }\n\n if (data.idmeDiscountObj) {\n if (data.idmeDiscountObj.orderDiscount < 0) {\n $(\".idme-section .idme-discount-total\").text(data.idmeDiscountObj.orderDiscountFormatted).removeClass(\"d-none\");\n $(\".idme-section .idme-discount-applied\").addClass(\"d-none\");\n } else {\n $(\".idme-section .idme-discount-total\").empty().addClass(\"d-none\");\n $(\".idme-section .idme-discount-applied\").removeClass(\"d-none\");\n }\n }\n\n data.items.forEach(function (item) {\n if (data.totals.orderLevelDiscountTotal.value > 0) {\n $(\".coupons-and-promos\").empty().append(data.totals.discountsHtml);\n }\n if (item.renderedPromotions) {\n $(\".item-\" + item.UUID)\n .empty()\n .append(item.renderedPromotions);\n } else {\n $(\".item-\" + item.UUID).empty();\n }\n\n $(\".item-total-\" + item.UUID)\n .empty()\n .append(item.priceTotal.renderedPrice);\n\n $(\".line-item-price-\" + item.UUID + \" .unit-price\")\n .empty()\n .append(item.renderedPrice);\n });\n\n updateEstimatedDelivery(data, $(\"form.estimated-delivery\"));\n}\n\n/**\n * re-renders the order totals and the number of items in the cart\n * @param {Object} message - Error message to display\n */\nfunction createErrorNotification(message) {\n var errorHtml =\n \"<div class='alert alert-danger alert-dismissible valid-cart-error \" +\n \"fade show' role='alert'>\" +\n \"<button type='button' class='close' data-dismiss='alert' aria-label='Close'>\" +\n \"<span aria-hidden='true'>×</span>\" +\n \"</button>\" +\n message +\n \"</div>\";\n\n $(\".cart-error\").append(errorHtml);\n}\n\n/**\n * re-renders the approaching discount messages\n * @param {Object} approachingDiscounts - updated approaching discounts for the cart\n */\nfunction updateApproachingDiscounts(approachingDiscounts) {\n var html = \"\";\n $(\".approaching-discounts\").empty();\n if (approachingDiscounts.length > 0) {\n approachingDiscounts.forEach(function (item) {\n html += \"<div class='single-approaching-discount text-center'>\" + item.discountMsg + \"</div>\";\n });\n }\n $(\".approaching-discounts\").append(html);\n}\n\n/**\n * Updates the availability of a product line item\n * @param {Object} data - AJAX response from the server\n * @param {string} uuid - The uuid of the product line item to update\n */\nfunction updateAvailability(data, uuid) {\n var lineItem;\n var messages = \"\";\n\n for (var i = 0; i < data.items.length; i++) {\n if (data.items[i].UUID === uuid) {\n lineItem = data.items[i];\n break;\n }\n }\n\n if (lineItem != null) {\n $(\".availability-\" + lineItem.UUID).empty();\n\n if (lineItem.availability) {\n if (lineItem.availability.messages) {\n lineItem.availability.messages.forEach(function (message) {\n messages += \"<p class='line-item-attributes'>\" + message + \"</p>\";\n });\n }\n\n if (lineItem.availability.inStockDate) {\n messages +=\n \"<p class='line-item-attributes line-item-instock-date'>\" +\n lineItem.availability.inStockDate +\n \"</p>\";\n }\n }\n\n $(\".availability-\" + lineItem.UUID).html(messages);\n }\n}\n\n/**\n * Updates details of a product line item\n * @param {Object} data - AJAX response from the server\n * @param {string} uuid - The uuid of the product line item to update\n */\nfunction updateProductDetails(data, uuid) {\n $(\".card.product-info.uuid-\" + uuid).replaceWith(data.renderedTemplate);\n}\n\n/**\n * replace content of modal\n * @param {string} actionUrl - url to be used to remove product\n * @param {string} productID - pid\n * @param {string} productName - product name\n * @param {string} uuid - uuid\n */\nfunction confirmDelete(actionUrl, productID, productName, uuid) {\n var $deleteConfirmBtn = $(\".cart-delete-confirmation-btn\");\n var $productToRemoveSpan = $(\".product-to-remove\");\n\n $deleteConfirmBtn.data(\"pid\", productID);\n $deleteConfirmBtn.data(\"action\", actionUrl);\n $deleteConfirmBtn.data(\"uuid\", uuid);\n\n $productToRemoveSpan.empty().append(productName);\n}\n\n/**\n * ajax request for remove item from cart\n * @param {string} url - url to be used to remove product\n */\nfunction handleRemoveItemsAjax(url, uuid) {\n $.ajax({\n url: url,\n type: \"get\",\n dataType: \"json\",\n success: function (data) {\n if (data && \"emptySaveForLaterListMsg\" in data && !(\"basket\" in data)) {\n $(\".row.cart-product__wrapper.uuid-\" + uuid + \" + .cart-save-for-later-line\").remove();\n $(\".row.cart-product__wrapper.uuid-\" + uuid).remove();\n\n if ($(\".cart-save-for-later-container .row.cart-product__wrapper\").length == 0) {\n $(\".cart__save-for-later\").remove();\n }\n } else {\n if (data.basket.items.length === 0) {\n $(\"<div class='cart-empty'><div class='row'> \" +\n \"<div class='col-12 text-center cart-empty-title'> \" +\n \"<div class='text-h1'>\" +\n data.basket.resources.emptyCartMsg +\n \"</div> \" +\n \"<a class='continue-shopping-link button-primary-dark' href='\" + data.basket.urls.continueShopping + \"' \" +\n \"title='\" + data.basket.urls.continueShoppingLink + \"'>\" +\n data.basket.urls.continueShoppingLink +\n \"</a> \" +\n \"</div> \" +\n \"</div></div>\").insertAfter(\".cart-container-header\");\n $(\".cart-wrapper\").addClass(\"is-empty-cart\").find(\".cart-sidebar-background\").remove();\n $(\".cart-wrapper\").find(\".cart-page-row\").removeClass(\"col-md-9\").addClass(\"col-12\");\n $(\".cart-wrapper\").find(\".continue-shopping-link__wrapper\").remove();\n $(\".cart-wrapper\").find(\".product-cards-wrapper\").remove();\n $(\".cart-wrapper\").find(\".approaching-discounts\").remove();\n $(\".cart-wrapper\").find(\".sticky-secure-checkout\").remove();\n $(\".cart-wrapper\").find(\".cart-sidebar\").remove();\n $(\".number-of-items\").empty().append(data.basket.resources.numberOfItems);\n $(\".minicart-quantity\").empty().append(data.basket.numItems);\n if (data.basket.numItems > 0) {\n $(\".minicart-quantity\").removeClass(\"d-none\");\n $(\".minicart-link\").removeClass(\"minicart-empty\");\n } else {\n $(\".minicart-quantity\").addClass(\"d-none\");\n $(\".minicart-link\").addClass(\"minicart-empty\");\n }\n $(\".minicart-link\").attr({\n \"aria-label\": data.basket.resources.minicartCountOfItems,\n title: data.basket.resources.minicartCountOfItems\n });\n $(\".minicart .popover\").empty();\n $(\".minicart .popover\").removeClass(\"show\");\n $(\".modal-background\").removeClass(\"d-block\");\n $(\"body\").removeClass(\"modal-open\");\n $(\"html\").removeClass(\"veiled\");\n } else {\n if (data.toBeDeletedUUIDs && data.toBeDeletedUUIDs.length > 0) {\n for (var i = 0; i < data.toBeDeletedUUIDs.length; i++) {\n $(\".uuid-\" + data.toBeDeletedUUIDs[i]).remove();\n }\n }\n if (uuid) {\n $(\".uuid-\" + uuid).remove();\n }\n if (!data.basket.hasBonusProduct) {\n $(\".bonus-product\").remove();\n }\n $(\".coupons-and-promos\").empty().append(data.basket.totals.discountsHtml);\n updateCartTotals(data.basket);\n updateApproachingDiscounts(data.basket.approachingDiscounts);\n $(\"body\").trigger(\"setShippingMethodSelection\", data.basket);\n validateBasket(data.basket);\n }\n\n if (!data.removeUnavailableItems) {\n $(\".remove-unavailable-items\").remove();\n }\n\n if (!data.isMaterialQtyExceeded) {\n $(\".remove-material-items\").addClass(\"d-none\");\n $(\".checkout-btn\").removeClass(\"disabled\");\n } else {\n $(\".remove-material-items\").removeClass(\"d-none\");\n $(\".checkout-btn\").addClass(\"disabled\");\n }\n\n $(\"body\").trigger(\"cart:update\", data);\n }\n setTimeout(function () {\n window.location.reload();\n }, 500);\n $.spinner().stop();\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification(err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n}\n\n/**\n * set paraments for item move from cart to wishlist\n * @param {Object} data - data object with properties to be stored on confirm modal\n */\nfunction confirmMoveWishlist(data) {\n var $wishlistConfirmBtn = $(\".move-to-wishlist-confirmation\");\n var $productToRemoveSpan = $(\".product-to-remove\");\n\n var urlParams = {\n pid: data.productID,\n uuid: data.uuid\n };\n\n var removeFromCart = appendToUrl(data.removeFromCartUrl, urlParams);\n\n $wishlistConfirmBtn.data(\"pid\", data.productID);\n $wishlistConfirmBtn.data(\"action\", removeFromCart);\n $wishlistConfirmBtn.data(\"uuid\", data.uuid);\n $wishlistConfirmBtn.data(\"url\", data.addToWishlistUrl);\n $wishlistConfirmBtn.data(\"recipeId\", data.recipeId);\n $wishlistConfirmBtn.data(\"recipeLocation\", data.recipeLocation);\n $wishlistConfirmBtn.data(\"listType\", data.listType);\n $wishlistConfirmBtn.data(\"bundleParentSku\", data.bundleParentSKU);\n $wishlistConfirmBtn.data(\"bundleParentName\", data.bundleParentName);\n\n $productToRemoveSpan.empty().append(data.productName);\n}\n\n/**\n * show sticky checkout button on mobile\n */\nfunction handleStickyCta() {\n var $stickyBar = $(\".sticky-secure-checkout\");\n var $checkoutBtn= $(\".checkout-btn__wrapper\");\n\n if (!$checkoutBtn || !$checkoutBtn.length || !$stickyBar || !$stickyBar.length) {\n return;\n }\n\n if (commonFeature.isInViewport($checkoutBtn, true)) {\n $stickyBar.removeClass(\"fixedbottom\");\n } else {\n $stickyBar.addClass(\"fixedbottom\");\n }\n}\n\n/**\n * ajax request for remove item from Save for later list\n * @param {string} url - url to be used to remove product from list\n */\nfunction removeSaveForLaterItem(url) {\n if (url) {\n $.spinner().start();\n $.ajax({\n url: url,\n type: \"get\",\n dataType: \"json\",\n data: {},\n success: function () {\n window.location.reload();\n $.spinner().stop();\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification(err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n }\n}\n\nfunction handlePostCartAdd(response) {\n $(\".minicart\").trigger(\"count:update\", response);\n var messageType = response.error ? \"alert-danger\" : \"alert-success\";\n\n if ($(\".add-to-cart-messages\").length === 0) {\n $(\"body\").append(\"<div class='add-to-cart-messages'></div>\");\n }\n\n $(\".add-to-cart-messages\").append(\n \"<div class='alert \" +\n messageType +\n \" add-to-basket-alert text-center' role='alert'>\" +\n response.message +\n \"</div>\"\n );\n\n setTimeout(function () {\n $(\".add-to-basket-alert\").remove();\n }, 5000);\n}\n\n/**\n * Ajax request for update quantity\n * @param {Object} element - quantity field which will updated\n */\nfunction updateQty(element) {\n var $qtySelector = element;\n var preSelectQty = $qtySelector.data(\"pre-select-qty\");\n var productID = $qtySelector.data(\"pid\");\n var url = $qtySelector.data(\"action\");\n var uuid = $qtySelector.data(\"uuid\");\n var value = $qtySelector.val();\n\n if (!url || !productID) {\n return;\n }\n\n if (value == 0) {\n value = 1;\n }\n\n if (value == 1) {\n $qtySelector.siblings(\".btn-decrease-quantity\").addClass(\"disabled\");\n } else {\n $qtySelector.siblings(\".btn-decrease-quantity\").removeClass(\"disabled\");\n }\n\n var urlParams = {\n pid: productID,\n quantity: value,\n uuid: uuid\n };\n\n url = appendToUrl(url, urlParams);\n\n $qtySelector.parents(\".card\").spinner().start();\n\n $(\"body\").trigger(\"cart:beforeUpdate\");\n\n $.ajax({\n url: url,\n type: \"get\",\n context: this,\n dataType: \"json\",\n success: function (data) {\n $(\".quantity[data-uuid='\" + uuid + \"']\").val(value);\n $(\".coupons-and-promos\").empty().append(data.totals.discountsHtml);\n updateCartTotals(data);\n updateApproachingDiscounts(data.approachingDiscounts);\n updateAvailability(data, uuid);\n validateBasket(data);\n\n if (!data.isMaterialQtyExceeded) {\n $(\".remove-material-items\").addClass(\"d-none\");\n } else {\n $(\".remove-material-items\").removeClass(\"d-none\");\n }\n\n $(\".quantity[data-uuid='\" + uuid + \"']\").data(\"pre-select-qty\", value);\n\n $(\"body\").trigger(\"cart:update\", data);\n\n $.spinner().stop();\n if ($qtySelector.parents(\".product-info\").hasClass(\"bonus-product-line-item\") && $(\".cart-page\").length) {\n window.location.reload();\n }\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification(err.responseJSON.errorMessage);\n $(\".quantity[data-uuid='\" + uuid + \"']\").val(parseInt(preSelectQty, 10));\n $.spinner().stop();\n }\n }\n });\n}\n\n\nfunction callCartUpdateShippingZip($form) {\n $.spinner().start();\n $.ajax({\n url: $form.attr(\"action\"),\n type: \"GET\",\n dataType: \"json\",\n data: $form.serialize(),\n success: function (data) {\n if (data.error) {\n createErrorNotification(data.errorMessage);\n } else {\n var cart = data.cart;\n if (cart && cart.deliveryData) {\n cart.deliveryData.deliveryZipCode = data.deliveryZipCode;\n }\n \n if (cart) {\n cart.isMaterialQtyExceeded = data.isMaterialQtyExceeded;\n }\n if (cart) {\n cart.action = data.action;\n }\n\n updateCartTotals(cart);\n updateApproachingDiscounts(cart.approachingDiscounts);\n validateBasket(cart);\n }\n\n $.spinner().stop();\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification(err.errorMessage);\n $.spinner().stop();\n }\n }\n });\n}\n\nmodule.exports = function () {\n\n saveForLaterList.addToList();\n\n /**\n * Handle \"Remove\" button click on \"Save For Later\" section in cart.\n */\n $(\"body\").on(\"click\", \".cart-wrapper .remove-from-list\", function (e) {\n e.preventDefault();\n var url = $(this).data(\"url\");\n removeSaveForLaterItem(url);\n });\n\n /**\n * Handle \"Move to Cart\" button click on \"Save For Later\" section in cart.\n */\n $(\"body\").on(\"click\", \".add-to-cart-save-for-later\", function () {\n var pid = $(this).data(\"pid\");\n var addToCartUrl = $(this).data(\"url\");\n var pidsQty = parseInt($(this).closest(\".product-info\").find(\".quantity\").val(), 10) || 1;\n var removeUrl = $(this).data(\"removeurl\");\n if (addToCartUrl && pid) {\n $(\"body\").trigger(\"product:beforeAddToCart\", this);\n var form = {\n pid: pid,\n quantity: pidsQty\n };\n\n if ($(this).data(\"option\")) {\n form.options = JSON.stringify($(this).data(\"option\"));\n }\n\n $(this).trigger(\"updateAddToCartFormData\", form);\n $.ajax({\n url: addToCartUrl,\n method: \"POST\",\n data: form,\n success: function (data) {\n handlePostCartAdd(data);\n $(\"body\").trigger(\"product:afterAddToCart\", data);\n $.spinner().stop();\n removeSaveForLaterItem(removeUrl);\n base.miniCartReportingUrl(data.reportingURL, data.error);\n },\n error: function () {\n $.spinner().stop();\n }\n });\n }\n });\n\n $(\"body\").on(\"click\", \".move-to-list\", function (e) {\n e.preventDefault();\n\n var data = {\n removeFromCartUrl:$(this).data(\"action\"),\n productID: $(this).data(\"pid\"),\n productName: $(this).data(\"name\"),\n uuid: $(this).data(\"uuid\"),\n addToWishlistUrl: $(this).attr(\"href\"),\n recipeId: $(this).data(\"recipeId\"),\n recipeLocation: $(this).data(\"recipeLocation\"),\n listType: $(this).data(\"listType\"),\n bundleParentName: $(this).data(\"bundleParentName\"),\n bundleParentSKU: $(this).data(\"bundleParentSku\")\n };\n\n confirmMoveWishlist(data);\n });\n\n $(\"body\").on(\"removeItemFromCartAjax\", function (e, url, uuid) {\n handleRemoveItemsAjax(url, uuid);\n });\n\n $(\"body\").on(\"click\", \".remove-product\", function (e) {\n e.preventDefault();\n\n var actionUrl = $(this).data(\"action\");\n var productID = $(this).data(\"pid\");\n var productName = $(this).data(\"name\");\n var uuid = $(this).data(\"uuid\");\n confirmDelete(actionUrl, productID, productName, uuid);\n });\n\n $(\"body\").on(\"afterRemoveFromCart\", function (e, data) {\n e.preventDefault();\n confirmDelete(data.actionUrl, data.productID, data.productName, data.uuid);\n });\n\n $(\".optional-promo\").click(function (e) {\n e.preventDefault();\n $(\".promo-code-form\").toggle();\n });\n\n $(\"body\").on(\"click\", \".cart-delete-confirmation-btn\", function (e) {\n e.preventDefault();\n\n var productID = $(this).data(\"pid\");\n var url = $(this).data(\"action\");\n var uuid = $(this).data(\"uuid\");\n var urlParams = {\n pid: productID,\n uuid: uuid\n };\n\n url = appendToUrl(url, urlParams);\n\n $(\"body > .modal-backdrop\").remove();\n\n $.spinner().start();\n\n $(\"body\").trigger(\"cart:beforeUpdate\");\n\n handleRemoveItemsAjax(url, uuid);\n });\n\n $(\"body\").on(\"click\", \".quantity-form .btn-change-quantity\", function () {\n const $button = $(this);\n const $input = $button.siblings(\".quantity-select\");\n const value = +$input.val();\n const valueMax = $input.data(\"max-qty\");\n const productID = $input.data(\"pid\");\n const url = $input.data(\"action\");\n\n if (!url || !productID) {\n return;\n }\n\n if ($button.hasClass(\"btn-increase-quantity\") && value < valueMax) {\n $input.val(value + 1);\n }\n\n if ($button.hasClass(\"btn-decrease-quantity\") && value > 1) {\n $input.val(value - 1);\n }\n\n $input.trigger(\"input\");\n });\n\n $(\"body\").on(\"input\", \".quantity-select\", function () {\n const $input = $(this);\n const value = $input.val();\n const valueMax = $input.data(\"max-qty\");\n\n $input.val(value.replace(/\\D/g, \"\").substring(0, 2));\n\n if (value && value <= valueMax) {\n updateQty($input);\n }\n\n $(\".modal.show .update-cart-url\").data(\"selected-quantity\", value);\n });\n\n $(\"body\").on(\"blur\", \".quantity-select\", function () {\n const $input = $(this);\n const value = $input.val();\n\n if (!value) {\n $input.siblings(\".btn-increase-quantity\").trigger(\"click\");\n }\n });\n\n $(\".shippingMethods\").change(function () {\n var url = $(this).attr(\"data-actionUrl\");\n var urlParams = {\n methodID: $(this).find(\":selected\").attr(\"data-shipping-id\")\n };\n // url = appendToUrl(url, urlParams);\n\n $(\".totals\").spinner().start();\n $(\"body\").trigger(\"cart:beforeShippingMethodSelected\");\n $.ajax({\n url: url,\n type: \"post\",\n dataType: \"json\",\n data: urlParams,\n success: function (data) {\n if (data.error) {\n window.location.href = data.redirectUrl;\n } else {\n $(\".coupons-and-promos\").empty().append(data.totals.discountsHtml);\n updateCartTotals(data);\n updateApproachingDiscounts(data.approachingDiscounts);\n validateBasket(data);\n }\n\n $(\"body\").trigger(\"cart:shippingMethodSelected\", data);\n $.spinner().stop();\n },\n error: function (err) {\n if (err.redirectUrl) {\n window.location.href = err.redirectUrl;\n } else {\n createErrorNotification(err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n });\n\n $(\".promo-code-form\").submit(function (e) {\n e.preventDefault();\n\n const $body = $(\"body\");\n const $form = $(\".promo-code-form\");\n const $couponField = $form.find(\".coupon-code-field\");\n const $errorMessage = $(\".coupon-error-message\");\n const $errorMessageApplied = $(\".coupon-applied-error\");\n const $errorMessageMissing = $(\".coupon-missing-error\");\n const $couponsPromosContainer = $(\".coupons-and-promos\");\n\n $.spinner().start();\n\n $errorMessageMissing.hide();\n $errorMessageApplied.hide();\n $errorMessage.empty();\n\n if (!$couponField.val()) {\n $couponField.addClass(\"is-invalid\").attr(\"aria-describedby\", \"missingCouponCode\");\n $errorMessageMissing.show();\n\n $.spinner().stop();\n\n return false;\n }\n\n $couponField.removeClass(\"is-invalid\");\n $errorMessage.empty();\n $body.trigger(\"promotion:beforeUpdate\");\n\n $.ajax({\n url: $form.attr(\"action\"),\n type: \"GET\",\n dataType: \"json\",\n data: $form.serialize(),\n success: function (data) {\n\n if (data.error) {\n $couponField.addClass(\"is-invalid\").attr(\"aria-describedby\", \"invalidCouponCode\");\n $errorMessage.empty().append(data.errorMessage);\n $body.trigger(\"promotion:error\", data);\n $(\".coupon-code-field\").val(\"\");\n } else if (!data.totals.discounts[0].applied) {\n $couponField.addClass(\"is-invalid\").attr(\"aria-describedby\", \"notAppliedCouponCode\");\n $errorMessageApplied.show();\n $body.trigger(\"promotion:error\", data);\n $(\".coupon-code-field\").val(\"\");\n } else {\n $couponsPromosContainer.empty().append(data.totals.discountsHtml);\n updateCartTotals(data);\n updateApproachingDiscounts(data.approachingDiscounts);\n validateBasket(data);\n $body.trigger(\"promotion:success\", data);\n }\n\n $.spinner().stop();\n },\n error: function (err) {\n $body.trigger(\"promotion:error\", err);\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification(err.errorMessage);\n $.spinner().stop();\n }\n }\n });\n return false;\n });\n\n $(\"body\").on(\"click\", \".remove-coupon\", function (e) {\n e.preventDefault();\n\n var couponCode = $(this).data(\"code\");\n var uuid = $(this).data(\"uuid\");\n var $deleteConfirmBtn = $(\".delete-coupon-confirmation-btn\");\n var $productToRemoveSpan = $(\".coupon-to-remove\");\n\n $deleteConfirmBtn.data(\"uuid\", uuid);\n $deleteConfirmBtn.data(\"code\", couponCode);\n\n $productToRemoveSpan.empty().append(couponCode);\n });\n\n $(\"body\").on(\"click\", \".delete-coupon-confirmation-btn\", function (e) {\n e.preventDefault();\n\n var url = $(this).data(\"action\");\n var uuid = $(this).data(\"uuid\");\n var couponCode = $(this).data(\"code\");\n var urlParams = {\n code: couponCode,\n uuid: uuid\n };\n\n url = appendToUrl(url, urlParams);\n\n $(\"body > .modal-backdrop\").remove();\n\n $.spinner().start();\n $(\"body\").trigger(\"promotion:beforeUpdate\");\n $.ajax({\n url: url,\n type: \"get\",\n dataType: \"json\",\n success: function (data) {\n $(\".coupon-uuid-\" + uuid).remove();\n updateCartTotals(data);\n updateApproachingDiscounts(data.approachingDiscounts);\n validateBasket(data);\n $.spinner().stop();\n $(\"body\").trigger(\"promotion:success\", data);\n $(\".coupon-code-field\").val(\"\");\n },\n error: function (err) {\n $(\"body\").trigger(\"promotion:error\", err);\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification(err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n $(\".coupon-code-field\").val(\"\");\n }\n });\n });\n $(\"body\").on(\"click\", \".cart-page .bonus-product-button\", function () {\n $.spinner().start();\n $(this).addClass(\"launched-modal\");\n $.ajax({\n url: $(this).data(\"url\"),\n method: \"GET\",\n dataType: \"json\",\n success: function (data) {\n base.methods.editBonusProducts(data);\n $.spinner().stop();\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n\n $(\"body\").on(\"hidden.bs.modal\", \"#chooseBonusProductModal\", function () {\n $(\"#chooseBonusProductModal\").remove();\n $(\".modal-backdrop\").remove();\n $(\"body\").removeClass(\"modal-open\");\n\n if ($(\".cart-page\").length) {\n $(\".launched-modal .btn-outline-primary\").trigger(\"focus\");\n $(\".launched-modal\").removeClass(\"launched-modal\");\n } else {\n $(\".product-detail .add-to-cart\").focus();\n }\n });\n\n $(\"body\").on(\"product:updateAddToCart\", function (e, response) {\n // update global add to cart (single products, bundles)\n var dialog = $(response.$productContainer).closest(\".quick-view-dialog\");\n\n $(\".update-cart-product-global\", dialog).attr(\n \"disabled\",\n !$(\".global-availability\", dialog).data(\"ready-to-order\") ||\n !$(\".global-availability\", dialog).data(\"available\")\n );\n });\n\n $(\"body\").on(\"product:updateAvailability\", function (e, response) {\n // bundle individual products\n $(\".product-availability\", response.$productContainer)\n .data(\"ready-to-order\", response.product.readyToOrder)\n .data(\"available\", response.product.available)\n .find(\".availability-msg\")\n .empty()\n .html(response.message);\n\n var dialog = $(response.$productContainer).closest(\".quick-view-dialog\");\n\n if ($(\".product-availability\", dialog).length) {\n // bundle all products\n var allAvailable = $(\".product-availability\", dialog)\n .toArray()\n .every(function (item) {\n return $(item).data(\"available\");\n });\n\n var allReady = $(\".product-availability\", dialog)\n .toArray()\n .every(function (item) {\n return $(item).data(\"ready-to-order\");\n });\n\n $(\".global-availability\", dialog).data(\"ready-to-order\", allReady).data(\"available\", allAvailable);\n\n $(\".global-availability .availability-msg\", dialog)\n .empty()\n .html(allReady ? response.message : response.resources.info_selectforstock);\n } else {\n // single product\n $(\".global-availability\", dialog)\n .data(\"ready-to-order\", response.product.readyToOrder)\n .data(\"available\", response.product.available)\n .find(\".availability-msg\")\n .empty()\n .html(response.message);\n }\n });\n\n $(\"body\").on(\"product:afterAttributeSelect\", function (e, response) {\n if ($(\".modal.show .product-quickview .bundle-items\").length) {\n $(\".modal.show\").find(response.container).data(\"pid\", response.data.product.id);\n $(\".modal.show\").find(response.container).find(\".product-id\").text(response.data.product.id);\n } else {\n $(\".modal.show .product-quickview\").data(\"pid\", response.data.product.id);\n }\n });\n\n $(\"body\").on(\"change\", \".options-select\", function () {\n var selectedOptionValueId = $(this).children(\"option:selected\").data(\"value-id\");\n $(\".modal.show .update-cart-url\").data(\"selected-option\", selectedOptionValueId);\n });\n\n $(\"body\").on(\"click\", \".update-cart-product-global\", function (e) {\n e.preventDefault();\n\n var updateProductUrl = $(this).closest(\".cart-and-ipay\").find(\".update-cart-url\").val();\n var selectedQuantity = $(this).closest(\".cart-and-ipay\").find(\".update-cart-url\").data(\"selected-quantity\");\n var selectedOptionValueId = $(this).closest(\".cart-and-ipay\").find(\".update-cart-url\").data(\"selected-option\");\n var uuid = $(this).closest(\".cart-and-ipay\").find(\".update-cart-url\").data(\"uuid\");\n\n var form = {\n uuid: uuid,\n pid: base.getPidValue($(this)),\n quantity: selectedQuantity,\n selectedOptionValueId: selectedOptionValueId\n };\n\n $(this).parents(\".card\").spinner().start();\n\n $(\"body\").trigger(\"cart:beforeUpdate\");\n\n if (updateProductUrl) {\n $.ajax({\n url: updateProductUrl,\n type: \"post\",\n context: this,\n data: form,\n dataType: \"json\",\n success: function (data) {\n $(\"#editProductModal\").modal(\"hide\");\n\n $(\".coupons-and-promos\").empty().append(data.cartModel.totals.discountsHtml);\n updateCartTotals(data.cartModel);\n updateApproachingDiscounts(data.cartModel.approachingDiscounts);\n updateAvailability(data.cartModel, uuid);\n updateProductDetails(data, uuid);\n\n if (data.uuidToBeDeleted) {\n $(\".uuid-\" + data.uuidToBeDeleted).remove();\n }\n\n validateBasket(data.cartModel);\n\n $(\"body\").trigger(\"cart:update\", data);\n\n $.spinner().stop();\n },\n error: function (err) {\n if (err.responseJSON.redirectUrl) {\n window.location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification(err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n }\n });\n }\n });\n\n handleStickyCta();\n $window.on(\"windowscroll\", debounce(handleStickyCta, 50));\n $window.on(\"windowresize:width\", debounce(handleStickyCta, 50));\n\n wishlist.addToWishlist();\n\n // remove all unavailable items from cart\n $(\"body\").on(\"click\", \".cart-remove-all\", function (e) {\n e.preventDefault();\n\n var url = $(this).data(\"url\");\n var products = $(\"input[name=removeCartProducts]\").val();\n var urlParams = {\n products: products,\n };\n\n url = appendToUrl(url, urlParams);\n\n $.spinner().start();\n\n $(\"body\").trigger(\"cart:beforeUpdate\");\n\n if (url) {\n handleRemoveItemsAjax(url);\n }\n });\n\n $(\".estimated-delivery\").on(\"submit\", function (e) {\n e.preventDefault();\n var $this = $(this);\n $this.find(\".invalid-feedback\").hide();\n callCartUpdateShippingZip($this);\n return false;\n });\n\n $(\".estimated-delivery input\").on(\"invalid\", function (e) {\n e.preventDefault();\n var $input = $(this);\n var value = $input.val();\n var errorMessage = \"\";\n if (value && value.length) {\n errorMessage = $(this).data(\"invalid-zipcode-error\");\n } else {\n errorMessage = $(this).data(\"enter-zipcode-error\");\n }\n $(\".estimated-delivery .invalid-feedback\").text(errorMessage).show();\n $(\".estimated-delivery .cart-estimated-delivery-zipcode\").removeClass(\"nondelivery-zipcode\");\n $(\".estimated-delivery .estimated-delivery-nondelivery-zipcode-msg\").addClass(\"d-none\");\n });\n\n $(\".estimated-delivery input\").on(\"input\", function () {\n $(\".estimated-delivery .cart-estimated-delivery-zipcode\").removeClass(\"nondelivery-zipcode\");\n });\n\n $(\".estimated-delivery\").on(\"reset\", function () {\n var $this = $(this);\n $this.find(\"input.cart-estimated-delivery-zipcode\").val(\"\");\n callCartUpdateShippingZip($this);\n });\n\n base.tabAttribute();\n base.selectAttribute();\n base.colorAttribute();\n base.removeBonusProduct();\n base.selectBonusProduct();\n base.enableBonusProductSelection();\n base.showMoreBonusProducts();\n base.addBonusProductsToCart();\n base.focusChooseBonusProductModal();\n base.trapChooseBonusProductModalFocus();\n base.onClosingChooseBonusProductModal();\n};\n","function handleFormLabelPosition() {\n var regularFields = $(\".form-control:not(.search-field):not(.quantity-field), .custom-select\");\n\n regularFields.each(function () {\n var $field = $(this);\n\n $field.on(\"change\", function () {\n if ($field.val() && $field.val() !== \"\") {\n $field.addClass(\"field-with-value\");\n } else {\n $field.removeClass(\"field-with-value\");\n }\n });\n });\n}\n\nmodule.exports = {\n handleFormLabelPosition: handleFormLabelPosition\n};\n","module.exports = function () {\n var sizes = [\"xs\", \"sm\", \"md\", \"lg\", \"customLG\", \"xl\", \"xxl\"];\n\n sizes.forEach(function (size) {\n var selector = \".collapsible-\" + size + \" .title\";\n $(\"body\").on(\"click\", selector, function (e) {\n var $actionBtn = $(selector).find(\"a\");\n if ($actionBtn.length > 0 && $actionBtn.has(e.target).length > 0) {\n return;\n }\n e.preventDefault();\n $(this).parent(\".collapsible-\" + size).toggleClass(\"active\");\n\n if ($(this).parent(\".collapsible-\" + size).hasClass(\"active\")) {\n $(this).attr(\"aria-expanded\", true);\n } else {\n $(this).attr(\"aria-expanded\", false);\n }\n });\n });\n};\n","var debounce = require(\"lodash/debounce\");\nvar searchHelpers = require(\"./searchHelpers\");\nvar endpoint = $(\".suggestions-wrapper\").data(\"url\");\nvar minChars = 1;\nvar UP_KEY = 38;\nvar DOWN_KEY = 40;\nvar DIRECTION_DOWN = 1;\nvar DIRECTION_UP = -1;\n\n/**\n * Retrieves Suggestions element relative to scope\n *\n * @param {Object} scope - Search input field DOM element\n * @return {JQuery} - .suggestions-wrapper element\n */\nfunction getSuggestionsWrapper(scope) {\n return $(scope).siblings(\".suggestions-wrapper\");\n}\n\n/**\n * Determines whether DOM element is inside the .search-mobile class\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n * @return {boolean} - Whether DOM element is inside div.search-mobile\n */\nfunction isMobileSearch(scope) {\n var commonFeature = require(\"./commonFeature\");\n return !!$(scope).closest(\".search-mobile\").length && commonFeature.isBreakpoint(\"<=sm\");\n}\n\n/**\n * Remove modal classes needed for mobile suggestions\n *\n */\nfunction clearModals() {\n $(\"body\").removeClass(\"modal-open\");\n $(\"header\").siblings().attr(\"aria-hidden\", \"false\");\n $(\".header\").removeClass(\"menu-opened\");\n $(\".modal-background\").removeClass(\"close-search-modal\").hide();\n $(\".search-toggler\").removeClass(\"d-none\");\n $(\".navbar-toggler\").removeClass(\"d-none\");\n $(\".store-locator-button\").removeClass(\"d-none\");\n $(\".close-search-button\").addClass(\"d-none\");\n $(\".site-search\").removeClass(\"in\");\n $(\".site-search\").attr(\"aria-hidden\", \"true\");\n}\n\n/**\n * Apply modal classes needed for mobile suggestions\n *\n * @param {Object} scope - Search input field DOM element\n */\nfunction applyModals(scope) {\n if (isMobileSearch(scope)) {\n $(\"body\").addClass(\"modal-open\");\n $(\"header\").siblings().attr(\"aria-hidden\", \"true\");\n $(\".header\").addClass(\"menu-opened\");\n }\n $(\".modal-background\").addClass(\"close-search-modal\").show();\n $(\".search-toggler\").addClass(\"d-none\");\n $(\".close-search-button\").removeClass(\"d-none\");\n $(\".site-search\").addClass(\"in\");\n $(\".site-search\").attr(\"aria-hidden\", \"false\");\n}\n\n/**\n * Positions Suggestions panel on page\n *\n * @param {Object} scope - DOM element, usually the input.search-field element\n */\nfunction positionSuggestions(scope) {\n var outerHeight;\n var $scope;\n var $suggestions;\n var top;\n var windowHeight = $(window).height();\n\n if (isMobileSearch(scope)) {\n $scope = $(scope);\n top = $scope.offset().top;\n outerHeight = $scope.outerHeight();\n $suggestions = getSuggestionsWrapper(scope).find(\".suggestions\");\n $suggestions.css(\"top\", top + outerHeight);\n } else if (windowHeight > 600) {\n $(\".site-search\").css(\"height\", 635);\n } else {\n $(\".site-search\").css(\"height\", windowHeight - 44);\n $(\".site-search .suggestions\").css(\"min-height\", windowHeight - 44);\n }\n}\n\n/**\n * Process Ajax response for SearchServices-GetSuggestions\n *\n * @param {Object|string} response - Empty object literal if null response or string with rendered\n * suggestions template contents\n */\nfunction processResponse(response) {\n var $suggestionsWrapper = getSuggestionsWrapper(this).find(\".suggestions-inner\").empty();\n $(\".site-search\").css(\"height\", \"inherit\");\n\n $.spinner().stop();\n\n if (typeof (response) !== \"object\") {\n getSuggestionsWrapper(this).find(\".popular-suggestions\").addClass(\"d-none\");\n $suggestionsWrapper.append(response).show();\n $(this).siblings(\".reset-button\").removeClass(\"d-none\");\n positionSuggestions(this);\n\n if (isMobileSearch(this)) {\n applyModals(this);\n }\n\n // Trigger screen reader by setting aria-describedby with the new suggestion message.\n var suggestionsList = $(\".suggestions .item\");\n if ($(suggestionsList).length) {\n $(\"input.search-field\").attr(\"aria-describedby\", \"search-result-count\");\n } else {\n $(\"input.search-field\").removeAttr(\"aria-describedby\");\n }\n } else {\n $suggestionsWrapper.hide();\n $(\".site-search\").css(\"height\", \"inherit\");\n getSuggestionsWrapper(this).find(\".popular-suggestions\").removeClass(\"d-none\");\n }\n}\n\n/**\n * Retrieve suggestions\n *\n * @param {Object} scope - Search field DOM element\n */\nfunction getSuggestions(scope) {\n if ($(scope).val().length >= minChars) {\n $.spinner().start();\n $.ajax({\n context: scope,\n url: endpoint + encodeURIComponent($(scope).val()),\n method: \"GET\",\n success: processResponse,\n error: function () {\n $.spinner().stop();\n }\n });\n } else {\n $(scope).siblings(\".reset-button\").addClass(\"d-none\");\n getSuggestionsWrapper(scope).find(\".suggestions-inner\").empty();\n getSuggestionsWrapper(scope).find(\".popular-suggestions\").removeClass(\"d-none\");\n $(\".site-search\").css(\"height\", \"inherit\");\n }\n}\n\n/**\n * Handle Search Suggestion Keyboard Arrow Keys\n *\n * @param {Integer} direction takes positive or negative number constant, DIRECTION_UP (-1) or DIRECTION_DOWN (+1)\n */\nfunction handleArrow(direction) {\n // get all li elements in the suggestions list\n var suggestionsList = $(\".suggestions .item\");\n if (suggestionsList.filter(\".selected\").length === 0) {\n suggestionsList.first().addClass(\"selected\");\n $(\"input.search-field\").each(function () {\n $(this).attr(\"aria-activedescendant\", suggestionsList.first()[0].id);\n });\n } else {\n suggestionsList.each(function (index) {\n var idx = index + direction;\n if ($(this).hasClass(\"selected\")) {\n $(this).removeClass(\"selected\");\n $(this).removeAttr(\"aria-selected\");\n if (suggestionsList.eq(idx).length !== 0) {\n suggestionsList.eq(idx).addClass(\"selected\");\n suggestionsList.eq(idx).attr(\"aria-selected\", true);\n $(this).removeProp(\"aria-selected\");\n $(\"input.search-field\").each(function () {\n $(this).attr(\"aria-activedescendant\", suggestionsList.eq(idx)[0].id);\n });\n } else {\n suggestionsList.first().addClass(\"selected\");\n suggestionsList.first().attr(\"aria-selected\", true);\n $(\"input.search-field\").each(function () {\n $(this).attr(\"aria-activedescendant\", suggestionsList.first()[0].id);\n });\n }\n return false;\n }\n return true;\n });\n }\n}\n\nmodule.exports = function () {\n $(\"form[name='simpleSearch']\").submit(function (e) {\n clearModals();\n $(\".suggestions\").hide();\n var suggestionsList = $(\".suggestions .item\");\n if (suggestionsList.filter(\".selected\").length !== 0) {\n e.preventDefault();\n suggestionsList.filter(\".selected\").find(\"a\")[0].click();\n }\n });\n\n $(\"input.search-field\").each(function () {\n /**\n * Use debounce to avoid making an Ajax call on every single key press by waiting a few\n * hundred milliseconds before making the request. Without debounce, the user sees the\n * browser blink with every key press.\n */\n var debounceSuggestions = debounce(getSuggestions, 300);\n $(this).on(\"keyup focus\", function (e) {\n // Capture Down/Up Arrow Key Events\n switch (e.which) {\n case DOWN_KEY:\n handleArrow(DIRECTION_DOWN);\n e.preventDefault(); // prevent moving the cursor\n break;\n case UP_KEY:\n handleArrow(DIRECTION_UP);\n e.preventDefault(); // prevent moving the cursor\n break;\n default:\n debounceSuggestions(this, e);\n }\n });\n });\n\n $(\".site-search .reset-button\").on(\"click\", function () {\n $(this).addClass(\"d-none\");\n $(\".suggestions-inner\").empty();\n $(\".site-search\").css(\"height\", \"inherit\");\n $(\".popular-suggestions\").removeClass(\"d-none\");\n });\n\n $(\".search-toggler, .search-mobile form[role='search'] .search-field\").on(\"click\", function (e) {\n e.preventDefault();\n\n if ($(this).hasClass(\"search-toggler\")) {\n if ($(\".menu-toggleable-left\").hasClass(\"in\")) {\n $(\".navbar-header .close-button\").trigger(\"click\");\n } else if ($(\".header-wrapper\").hasClass(\"menu-opened\")) {\n $(\".modal-background.close-menu-modal\").trigger(\"click\");\n }\n }\n\n applyModals(this);\n\n $(this).siblings(\".site-search\").find(\".search-field\").focus();\n });\n\n $(document).on(\"click\", \".modal-background.close-search-modal\", function () {\n searchHelpers.tearDownSuggestions();\n });\n\n $(\".suggestions-wrapper\").on(\"click\", \"a\", function () {\n clearModals();\n $(\".suggestions\").hide();\n });\n\n $(document).on(\"click\", function (e) {\n if (!$(\".site-search\").has(e.target).length && !$(e.target).hasClass(\".search-toggler\") && !$(\".search-toggler\").has(e.target).length && $(\".modal-background\").hasClass(\"close-search-modal\")) {\n $(\".modal-background.close-search-modal\").trigger(\"click\");\n }\n });\n\n $(\".close-search-button\").on(\"click\", function () {\n $(\".modal-background.close-search-modal\").trigger(\"click\");\n });\n\n $(window).on(\"breakpoint:change\", function () {\n if ($(\".site-search\").hasClass(\"in\")) {\n $(\".modal-background.close-search-modal\").trigger(\"click\");\n }\n });\n};\n","/**\n * Validate whole form. Requires `this` to be set to form object\n * @param {jQuery.event} event - Event to be canceled if form is invalid.\n * @returns {boolean} - Flag to indicate if form is valid\n */\nfunction validateForm(event) {\n var valid = true;\n if (this.checkValidity && !this.checkValidity()) {\n // safari\n valid = false;\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n $(this).find(\"input, select\").each(function () {\n if (!this.validity.valid) {\n $(this).trigger(\"invalid\", this.validity);\n }\n });\n }\n return valid;\n}\n\n/**\n * Remove all validation. Should be called every time before revalidating form\n * @param {element} form - Form to be cleared\n * @returns {void}\n */\nfunction clearForm(form) {\n $(form).find(\".form-control.is-invalid\").removeClass(\"is-invalid\");\n}\n\nmodule.exports = {\n invalid: function () {\n $(\"form input, form select\").on(\"invalid\", function (e) {\n e.preventDefault();\n this.setCustomValidity(\"\");\n if (!this.validity.valid) {\n var validationMessage = this.validationMessage;\n $(this).addClass(\"is-invalid\");\n if (this.validity.patternMismatch && $(this).data(\"pattern-mismatch\")) {\n validationMessage = $(this).data(\"pattern-mismatch\");\n }\n if ((this.validity.rangeOverflow || this.validity.rangeUnderflow)\n && $(this).data(\"range-error\")) {\n validationMessage = $(this).data(\"range-error\");\n }\n if ((this.validity.tooLong || this.validity.tooShort)\n && $(this).data(\"range-error\")) {\n validationMessage = $(this).data(\"range-error\");\n }\n if (this.validity.valueMissing && $(this).data(\"missing-error\")) {\n validationMessage = $(this).data(\"missing-error\");\n }\n $(this).parents(\".form-group\").find(\".invalid-feedback\")\n .text(validationMessage);\n }\n });\n },\n\n submit: function () {\n $(\"form\").on(\"submit\", function (e) {\n return validateForm.call(this, e);\n });\n },\n\n buttonClick: function () {\n $(\"form button[type='submit'], form input[type='submit']\").on(\"click\", function () {\n // clear all errors when trying to submit the form\n clearForm($(this).parents(\"form\"));\n });\n },\n\n clearErrorState: function () {\n $(\"form input, form select\").on(\"change keydown paste input\", function () {\n var $this = $(this);\n $this.removeClass(\"is-invalid\");\n $this.closest(\"form-group\").find(\".invalid-feedback\").empty();\n });\n },\n\n functions: {\n validateForm: function (form, event) {\n validateForm.call($(form), event || null);\n },\n clearForm: clearForm\n }\n};\n","'use strict';\n\nvar keyboardAccessibility = require('./keyboardAccessibility');\n\nmodule.exports = function () {\n $('.country-selector a').click(function (e) {\n e.preventDefault();\n var action = $('.page').data('action');\n var localeCode = $(this).data('locale');\n var localeCurrencyCode = $(this).data('currencycode');\n var queryString = $('.page').data('querystring');\n var url = $('.country-selector').data('url');\n\n $.ajax({\n url: url,\n type: 'get',\n dataType: 'json',\n data: {\n code: localeCode,\n queryString: queryString,\n CurrencyCode: localeCurrencyCode,\n action: action\n },\n success: function (response) {\n $.spinner().stop();\n if (response && response.redirectUrl) {\n window.location.href = response.redirectUrl;\n }\n },\n error: function () {\n $.spinner().stop();\n }\n });\n });\n\n keyboardAccessibility('.navbar-header .country-selector',\n {\n 40: function ($countryOptions) { // down\n if ($(this).is(':focus')) {\n $countryOptions.first().focus();\n } else {\n $(':focus').next().focus();\n }\n },\n 38: function ($countryOptions) { // up\n if ($countryOptions.first().is(':focus') || $(this).is(':focus')) {\n $(this).focus();\n $(this).removeClass('show');\n } else {\n $(':focus').prev().focus();\n }\n },\n 27: function () { // escape\n $(this).focus();\n $(this).removeClass('show').children('.dropdown-menu').removeClass('show');\n },\n 9: function () { // tab\n $(this).removeClass('show').children('.dropdown-menu').removeClass('show');\n }\n },\n function () {\n if (!($(this).hasClass('show'))) {\n $(this).addClass('show');\n }\n return $(this).find('.dropdown-country-selector').children('a');\n }\n );\n\n $('.navbar-header .country-selector').on('focusin', function () {\n $(this).addClass('show').children('.dropdown-menu').addClass('show');\n });\n};\n","function openTooltip() {\n $(\".tooltip-icon\").tooltip();\n}\n\nmodule.exports = {\n openTooltip: openTooltip\n};\n","var processInclude = require(\"base/util\");\n\n$(document).ready(function () {\n processInclude(require(\"./checkout/gtm\"));\n processInclude(require(\"./gtmItemList\"));\n});\n","/**\n * returns unique coupons applied to all products in the purchase\n * @param {Array} items\n * @returns {Array} of unique coupons\n */\nfunction getCheckoutCoupons(items) {\n var allCoupons = [];\n // eslint-disable-next-line array-callback-return\n items.map(function (item) {\n if (item.coupon) {\n allCoupons.push(item.coupon);\n }\n });\n\n var coupons = allCoupons.reduce((accumulator, item) => accumulator.concat(item), []); // make two dimension array to one dimension\n // remove duplicates\n var uniqueCoupons = coupons.filter(function (coupon, index) {\n return coupons.indexOf(coupon) == index;\n });\n\n return uniqueCoupons;\n}\n\nmodule.exports = function () {\n $(\".submit-payment\").on(\"click\", function () {\n var methodID = $(\".payment-information\").data(\"payment-method-id\");\n var ecommerce = $(\".gtm-begin-checkout\").data(\"gtm-begin-checkout\");\n var items = ecommerce.items;\n var coupons = getCheckoutCoupons(items);\n ecommerce.coupon = coupons ? coupons : null;\n ecommerce.payment_type = methodID ? methodID : null;\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"add_payment_info\",\n data: ecommerce\n });\n var gtmPaymentObject = JSON.stringify(ecommerce);\n $(\".gtm-add-payment-info\").attr(\"data-gtm-add-payment-info\", gtmPaymentObject);\n });\n\n $(\".submit-shipping\").on(\"click\", function () {\n var gtmAddShippingObj = $(\".gtm-add-shipping-info\").data(\"gtm-add-shipping-info\");\n if (gtmAddShippingObj) {\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"add_shipping_info\",\n data: gtmAddShippingObj\n });\n }\n });\n};\n","function getFullViewItemList(gtmObjArray) {\n var remainingArray = [];\n\n if (gtmObjArray && gtmObjArray.length > 0) {\n var newObject = gtmObjArray[0];\n gtmObjArray.splice(0, 1);\n gtmObjArray.forEach(function (itemObj) {\n if (itemObj.item_list_id === newObject.item_list_id) {\n newObject.items.push(itemObj.items);\n } else {\n remainingArray.push(itemObj);\n }\n });\n var items = newObject.items.reduce((accumulator, item) => accumulator.concat(item), []);\n newObject.items = items;\n newObject.items.map(function (item, index) { // eslint-disable-line array-callback-return\n item.index = index; // eslint-disable-line no-param-reassign\n });\n\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"view_item_list\",\n data: newObject\n });\n\n if (remainingArray && remainingArray.length > 0) {\n getFullViewItemList(remainingArray);\n }\n }\n}\n\n/**\n * updates GTM view_item_list dataLayer\n *\n */\n\nmodule.exports = function () {\n $(\"body\").on(\"gtm:standartEvent\", function (event, data) {\n if (data && data.event && data.data) {\n var ecommerce = data.data;\n window.dataLayer.push({\"event\": data.event, ecommerce}); \n }\n });\n\n $(window).on(\"load\", function (e) {\n e.preventDefault();\n\n var gtmViewItemListArray = Array.from(document.querySelectorAll(\".gtm-view-item-list\"));\n var gtmDataArray = [];\n if (gtmViewItemListArray && gtmViewItemListArray.length > 0) {\n gtmViewItemListArray.forEach(function (el) {\n gtmDataArray.push(JSON.parse(el.dataset.viewItemList));\n });\n }\n\n if (gtmDataArray.length > 0) {\n getFullViewItemList(gtmDataArray);\n }\n\n var gtmViewItemObj = $(\".gtm-view-item\").data(\"view-item\");\n if (gtmViewItemObj) {\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"view_item\",\n data: gtmViewItemObj\n });\n }\n\n var gtmViewCartObj = $(\".gtm-view-cart-list\").data(\"view-cart-list\");\n if (gtmViewCartObj) {\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"view_cart\",\n data: gtmViewCartObj\n });\n }\n\n var gtmCheckoutObj = $(\".gtm-begin-checkout\").data(\"gtm-begin-checkout\");\n if (gtmCheckoutObj) {\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"begin_checkout\",\n data: gtmCheckoutObj\n });\n }\n\n var gtmPurchaseObj = $(\".gtm-purchase\").data(\"gtm-purchase\");\n if (gtmPurchaseObj) {\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"purchase\",\n data: gtmPurchaseObj\n });\n }\n });\n\n $(\".socialIcon\").on(\"click\", function () {\n var gtmShareObj = $(this).attr(\"data-gtm-share\");\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"share\",\n data: JSON.parse(gtmShareObj)\n });\n });\n\n $(document).on(\"click\", \"button.add-to-cart-drive-customizer\", function () {\n var addToCartContainer = $(this).closest(\".cart-and-ipay\").find(\".gtm-add-to-cart-container\");\n var gtmAddToCartObj = addToCartContainer.find(\".gtm-add-to-cart\").attr(\"data-gtm-add-to-cart\");\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"add_to_cart\",\n data: JSON.parse(gtmAddToCartObj)\n });\n });\n\n $(document).on(\"click\", \".tile-image, .pdp-link, .product-tile-image, .product-name-link\", function () {\n var gtmSelectItemObj = $(this).closest(\".product\").find(\".gtm-select-item\").attr(\"data-gtm-select-item\");\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"select_item\",\n data: JSON.parse(gtmSelectItemObj)\n });\n });\n\n $(document).on(\"click\", \".minicart-links__wishlist\", function (e) {\n e.preventDefault();\n\n var gtmAddToWishlistObj = $(this).attr(\"data-gtm-add-to-wishlist\");\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"add_to_wishlist\",\n data: JSON.parse(gtmAddToWishlistObj)\n });\n });\n\n $(document).on(\"click\", \".remove-product\", function (e) {\n e.preventDefault();\n\n var gtmRemoveFromCart = $(this).attr(\"data-gtm-remove-from-cart\");\n if (gtmRemoveFromCart) {\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"remove_from_cart\",\n data: JSON.parse(gtmRemoveFromCart)\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","/**\n * updates GTM tags on selection of variants\n * @param {Object} data response from Product-Variation\n */\n\nmodule.exports = {\n updateGTM: function (data, $productContainer) { // eslint-disable-line consistent-return\n if (data.gtmItem) {\n var gtmObj;\n try {\n gtmObj = JSON.stringify(data.gtmItem); // eslint-disable-line block-scoped-var\n } catch (err) {\n return false;\n }\n\n var html = \"<div class='gtm-view-item' data-view-item='\" + gtmObj + \"'></div>\"; // eslint-disable-line block-scoped-var\n $productContainer.find(\".gtm-view-item-container\").empty().html(html); // eslint-disable-line block-scoped-var\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"view_item\",\n data: JSON.parse(data.gtmItem)\n });\n }\n \n if (data.gtmAddToCart) {\n var html = \"<div class='gtm-add-to-cart' data-gtm-add-to-cart='\" + data.gtmAddToCart + \"'></div>\"; // eslint-disable-line\n $productContainer.find(\".gtm-add-to-cart-container\").empty().html(html); // eslint-disable-line block-scoped-var\n }\n \n if (data.gtmAddToWishlist) {\n var html = \"<div class='gtm-add-to-wishlist' data-add-to-wishlist='\" + data.gtmAddToWishlist + \"'></div>\"; // eslint-disable-line\n $productContainer.find(\".gtm-add-to-wishlist-container\").empty().html(html); // eslint-disable-line block-scoped-var\n }\n }\n};\n","var processInclude = require(\"base/util\");\n\n$(document).ready(function () {\n processInclude(require(\"./checkout/checkoutSynchrony\"));\n});\n","var formHelpers = require(\"base/checkout/formErrors\");\nvar syfPosTokenUrl = $(\".synchrony-payment-tab\").data(\"pos-token\");\nvar syfTransactStatusUrl = $(\".synchrony-payment-tab\").data(\"status-inquiry\");\nvar response = {};\nvar mppToken;\nvar clientTransId;\n\nvar exports = function () {\n $(\"body\").on(\"click\", \".credit-card-tab\", function (e) {\n e.preventDefault();\n $(\"#credit-card-content\").show();\n });\n\n $(\"body\").on(\"click\", \".affirm-payment-tab\", function (e) {\n e.preventDefault();\n $(\"#affirm-payment-content\").show();\n });\n\n\n\n $(\"body\").on(\"click\", \".synchrony-payment-tab\", function (e) {\n e.preventDefault();\n $.spinner().start();\n $(\"#credit-card-content\").hide();\n $(\"#affirm-payment-content\").hide();\n $(\"#paypal-content\").hide();\n var url = $(this).data(\"url\");\n\n if (url) {\n $.ajax({\n url: url,\n method: \"GET\",\n success: function (data) {\n response = data.syfJSON;\n $(\"#submit-order\").addClass(\"synchrony_payment\");\n clientTransId = response.clientTransId ? response.clientTransId : \"\";\n },\n error: function (err) {\n throw new Error(err);\n }\n });\n }\n\n formHelpers.clearPreviousErrors(\".payment-form\");\n $.spinner().stop();\n });\n\n $(\".synchrony_payment\").removeClass(\"checkout-hidden\");\n\n $(\"body\").on(\"click\", \".synchrony_payment\", function (e) { // eslint-disable-line consistent-return\n e.preventDefault();\n $(\"body\").trigger(\"checkout:disableButton\", \".next-step-button button\");\n if ($(\".payment-information\").data(\"payment-method-id\") !== \"SYNCHRONY_PAYMENT\") {\n return true;\n }\n var syfJson = {};\n syfJson.syfPartnerId = \"PI20800280\";\n syfJson.merchantID = \"\";\n syfJson.processInd = \"3\";\n syfJson.clientTransId = clientTransId;\n\n syfJson.custAddress1 = document.querySelector(\".address1\").innerText;\n syfJson.custCity = document.querySelector(\".city\").innerText.replaceAll(\",\", \"\");\n syfJson.custState = document.querySelector(\".stateCode\").innerText;\n var zipCode = document.querySelector(\".postalCode\").innerText;\n syfJson.custZipCode = zipCode.length > 5 ? zipCode.slice(0, -5) : zipCode;\n syfJson.phoneNumber = document.querySelector(\".order-summary-phone\").innerText;\n syfJson.transAmount1 = document.querySelector(\".grand-total-sum\").innerText.replaceAll(\",\", \"\").slice(1);\n\n $.ajax({\n url: syfPosTokenUrl,\n method: \"GET\",\n success: function (data) {\n if (data.mppToken) {\n mppToken = data.mppToken;\n syfJson.tokenId = mppToken;\n // call Synchrony combined modal\n syfMPP.calldBuyProcess(null, syfJson); // eslint-disable-line no-undef\n }\n },\n error: function (err) {\n throw new Error(err);\n }\n });\n });\n\n window.addEventListener(\"message\", function (event) {\n if (\n (typeof event.data == \"string\" || typeof event.data == \"object\") &&\n (event.data == \"Close Model\" ||\n event.data == \"Return To Merchant Shipping\" ||\n event.data == \"Close\" ||\n event.data.action == \"setPayCloseModal\")\n ) {\n $.ajax({\n url: syfTransactStatusUrl,\n method: \"GET\",\n data: {mppToken: mppToken},\n success: function (data) {\n if (data.error) {\n $(\".error-message\").show();\n $(\".error-message-text\").text(data.errMsg);\n } else {\n $.spinner().start();\n window.location.href = data.redirectUrl;\n }\n },\n error: function (err) {\n throw new Error(err);\n }\n });\n }\n });\n};\n\nmodule.exports = exports;\n","function phoneMask() {\n var Inputmask = require(\"inputmask\");\n Inputmask({mask: \"999-999-9999\" }).mask(\"input.phoneMask\");\n}\nmodule.exports = {\n phoneMask: phoneMask\n};\n","/**\n * renderOpeningHours - renders opening hours\n * @param {*} schedule\n */\nfunction renderOpeningHours(schedule) {\n Object.keys(schedule).forEach(function (key) {\n if (schedule[key].isClosed) {\n $(\".day_\"+key+\".operation_time\").text(schedule[key].open);\n } else {\n $(\".day_\"+key+\".operation_time\").text(schedule[key].openHours);\n }\n });\n}\n\n/**\n * renderError - renders error\n */\nfunction renderError() {\n $(\".header__store-locator\").attr(\"data-store\", \"error\").siblings(\".store-locator-button\").removeClass(\"has-store\");\n $(\".change__location-form\").addClass(\"show\");\n $(\".change__location-form-label\").removeClass(\"hide\");\n $(\".invalid-feedback .error-msg\").removeClass(\"d-none\");\n $(\".store-locator-form input\").addClass(\"is-invalid\");\n $(\".navbar__store-button\").removeClass(\"has-store\");\n}\n\n/**\n * searchStore - renders search store modal\n */\nfunction searchStore() {\n $(\".store-locator-button\").on(\"click\", function (e) {\n e.preventDefault();\n\n if ($(\".menu-toggleable-left\").hasClass(\"in\")) {\n $(\".navbar-header .close-button\").trigger(\"click\");\n } else if ($(\".header-wrapper\").hasClass(\"menu-opened\")) {\n $(\".modal-background.close-menu-modal\").trigger(\"click\");\n }\n\n $(this).parents(\".header\").addClass(\"store-locator-opened\");\n });\n\n $(\".header__store-locator\").on(\"click\", function (e) {\n e.stopPropagation();\n });\n\n // Init backdrop\n $(document).on(\"click\", \".modal-background.close-store-locator-modal\", function () {\n $(this).removeClass(\"close-store-locator-modal\").hide();\n $(\".header\").removeClass(\"store-locator-opened\");\n });\n\n $(\".dropdown-store-locator\").on(\"shown.bs.dropdown\", function () {\n $(\".modal-background\").addClass(\"close-store-locator-modal\").show();\n });\n\n $(\".dropdown-store-locator\").on(\"hide.bs.dropdown\", function () {\n $(\".modal-background\").removeClass(\"close-store-locator-modal\").hide();\n $(\".header\").removeClass(\"store-locator-opened\");\n });\n\n // Menu Button\n $(\".navbar__store-button\").on(\"click\", function (e) {\n e.stopPropagation();\n $(\".close-button\").trigger(\"click\");\n $(\"#dropdownSearchStoreMobile\").dropdown(\"toggle\");\n $(this).parents(\".header\").addClass(\"store-locator-opened\");\n });\n\n $(\".change__location\").on(\"click\", function () {\n $(\".change__location-form\").collapse(\"toggle\");\n\n $(this).toggleClass(\"open\");\n\n if ($(this).hasClass(\"open\")) {\n $(this).attr(\"aria-expanded\", true);\n } else {\n $(this).attr(\"aria-expanded\", false);\n }\n });\n\n $(\"body\").on(\"submit\", \"form.store-locator-form:visible\", function (e) {\n e.preventDefault();\n\n const $form = $(this);\n const url = $form.attr(\"action\");\n const zipCode = $form.find(\"#zipCode\").val();\n const $zipCodeField = $form.find(\"#zipCode\");\n $form.spinner().start();\n\n if (Number.isNaN(Number(zipCode)) || zipCode.length != 5) {\n renderError();\n $form.spinner().stop();\n } else {\n if (url) {\n $.ajax({\n url: url,\n type: \"post\",\n dataType: \"json\",\n data: $form.serialize(),\n success: function (data) {\n $form.spinner().stop();\n $(\".store\").removeClass(\"d-none\");\n if (\"clientkey\" in data.store && data.store.clientkey) {\n $(\".header__store-locator\").attr(\"data-store\", \"store\").siblings(\".store-locator-button\").addClass(\"has-store\");\n $(\".change__location-form\").removeClass(\"show\");\n $(\".change__location-form-label\").addClass(\"hide\");\n $(\".navbar__store-button\").addClass(\"has-store\");\n $(\".navbar__store-name\").text(data.store.city + \" ,\" + data.store.state);\n $(\".header__store-name\").text(data.store.city);\n $(\".store__name\").text(data.store.name);\n $(\".store__location-name\").text(data.store.storedisplayname);\n $(\".store__address_line\").text(data.store.address1);\n $(\".store__address_city\").text(data.store.city);\n $(\".store__address_state\").text(data.store.state);\n $(\".store__address_postalcode\").text(data.store.postalcode);\n $(\".store__phone\").text(data.store.phone);\n $(\".store__link\").attr(\"href\", \"http://\" + data.store.website_url);\n $(\".store__location-link\").attr(\"href\", \"http://maps.google.com/maps?q=\" + data.store.address1 + \",\" + data.store.city + \",\" + data.store.state + \",\" + data.store.postalcode);\n $(\".store__appointment\").attr(\"href\", data.store.appt_url);\n\n renderOpeningHours(data.store.schedule);\n\n } else {\n renderError();\n };\n $zipCodeField.val(\"\").removeClass(\"field-with-value\");\n },\n error: function () {\n renderError();\n $form.spinner().stop();\n $zipCodeField.val(\"\").removeClass(\"field-with-value\");\n }\n });\n };\n\n }\n\n return false;\n });\n}\n\nmodule.exports = {\n searchStore: searchStore\n};\n","var processInclude = require(\"base/util\");\n\n$(document).ready(function () {\n processInclude(require(\"./pixel\"));\n});\n","module.exports = function () {\n $(\"body\").on(\"pixel:trackEvent\", function (event, data) {\n var pixelEnabled = $(\"#metaPixelID\").data(\"meta-pixel-id\");\n if (pixelEnabled && data && data.event) {\n var ecommerce = data.data ? data.data : null;\n fbq(\"track\", data.event, ecommerce); // eslint-disable-line\n console.log(\"Meta Pixel Test:\",\"event: \", data.event, \"object value if needed: \", ecommerce); // eslint-disable-line\n }\n });\n\n $(document).on(\"click\", \"button.add-to-cart-drive-customizer\", function () {\n var fbqPixelPID = $(\".pixel-add-to-cart\").data(\"pixel-add-to-cart-pid\");\n if (!fbqPixelPID) {\n fbqPixelPID = $(this).data(\"pid\");\n }\n var addToCartObj = {\n content_type: \"product_group\",\n content_ids: [fbqPixelPID]\n };\n $(\"body\").trigger(\"pixel:trackEvent\", {\n event: \"AddToCart\",\n data: addToCartObj\n });\n });\n\n $(document).on(\"submit\", \"form[name='simpleSearch']\", function () {\n var $searchInput = $(this).find(\"input.search-field\");\n var searchObj = {\n search_string: $searchInput.val()\n };\n $(\"body\").trigger(\"pixel:trackEvent\", {\n event: \"Search\",\n data: searchObj\n });\n });\n\n $(window).on(\"load\", function () {\n var pixelPurchaseObj = $(\".pixel-purchase\").data(\"pixel-purchase\");\n if (pixelPurchaseObj) {\n $(\"body\").trigger(\"pixel:trackEvent\", {\n event: \"Purchase\",\n data: pixelPurchaseObj\n });\n }\n });\n};\n","var processInclude = require(\"base/util\");\n\n$(document).ready(function () {\n processInclude(require(\"./pinterestPixel\"));\n});\n","module.exports = function () {\n $(\"body\").on(\"pinterest:trackEvent\", function (event, data) {\n if (data && data.event) {\n pintrk('track', data.event, data.data); // eslint-disable-line\n console.log(\"Pinterest Pixel Test:\",\"event: \", data.event, \"object value if needed: \", data.data); // eslint-disable-line\n }\n });\n\n $(\"body\").on(\"pinterest:updateAddToCartData\", function (event, data) {\n var $pixelAddToCart = $(\".pinterest-add-to-cart\");\n\n if ($pixelAddToCart) {\n var pinterestAddToCartData = $pixelAddToCart.data(\"pinterest-add-to-cart\");\n\n if (pinterestAddToCartData && data) {\n var product;\n if (data.bundleProduct) {\n product = data.bundleProduct;\n } else if (data.product) {\n product = data.product;\n } else if (data.products) {\n product = data.products[0];\n }\n\n if (product) {\n var price = product.price.sales.value ? product.price.sales.value : product.price.list.value;\n var qty = product.selectedQuantity;\n\n if (price && qty) {\n price *= qty;\n pinterestAddToCartData.value = price;\n pinterestAddToCartData.order_quantity = qty;\n }\n\n pinterestAddToCartData.product_id = product.id;\n pinterestAddToCartData.content_ids = [product.id];\n }\n }\n\n $pixelAddToCart.data(\"pinterest-add-to-cart\", pinterestAddToCartData);\n }\n });\n\n $(document).on(\"click\", \"button.add-to-cart-drive-customizer\", function () {\n var pinterestAddToCartObj = $(\".pinterest-add-to-cart\").data(\"pinterest-add-to-cart\");\n $(\"body\").trigger(\"pinterest:trackEvent\", {\n event: \"addtocart\",\n data: pinterestAddToCartObj\n });\n });\n\n window.onload = function (e) {\n e.preventDefault();\n\n var pinterestCheckoutObj = $(\".pinterest-checkout\").data(\"pinterest-checkout\");\n if (pinterestCheckoutObj) {\n $(\"body\").trigger(\"pinterest:trackEvent\", {\n event: \"checkout\",\n data: pinterestCheckoutObj\n });\n }\n\n var pinterestPageViewObj = $(\".pinterest-page-view\").data(\"pinterest-page-view\");\n if (pinterestPageViewObj) {\n $(\"body\").trigger(\"pinterest:trackEvent\", {\n event: \"pageview\",\n data: pinterestPageViewObj\n });\n }\n };\n};\n","function validateForm() {\n var email = $(\"#email\").val().trim();\n\n if (email === \"\") {\n alert(\"Please enter your email address.\"); // eslint-disable-line no-alert\n return false;\n }\n\n return true;\n}\n\nfunction initModalFromContentAsset() {\n var modal = $(\"#myModal\");\n var contentAsset = modal.closest(\".content-asset\");\n var cookieName = contentAsset.data(\"cookie-name\");\n var cookieAge = contentAsset.data(\"cookie-age\");\n\n if (document.cookie.indexOf(cookieName + \"=true\") < 0) {\n modal.modal(\"show\");\n\n modal.find(\".close\").click(function () {\n modal.modal(\"hide\");\n document.cookie = cookieName + \"=true; max-age=\" + cookieAge + \"; path=/\";\n });\n }\n\n $(\"#newsletterform\").submit(function (e) {\n e.preventDefault();\n\n if (!validateForm()) {\n return;\n }\n\n var $form = $(this);\n var url = $form.attr(\"action\");\n var data = $form.serialize();\n $.ajax({\n url: url,\n type: \"POST\",\n data: data,\n success: function (response) { /* eslint-disable-line no-unused-vars */\n console.log(\"Form submitted\"); /* eslint-disable-line no-console */\n }\n });\n });\n}\n\nmodule.exports = {\n initModalFromContentAsset: initModalFromContentAsset\n};\n","require(\"bootstrap/js/src/util.js\");\nrequire(\"bootstrap/js/src/alert.js\");\n// require(\"bootstrap/js/src/button.js\");\nrequire(\"bootstrap/js/src/carousel.js\");\nrequire(\"bootstrap/js/src/collapse.js\");\nrequire(\"bootstrap/js/src/dropdown.js\");\nrequire(\"bootstrap/js/src/modal.js\");\nrequire(\"bootstrap/js/src/scrollspy.js\");\nrequire(\"bootstrap/js/src/tab.js\");\nrequire(\"bootstrap/js/src/tooltip.js\");\n// require(\"bootstrap/js/src/popover.js\");\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n}\n\nconst Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let 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 _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let 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 static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true,\n touch : true\n}\n\nconst DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean',\n touch : 'boolean'\n}\n\nconst Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n}\n\nconst Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHSTART : `touchstart${EVENT_KEY}`,\n TOUCHMOVE : `touchmove${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n POINTERDOWN : `pointerdown${EVENT_KEY}`,\n POINTERUP : `pointerup${EVENT_KEY}`,\n DRAG_START : `dragstart${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\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\nconst Selector = {\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\nconst PointerType = {\n TOUCH : 'touch',\n PEN : 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(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\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n 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 &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n 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(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n\n const 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.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex\n ? Direction.NEXT\n : Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\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 }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = (event) => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = (event) => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._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\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault())\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, (event) => start(event))\n $(this._element).on(Event.POINTERUP, (event) => end(event))\n\n this._element.classList.add(ClassName.POINTER_EVENT)\n } else {\n $(this._element).on(Event.TOUCHSTART, (event) => start(event))\n $(this._element).on(Event.TOUCHMOVE, (event) => move(event))\n $(this._element).on(Event.TOUCHEND, (event) => end(event))\n }\n }\n\n _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 case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode\n ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM))\n : []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1\n ? this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM))\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE))\n $(indicators)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\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 const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(ClassName.SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\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 const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, 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 data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const 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).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle : true,\n parent : ''\n}\n\nconst DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n}\n\nconst Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n}\n\nconst Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n}\n\nconst Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter((foundElem) => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\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 }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES))\n .filter((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.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)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\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 const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n const children = [].slice.call(parent.querySelectorAll(selector))\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$this.data(),\n ...typeof config === 'object' && config ? config : {}\n }\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, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.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 const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\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\nconst Selector = {\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\nconst 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\nconst Default = {\n offset : 0,\n flip : true,\n boundary : 'scrollParent',\n reference : 'toggle',\n display : 'dynamic'\n}\n\nconst DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean',\n boundary : '(string|element)',\n reference : '(string|element)',\n display : 'string'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(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 }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Disable totally Popper.js for Dropdown in Navbar\n if (!this._inNavbar) {\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 let 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\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\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 if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(ClassName.POSITION_STATIC)\n }\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\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 if ('ontouchstart' in document.documentElement &&\n $(parent).closest(Selector.NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n show() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(Selector.MENU)\n }\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {\n placement = AttachmentMap.RIGHT\n } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {\n placement = AttachmentMap.LEFT\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const 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 }\n\n // Disable Popper.js if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return popperConfig\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const 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 const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\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 $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _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)\n ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(Selector.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.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = parent.querySelector(Selector.DATA_TOGGLE)\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n}\n\nconst DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\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}\n\nconst Selector = {\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 * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(Selector.DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\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 this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach((htmlElement) => $(htmlElement).off(EVENT_KEY))\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 $(document).off(Event.FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\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 handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n 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 this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n\n if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {\n this._dialog.querySelector(Selector.MODAL_BODY).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.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE)\n ? ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\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 _adjustDialog() {\n const isModalOverflowing =\n 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 _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\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 const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(ClassName.OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY)\n ? 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset : 10,\n method : 'auto',\n target : ''\n}\n\nconst DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n}\n\nconst Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n}\n\nconst Selector = {\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\nconst OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},` +\n `${this._config.target} ${Selector.LIST_ITEMS},` +\n `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window\n ? OffsetMethod.OFFSET : OffsetMethod.POSITION\n\n const offsetMethod = this._config.method === 'auto'\n ? autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION\n ? this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\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 }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...typeof config === 'object' && config ? config : {}\n }\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window\n ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window\n ? window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset +\n scrollHeight -\n this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n const offsetLength = this._offsets.length\n for (let i = offsetLength; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map((selector) => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(Selector.NAV_LIST_GROUP).prev(`${Selector.NAV_LINKS}, ${Selector.LIST_ITEMS}`).addClass(ClassName.ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE)\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter((node) => node.classList.contains(ClassName.ACTIVE))\n .forEach((node) => node.classList.remove(ClassName.ACTIVE))\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(window).on(Event.LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n}\n\nconst ClassName = {\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active',\n DISABLED : 'disabled',\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\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 * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(ClassName.ACTIVE) ||\n $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(Event.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() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n })\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 dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL')\n ? $(container).find(Selector.ACTIVE_UL)\n : $(container).children(Selector.ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(ClassName.FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(ClassName.SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName.ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n Selector.DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(ClassName.ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(ClassName.ACTIVE)\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.FADE)) {\n element.classList.add(ClassName.SHOW)\n }\n\n if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(Selector.DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(ClassName.ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n","'use strict';\n\n/**\n * Show a spinner inside a given element\n * @param {element} $target - Element to block by the veil and spinner.\n * Pass body to block the whole page.\n */\nfunction addSpinner($target) {\n var $veil = $('<div class=\"veil\"><div class=\"underlay\"></div></div>');\n $veil.append('<div class=\"spinner\"><div class=\"dot1\"></div><div class=\"dot2\"></div></div>');\n if ($target.get(0).tagName === 'IMG') {\n $target.after($veil);\n $veil.css({ width: $target.width(), height: $target.height() });\n if ($target.parent().css('position') === 'static') {\n $target.parent().css('position', 'relative');\n }\n } else {\n $target.append($veil);\n if ($target.css('position') === 'static') {\n $target.parent().css('position', 'relative');\n $target.parent().addClass('veiled');\n }\n if ($target.get(0).tagName === 'BODY') {\n $veil.find('.spinner').css('position', 'fixed');\n }\n }\n $veil.click(function (e) {\n e.stopPropagation();\n });\n}\n\n/**\n * Remove existing spinner\n * @param {element} $veil - jQuery pointer to the veil element\n */\nfunction removeSpinner($veil) {\n if ($veil.parent().hasClass('veiled')) {\n $veil.parent().css('position', '');\n $veil.parent().removeClass('veiled');\n }\n $veil.off('click');\n $veil.remove();\n}\n\n// element level spinner:\n$.fn.spinner = function () {\n var $element = $(this);\n var Fn = function () {\n this.start = function () {\n if ($element.length) {\n addSpinner($element);\n }\n };\n this.stop = function () {\n if ($element.length) {\n var $veil = $('.veil');\n removeSpinner($veil);\n }\n };\n };\n return new Fn();\n};\n\n// page-level spinner:\n$.spinner = function () {\n var Fn = function () {\n this.start = function () {\n addSpinner($('body'));\n };\n this.stop = function () {\n removeSpinner($('.veil'));\n };\n };\n return new Fn();\n};\n","/*!\n* inputmask.js\n* https://github.com/RobinHerbots/Inputmask\n* Copyright (c) 2010 - 2019 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 4.0.9\n*/\n\n(function(factory) {\n if (typeof define === \"function\" && define.amd) {\n define([ \"./dependencyLibs/inputmask.dependencyLib\", \"./global/window\" ], factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory(require(\"./dependencyLibs/inputmask.dependencyLib\"), require(\"./global/window\"));\n } else {\n window.Inputmask = factory(window.dependencyLib || jQuery, window);\n }\n})(function($, window, undefined) {\n var document = window.document, ua = navigator.userAgent, ie = ua.indexOf(\"MSIE \") > 0 || ua.indexOf(\"Trident/\") > 0, mobile = isInputEventSupported(\"touchstart\"), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile;\n function Inputmask(alias, options, internal) {\n if (!(this instanceof Inputmask)) {\n return new Inputmask(alias, options, internal);\n }\n this.el = undefined;\n this.events = {};\n this.maskset = undefined;\n this.refreshValue = false;\n if (internal !== true) {\n if ($.isPlainObject(alias)) {\n options = alias;\n } else {\n options = options || {};\n if (alias) options.alias = alias;\n }\n this.opts = $.extend(true, {}, this.defaults, options);\n this.noMasksCache = options && options.definitions !== undefined;\n this.userOptions = options || {};\n this.isRTL = this.opts.numericInput;\n resolveAlias(this.opts.alias, options, this.opts);\n }\n }\n Inputmask.prototype = {\n dataAttribute: \"data-inputmask\",\n defaults: {\n placeholder: \"_\",\n optionalmarker: [ \"[\", \"]\" ],\n quantifiermarker: [ \"{\", \"}\" ],\n groupmarker: [ \"(\", \")\" ],\n alternatormarker: \"|\",\n escapeChar: \"\\\\\",\n mask: null,\n regex: null,\n oncomplete: $.noop,\n onincomplete: $.noop,\n oncleared: $.noop,\n repeat: 0,\n greedy: false,\n autoUnmask: false,\n removeMaskOnSubmit: false,\n clearMaskOnLostFocus: true,\n insertMode: true,\n clearIncomplete: false,\n alias: null,\n onKeyDown: $.noop,\n onBeforeMask: null,\n onBeforePaste: function(pastedValue, opts) {\n return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(this, pastedValue, opts) : pastedValue;\n },\n onBeforeWrite: null,\n onUnMask: null,\n showMaskOnFocus: true,\n showMaskOnHover: true,\n onKeyValidation: $.noop,\n skipOptionalPartCharacter: \" \",\n numericInput: false,\n rightAlign: false,\n undoOnEscape: true,\n radixPoint: \"\",\n _radixDance: false,\n groupSeparator: \"\",\n keepStatic: null,\n positionCaretOnTab: true,\n tabThrough: false,\n supportsInputType: [ \"text\", \"tel\", \"url\", \"password\", \"search\" ],\n ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],\n isComplete: null,\n preValidation: null,\n postValidation: null,\n staticDefinitionSymbol: undefined,\n jitMasking: false,\n nullable: true,\n inputEventOnly: false,\n noValuePatching: false,\n positionCaretOnClick: \"lvp\",\n casing: null,\n inputmode: \"verbatim\",\n colorMask: false,\n disablePredictiveText: false,\n importDataAttributes: true,\n shiftPositions: true\n },\n definitions: {\n 9: {\n validator: \"[0-9\\uff11-\\uff19]\",\n definitionSymbol: \"*\"\n },\n a: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n definitionSymbol: \"*\"\n },\n \"*\": {\n validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\"\n }\n },\n aliases: {},\n masksCache: {},\n mask: function(elems) {\n var that = this;\n function importAttributeOptions(npt, opts, userOptions, dataAttribute) {\n if (opts.importDataAttributes === true) {\n var attrOptions = npt.getAttribute(dataAttribute), option, dataoptions, optionData, p;\n var importOption = function(option, optionData) {\n optionData = optionData !== undefined ? optionData : npt.getAttribute(dataAttribute + \"-\" + option);\n if (optionData !== null) {\n if (typeof optionData === \"string\") {\n if (option.indexOf(\"on\") === 0) optionData = window[optionData]; else if (optionData === \"false\") optionData = false; else if (optionData === \"true\") optionData = true;\n }\n userOptions[option] = optionData;\n }\n };\n if (attrOptions && attrOptions !== \"\") {\n attrOptions = attrOptions.replace(/'/g, '\"');\n dataoptions = JSON.parse(\"{\" + attrOptions + \"}\");\n }\n if (dataoptions) {\n optionData = undefined;\n for (p in dataoptions) {\n if (p.toLowerCase() === \"alias\") {\n optionData = dataoptions[p];\n break;\n }\n }\n }\n importOption(\"alias\", optionData);\n if (userOptions.alias) {\n resolveAlias(userOptions.alias, userOptions, opts);\n }\n for (option in opts) {\n if (dataoptions) {\n optionData = undefined;\n for (p in dataoptions) {\n if (p.toLowerCase() === option.toLowerCase()) {\n optionData = dataoptions[p];\n break;\n }\n }\n }\n importOption(option, optionData);\n }\n }\n $.extend(true, opts, userOptions);\n if (npt.dir === \"rtl\" || opts.rightAlign) {\n npt.style.textAlign = \"right\";\n }\n if (npt.dir === \"rtl\" || opts.numericInput) {\n npt.dir = \"ltr\";\n npt.removeAttribute(\"dir\");\n opts.isRTL = true;\n }\n return Object.keys(userOptions).length;\n }\n if (typeof elems === \"string\") {\n elems = document.getElementById(elems) || document.querySelectorAll(elems);\n }\n elems = elems.nodeName ? [ elems ] : elems;\n $.each(elems, function(ndx, el) {\n var scopedOpts = $.extend(true, {}, that.opts);\n if (importAttributeOptions(el, scopedOpts, $.extend(true, {}, that.userOptions), that.dataAttribute)) {\n var maskset = generateMaskSet(scopedOpts, that.noMasksCache);\n if (maskset !== undefined) {\n if (el.inputmask !== undefined) {\n el.inputmask.opts.autoUnmask = true;\n el.inputmask.remove();\n }\n el.inputmask = new Inputmask(undefined, undefined, true);\n el.inputmask.opts = scopedOpts;\n el.inputmask.noMasksCache = that.noMasksCache;\n el.inputmask.userOptions = $.extend(true, {}, that.userOptions);\n el.inputmask.isRTL = scopedOpts.isRTL || scopedOpts.numericInput;\n el.inputmask.el = el;\n el.inputmask.maskset = maskset;\n $.data(el, \"_inputmask_opts\", scopedOpts);\n maskScope.call(el.inputmask, {\n action: \"mask\"\n });\n }\n }\n });\n return elems && elems[0] ? elems[0].inputmask || this : this;\n },\n option: function(options, noremask) {\n if (typeof options === \"string\") {\n return this.opts[options];\n } else if (typeof options === \"object\") {\n $.extend(this.userOptions, options);\n if (this.el && noremask !== true) {\n this.mask(this.el);\n }\n return this;\n }\n },\n unmaskedvalue: function(value) {\n this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache);\n return maskScope.call(this, {\n action: \"unmaskedvalue\",\n value: value\n });\n },\n remove: function() {\n return maskScope.call(this, {\n action: \"remove\"\n });\n },\n getemptymask: function() {\n this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache);\n return maskScope.call(this, {\n action: \"getemptymask\"\n });\n },\n hasMaskedValue: function() {\n return !this.opts.autoUnmask;\n },\n isComplete: function() {\n this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache);\n return maskScope.call(this, {\n action: \"isComplete\"\n });\n },\n getmetadata: function() {\n this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache);\n return maskScope.call(this, {\n action: \"getmetadata\"\n });\n },\n isValid: function(value) {\n this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache);\n return maskScope.call(this, {\n action: \"isValid\",\n value: value\n });\n },\n format: function(value, metadata) {\n this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache);\n return maskScope.call(this, {\n action: \"format\",\n value: value,\n metadata: metadata\n });\n },\n setValue: function(value) {\n if (this.el) {\n $(this.el).trigger(\"setvalue\", [ value ]);\n }\n },\n analyseMask: function(mask, regexMask, opts) {\n var tokenizer = /(?:[?*+]|\\{[0-9\\+\\*]+(?:,[0-9\\+\\*]*)?(?:\\|[0-9\\+\\*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, regexTokenizer = /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g, escaped = false, currentToken = new MaskToken(), match, m, openenings = [], maskTokens = [], openingToken, currentOpeningToken, alternator, lastMatch, groupToken;\n function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {\n this.matches = [];\n this.openGroup = isGroup || false;\n this.alternatorGroup = false;\n this.isGroup = isGroup || false;\n this.isOptional = isOptional || false;\n this.isQuantifier = isQuantifier || false;\n this.isAlternator = isAlternator || false;\n this.quantifier = {\n min: 1,\n max: 1\n };\n }\n function insertTestDefinition(mtoken, element, position) {\n position = position !== undefined ? position : mtoken.matches.length;\n var prevMatch = mtoken.matches[position - 1];\n if (regexMask) {\n if (element.indexOf(\"[\") === 0 || escaped && /\\\\d|\\\\s|\\\\w]/i.test(element) || element === \".\") {\n mtoken.matches.splice(position++, 0, {\n fn: new RegExp(element, opts.casing ? \"i\" : \"\"),\n optionality: false,\n newBlockMarker: prevMatch === undefined ? \"master\" : prevMatch.def !== element,\n casing: null,\n def: element,\n placeholder: undefined,\n nativeDef: element\n });\n } else {\n if (escaped) element = element[element.length - 1];\n $.each(element.split(\"\"), function(ndx, lmnt) {\n prevMatch = mtoken.matches[position - 1];\n mtoken.matches.splice(position++, 0, {\n fn: null,\n optionality: false,\n newBlockMarker: prevMatch === undefined ? \"master\" : prevMatch.def !== lmnt && prevMatch.fn !== null,\n casing: null,\n def: opts.staticDefinitionSymbol || lmnt,\n placeholder: opts.staticDefinitionSymbol !== undefined ? lmnt : undefined,\n nativeDef: (escaped ? \"'\" : \"\") + lmnt\n });\n });\n }\n escaped = false;\n } else {\n var maskdef = (opts.definitions ? opts.definitions[element] : undefined) || Inputmask.prototype.definitions[element];\n if (maskdef && !escaped) {\n mtoken.matches.splice(position++, 0, {\n fn: maskdef.validator ? typeof maskdef.validator == \"string\" ? new RegExp(maskdef.validator, opts.casing ? \"i\" : \"\") : new function() {\n this.test = maskdef.validator;\n }() : new RegExp(\".\"),\n optionality: false,\n newBlockMarker: prevMatch === undefined ? \"master\" : prevMatch.def !== (maskdef.definitionSymbol || element),\n casing: maskdef.casing,\n def: maskdef.definitionSymbol || element,\n placeholder: maskdef.placeholder,\n nativeDef: element\n });\n } else {\n mtoken.matches.splice(position++, 0, {\n fn: null,\n optionality: false,\n newBlockMarker: prevMatch === undefined ? \"master\" : prevMatch.def !== element && prevMatch.fn !== null,\n casing: null,\n def: opts.staticDefinitionSymbol || element,\n placeholder: opts.staticDefinitionSymbol !== undefined ? element : undefined,\n nativeDef: (escaped ? \"'\" : \"\") + element\n });\n escaped = false;\n }\n }\n }\n function verifyGroupMarker(maskToken) {\n if (maskToken && maskToken.matches) {\n $.each(maskToken.matches, function(ndx, token) {\n var nextToken = maskToken.matches[ndx + 1];\n if ((nextToken === undefined || (nextToken.matches === undefined || nextToken.isQuantifier === false)) && token && token.isGroup) {\n token.isGroup = false;\n if (!regexMask) {\n insertTestDefinition(token, opts.groupmarker[0], 0);\n if (token.openGroup !== true) {\n insertTestDefinition(token, opts.groupmarker[1]);\n }\n }\n }\n verifyGroupMarker(token);\n });\n }\n }\n function defaultCase() {\n if (openenings.length > 0) {\n currentOpeningToken = openenings[openenings.length - 1];\n insertTestDefinition(currentOpeningToken, m);\n if (currentOpeningToken.isAlternator) {\n alternator = openenings.pop();\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) {\n if (alternator.matches[mndx].isGroup) alternator.matches[mndx].isGroup = false;\n }\n if (openenings.length > 0) {\n currentOpeningToken = openenings[openenings.length - 1];\n currentOpeningToken.matches.push(alternator);\n } else {\n currentToken.matches.push(alternator);\n }\n }\n } else {\n insertTestDefinition(currentToken, m);\n }\n }\n function reverseTokens(maskToken) {\n function reverseStatic(st) {\n if (st === opts.optionalmarker[0]) st = opts.optionalmarker[1]; else if (st === opts.optionalmarker[1]) st = opts.optionalmarker[0]; else if (st === opts.groupmarker[0]) st = opts.groupmarker[1]; else if (st === opts.groupmarker[1]) st = opts.groupmarker[0];\n return st;\n }\n maskToken.matches = maskToken.matches.reverse();\n for (var match in maskToken.matches) {\n if (maskToken.matches.hasOwnProperty(match)) {\n var intMatch = parseInt(match);\n if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {\n var qt = maskToken.matches[match];\n maskToken.matches.splice(match, 1);\n maskToken.matches.splice(intMatch + 1, 0, qt);\n }\n if (maskToken.matches[match].matches !== undefined) {\n maskToken.matches[match] = reverseTokens(maskToken.matches[match]);\n } else {\n maskToken.matches[match] = reverseStatic(maskToken.matches[match]);\n }\n }\n }\n return maskToken;\n }\n function groupify(matches) {\n var groupToken = new MaskToken(true);\n groupToken.openGroup = false;\n groupToken.matches = matches;\n return groupToken;\n }\n if (regexMask) {\n opts.optionalmarker[0] = undefined;\n opts.optionalmarker[1] = undefined;\n }\n while (match = regexMask ? regexTokenizer.exec(mask) : tokenizer.exec(mask)) {\n m = match[0];\n if (regexMask) {\n switch (m.charAt(0)) {\n case \"?\":\n m = \"{0,1}\";\n break;\n\n case \"+\":\n case \"*\":\n m = \"{\" + m + \"}\";\n break;\n }\n }\n if (escaped) {\n defaultCase();\n continue;\n }\n switch (m.charAt(0)) {\n case \"(?=\":\n break;\n\n case \"(?!\":\n break;\n\n case \"(?<=\":\n break;\n\n case \"(?<!\":\n break;\n\n case opts.escapeChar:\n escaped = true;\n if (regexMask) {\n defaultCase();\n }\n break;\n\n case opts.optionalmarker[1]:\n case opts.groupmarker[1]:\n openingToken = openenings.pop();\n openingToken.openGroup = false;\n if (openingToken !== undefined) {\n if (openenings.length > 0) {\n currentOpeningToken = openenings[openenings.length - 1];\n currentOpeningToken.matches.push(openingToken);\n if (currentOpeningToken.isAlternator) {\n alternator = openenings.pop();\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) {\n alternator.matches[mndx].isGroup = false;\n alternator.matches[mndx].alternatorGroup = false;\n }\n if (openenings.length > 0) {\n currentOpeningToken = openenings[openenings.length - 1];\n currentOpeningToken.matches.push(alternator);\n } else {\n currentToken.matches.push(alternator);\n }\n }\n } else {\n currentToken.matches.push(openingToken);\n }\n } else defaultCase();\n break;\n\n case opts.optionalmarker[0]:\n openenings.push(new MaskToken(false, true));\n break;\n\n case opts.groupmarker[0]:\n openenings.push(new MaskToken(true));\n break;\n\n case opts.quantifiermarker[0]:\n var quantifier = new MaskToken(false, false, true);\n m = m.replace(/[{}]/g, \"\");\n var mqj = m.split(\"|\"), mq = mqj[0].split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = mq.length === 1 ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\n if (mq0 === \"*\" || mq0 === \"+\") {\n mq0 = mq1 === \"*\" ? 0 : 1;\n }\n quantifier.quantifier = {\n min: mq0,\n max: mq1,\n jit: mqj[1]\n };\n var matches = openenings.length > 0 ? openenings[openenings.length - 1].matches : currentToken.matches;\n match = matches.pop();\n if (match.isAlternator) {\n matches.push(match);\n matches = match.matches;\n var groupToken = new MaskToken(true);\n var tmpMatch = matches.pop();\n matches.push(groupToken);\n matches = groupToken.matches;\n match = tmpMatch;\n }\n if (!match.isGroup) {\n match = groupify([ match ]);\n }\n matches.push(match);\n matches.push(quantifier);\n break;\n\n case opts.alternatormarker:\n var groupQuantifier = function(matches) {\n var lastMatch = matches.pop();\n if (lastMatch.isQuantifier) {\n lastMatch = groupify([ matches.pop(), lastMatch ]);\n }\n return lastMatch;\n };\n if (openenings.length > 0) {\n currentOpeningToken = openenings[openenings.length - 1];\n var subToken = currentOpeningToken.matches[currentOpeningToken.matches.length - 1];\n if (currentOpeningToken.openGroup && (subToken.matches === undefined || subToken.isGroup === false && subToken.isAlternator === false)) {\n lastMatch = openenings.pop();\n } else {\n lastMatch = groupQuantifier(currentOpeningToken.matches);\n }\n } else {\n lastMatch = groupQuantifier(currentToken.matches);\n }\n if (lastMatch.isAlternator) {\n openenings.push(lastMatch);\n } else {\n if (lastMatch.alternatorGroup) {\n alternator = openenings.pop();\n lastMatch.alternatorGroup = false;\n } else {\n alternator = new MaskToken(false, false, false, true);\n }\n alternator.matches.push(lastMatch);\n openenings.push(alternator);\n if (lastMatch.openGroup) {\n lastMatch.openGroup = false;\n var alternatorGroup = new MaskToken(true);\n alternatorGroup.alternatorGroup = true;\n openenings.push(alternatorGroup);\n }\n }\n break;\n\n default:\n defaultCase();\n }\n }\n while (openenings.length > 0) {\n openingToken = openenings.pop();\n currentToken.matches.push(openingToken);\n }\n if (currentToken.matches.length > 0) {\n verifyGroupMarker(currentToken);\n maskTokens.push(currentToken);\n }\n if (opts.numericInput || opts.isRTL) {\n reverseTokens(maskTokens[0]);\n }\n return maskTokens;\n },\n positionColorMask: function(input, template) {\n input.style.left = template.offsetLeft + \"px\";\n }\n };\n Inputmask.extendDefaults = function(options) {\n $.extend(true, Inputmask.prototype.defaults, options);\n };\n Inputmask.extendDefinitions = function(definition) {\n $.extend(true, Inputmask.prototype.definitions, definition);\n };\n Inputmask.extendAliases = function(alias) {\n $.extend(true, Inputmask.prototype.aliases, alias);\n };\n Inputmask.format = function(value, options, metadata) {\n return Inputmask(options).format(value, metadata);\n };\n Inputmask.unmask = function(value, options) {\n return Inputmask(options).unmaskedvalue(value);\n };\n Inputmask.isValid = function(value, options) {\n return Inputmask(options).isValid(value);\n };\n Inputmask.remove = function(elems) {\n if (typeof elems === \"string\") {\n elems = document.getElementById(elems) || document.querySelectorAll(elems);\n }\n elems = elems.nodeName ? [ elems ] : elems;\n $.each(elems, function(ndx, el) {\n if (el.inputmask) el.inputmask.remove();\n });\n };\n Inputmask.setValue = function(elems, value) {\n if (typeof elems === \"string\") {\n elems = document.getElementById(elems) || document.querySelectorAll(elems);\n }\n elems = elems.nodeName ? [ elems ] : elems;\n $.each(elems, function(ndx, el) {\n if (el.inputmask) el.inputmask.setValue(value); else $(el).trigger(\"setvalue\", [ value ]);\n });\n };\n Inputmask.escapeRegex = function(str) {\n var specials = [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ];\n return str.replace(new RegExp(\"(\\\\\" + specials.join(\"|\\\\\") + \")\", \"gim\"), \"\\\\$1\");\n };\n Inputmask.keyCode = {\n BACKSPACE: 8,\n BACKSPACE_SAFARI: 127,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n INSERT: 45,\n LEFT: 37,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n RIGHT: 39,\n SPACE: 32,\n TAB: 9,\n UP: 38,\n X: 88,\n CONTROL: 17\n };\n Inputmask.dependencyLib = $;\n function resolveAlias(aliasStr, options, opts) {\n var aliasDefinition = Inputmask.prototype.aliases[aliasStr];\n if (aliasDefinition) {\n if (aliasDefinition.alias) resolveAlias(aliasDefinition.alias, undefined, opts);\n $.extend(true, opts, aliasDefinition);\n $.extend(true, opts, options);\n return true;\n } else if (opts.mask === null) {\n opts.mask = aliasStr;\n }\n return false;\n }\n function generateMaskSet(opts, nocache) {\n function generateMask(mask, metadata, opts) {\n var regexMask = false;\n if (mask === null || mask === \"\") {\n regexMask = opts.regex !== null;\n if (regexMask) {\n mask = opts.regex;\n mask = mask.replace(/^(\\^)(.*)(\\$)$/, \"$2\");\n } else {\n regexMask = true;\n mask = \".*\";\n }\n }\n if (mask.length === 1 && opts.greedy === false && opts.repeat !== 0) {\n opts.placeholder = \"\";\n }\n if (opts.repeat > 0 || opts.repeat === \"*\" || opts.repeat === \"+\") {\n var repeatStart = opts.repeat === \"*\" ? 0 : opts.repeat === \"+\" ? 1 : opts.repeat;\n mask = opts.groupmarker[0] + mask + opts.groupmarker[1] + opts.quantifiermarker[0] + repeatStart + \",\" + opts.repeat + opts.quantifiermarker[1];\n }\n var masksetDefinition, maskdefKey = regexMask ? \"regex_\" + opts.regex : opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask;\n if (Inputmask.prototype.masksCache[maskdefKey] === undefined || nocache === true) {\n masksetDefinition = {\n mask: mask,\n maskToken: Inputmask.prototype.analyseMask(mask, regexMask, opts),\n validPositions: {},\n _buffer: undefined,\n buffer: undefined,\n tests: {},\n excludes: {},\n metadata: metadata,\n maskLength: undefined,\n jitOffset: {}\n };\n if (nocache !== true) {\n Inputmask.prototype.masksCache[maskdefKey] = masksetDefinition;\n masksetDefinition = $.extend(true, {}, Inputmask.prototype.masksCache[maskdefKey]);\n }\n } else masksetDefinition = $.extend(true, {}, Inputmask.prototype.masksCache[maskdefKey]);\n return masksetDefinition;\n }\n var ms;\n if ($.isFunction(opts.mask)) {\n opts.mask = opts.mask(opts);\n }\n if ($.isArray(opts.mask)) {\n if (opts.mask.length > 1) {\n if (opts.keepStatic === null) {\n opts.keepStatic = \"auto\";\n for (var i = 0; i < opts.mask.length; i++) {\n if (opts.mask[i].charAt(0) !== opts.mask[0].charAt(0)) {\n opts.keepStatic = true;\n break;\n }\n }\n }\n var altMask = opts.groupmarker[0];\n $.each(opts.isRTL ? opts.mask.reverse() : opts.mask, function(ndx, msk) {\n if (altMask.length > 1) {\n altMask += opts.groupmarker[1] + opts.alternatormarker + opts.groupmarker[0];\n }\n if (msk.mask !== undefined && !$.isFunction(msk.mask)) {\n altMask += msk.mask;\n } else {\n altMask += msk;\n }\n });\n altMask += opts.groupmarker[1];\n return generateMask(altMask, opts.mask, opts);\n } else opts.mask = opts.mask.pop();\n }\n if (opts.mask && opts.mask.mask !== undefined && !$.isFunction(opts.mask.mask)) {\n ms = generateMask(opts.mask.mask, opts.mask, opts);\n } else {\n ms = generateMask(opts.mask, opts.mask, opts);\n }\n return ms;\n }\n function isInputEventSupported(eventName) {\n var el = document.createElement(\"input\"), evName = \"on\" + eventName, isSupported = evName in el;\n if (!isSupported) {\n el.setAttribute(evName, \"return;\");\n isSupported = typeof el[evName] === \"function\";\n }\n el = null;\n return isSupported;\n }\n function maskScope(actionObj, maskset, opts) {\n maskset = maskset || this.maskset;\n opts = opts || this.opts;\n var inputmask = this, el = this.el, isRTL = this.isRTL, undoValue, $el, skipKeyPressEvent = false, skipInputEvent = false, ignorable = false, maxLength, mouseEnter = false, colorMask, originalPlaceholder;\n var getMaskTemplate = function(baseOnInput, minimalPos, includeMode, noJit, clearOptionalTail) {\n var greedy = opts.greedy;\n if (clearOptionalTail) opts.greedy = false;\n minimalPos = minimalPos || 0;\n var maskTemplate = [], ndxIntlzr, pos = 0, test, testPos, lvp = getLastValidPosition();\n do {\n if (baseOnInput === true && getMaskSet().validPositions[pos]) {\n testPos = clearOptionalTail && getMaskSet().validPositions[pos].match.optionality === true && getMaskSet().validPositions[pos + 1] === undefined && (getMaskSet().validPositions[pos].generatedInput === true || getMaskSet().validPositions[pos].input == opts.skipOptionalPartCharacter && pos > 0) ? determineTestTemplate(pos, getTests(pos, ndxIntlzr, pos - 1)) : getMaskSet().validPositions[pos];\n test = testPos.match;\n ndxIntlzr = testPos.locator.slice();\n maskTemplate.push(includeMode === true ? testPos.input : includeMode === false ? test.nativeDef : getPlaceholder(pos, test));\n } else {\n testPos = getTestTemplate(pos, ndxIntlzr, pos - 1);\n test = testPos.match;\n ndxIntlzr = testPos.locator.slice();\n var jitMasking = noJit === true ? false : opts.jitMasking !== false ? opts.jitMasking : test.jit;\n if (jitMasking === false || jitMasking === undefined || typeof jitMasking === \"number\" && isFinite(jitMasking) && jitMasking > pos) {\n maskTemplate.push(includeMode === false ? test.nativeDef : getPlaceholder(pos, test));\n }\n }\n if (opts.keepStatic === \"auto\") {\n if (test.newBlockMarker && test.fn !== null) {\n opts.keepStatic = pos - 1;\n }\n }\n pos++;\n } while ((maxLength === undefined || pos < maxLength) && (test.fn !== null || test.def !== \"\") || minimalPos > pos);\n if (maskTemplate[maskTemplate.length - 1] === \"\") {\n maskTemplate.pop();\n }\n if (includeMode !== false || getMaskSet().maskLength === undefined) getMaskSet().maskLength = pos - 1;\n opts.greedy = greedy;\n return maskTemplate;\n };\n function getMaskSet() {\n return maskset;\n }\n function resetMaskSet(soft) {\n var maskset = getMaskSet();\n maskset.buffer = undefined;\n if (soft !== true) {\n maskset.validPositions = {};\n maskset.p = 0;\n }\n }\n function getLastValidPosition(closestTo, strict, validPositions) {\n var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;\n if (closestTo === undefined) closestTo = -1;\n for (var posNdx in valids) {\n var psNdx = parseInt(posNdx);\n if (valids[psNdx] && (strict || valids[psNdx].generatedInput !== true)) {\n if (psNdx <= closestTo) before = psNdx;\n if (psNdx >= closestTo) after = psNdx;\n }\n }\n return before === -1 || before == closestTo ? after : after == -1 ? before : closestTo - before < after - closestTo ? before : after;\n }\n function getDecisionTaker(tst) {\n var decisionTaker = tst.locator[tst.alternation];\n if (typeof decisionTaker == \"string\" && decisionTaker.length > 0) {\n decisionTaker = decisionTaker.split(\",\")[0];\n }\n return decisionTaker !== undefined ? decisionTaker.toString() : \"\";\n }\n function getLocator(tst, align) {\n var locator = (tst.alternation != undefined ? tst.mloc[getDecisionTaker(tst)] : tst.locator).join(\"\");\n if (locator !== \"\") while (locator.length < align) locator += \"0\";\n return locator;\n }\n function determineTestTemplate(pos, tests) {\n pos = pos > 0 ? pos - 1 : 0;\n var altTest = getTest(pos), targetLocator = getLocator(altTest), tstLocator, closest, bestMatch;\n for (var ndx = 0; ndx < tests.length; ndx++) {\n var tst = tests[ndx];\n tstLocator = getLocator(tst, targetLocator.length);\n var distance = Math.abs(tstLocator - targetLocator);\n if (closest === undefined || tstLocator !== \"\" && distance < closest || bestMatch && !opts.greedy && bestMatch.match.optionality && bestMatch.match.newBlockMarker === \"master\" && (!tst.match.optionality || !tst.match.newBlockMarker) || bestMatch && bestMatch.match.optionalQuantifier && !tst.match.optionalQuantifier) {\n closest = distance;\n bestMatch = tst;\n }\n }\n return bestMatch;\n }\n function getTestTemplate(pos, ndxIntlzr, tstPs) {\n return getMaskSet().validPositions[pos] || determineTestTemplate(pos, getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));\n }\n function getTest(pos, tests) {\n if (getMaskSet().validPositions[pos]) {\n return getMaskSet().validPositions[pos];\n }\n return (tests || getTests(pos))[0];\n }\n function positionCanMatchDefinition(pos, def) {\n var valid = false, tests = getTests(pos);\n for (var tndx = 0; tndx < tests.length; tndx++) {\n if (tests[tndx].match && tests[tndx].match.def === def) {\n valid = true;\n break;\n }\n }\n return valid;\n }\n function getTests(pos, ndxIntlzr, tstPs) {\n var maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = false, latestMatch, cacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\n function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {\n function handleMatch(match, loopNdx, quantifierRecurse) {\n function isFirstMatch(latestMatch, tokenGroup) {\n var firstMatch = $.inArray(latestMatch, tokenGroup.matches) === 0;\n if (!firstMatch) {\n $.each(tokenGroup.matches, function(ndx, match) {\n if (match.isQuantifier === true) firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]); else if (match.hasOwnProperty(\"matches\")) firstMatch = isFirstMatch(latestMatch, match);\n if (firstMatch) return false;\n });\n }\n return firstMatch;\n }\n function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {\n var bestMatch, indexPos;\n if (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) {\n $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {\n if (lmnt.mloc[alternateNdx]) {\n bestMatch = lmnt;\n return false;\n }\n var alternation = targetAlternation !== undefined ? targetAlternation : lmnt.alternation, ndxPos = lmnt.locator[alternation] !== undefined ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;\n if ((indexPos === undefined || ndxPos < indexPos) && ndxPos !== -1) {\n bestMatch = lmnt;\n indexPos = ndxPos;\n }\n });\n }\n if (bestMatch) {\n var bestMatchAltIndex = bestMatch.locator[bestMatch.alternation];\n var locator = bestMatch.mloc[alternateNdx] || bestMatch.mloc[bestMatchAltIndex] || bestMatch.locator;\n return locator.slice((targetAlternation !== undefined ? targetAlternation : bestMatch.alternation) + 1);\n } else {\n return targetAlternation !== undefined ? resolveNdxInitializer(pos, alternateNdx) : undefined;\n }\n }\n function isSubsetOf(source, target) {\n function expand(pattern) {\n var expanded = [], start, end;\n for (var i = 0, l = pattern.length; i < l; i++) {\n if (pattern.charAt(i) === \"-\") {\n end = pattern.charCodeAt(i + 1);\n while (++start < end) expanded.push(String.fromCharCode(start));\n } else {\n start = pattern.charCodeAt(i);\n expanded.push(pattern.charAt(i));\n }\n }\n return expanded.join(\"\");\n }\n if (opts.regex && source.match.fn !== null && target.match.fn !== null) {\n return expand(target.match.def.replace(/[\\[\\]]/g, \"\")).indexOf(expand(source.match.def.replace(/[\\[\\]]/g, \"\"))) !== -1;\n }\n return source.match.def === target.match.nativeDef;\n }\n function staticCanMatchDefinition(source, target) {\n var sloc = source.locator.slice(source.alternation).join(\"\"), tloc = target.locator.slice(target.alternation).join(\"\"), canMatch = sloc == tloc;\n canMatch = canMatch && source.match.fn === null && target.match.fn !== null ? target.match.fn.test(source.match.def, getMaskSet(), pos, false, opts, false) : false;\n return canMatch;\n }\n function setMergeLocators(targetMatch, altMatch) {\n if (altMatch === undefined || targetMatch.alternation === altMatch.alternation && targetMatch.locator[targetMatch.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1) {\n targetMatch.mloc = targetMatch.mloc || {};\n var locNdx = targetMatch.locator[targetMatch.alternation];\n if (locNdx === undefined) targetMatch.alternation = undefined; else {\n if (typeof locNdx === \"string\") locNdx = locNdx.split(\",\")[0];\n if (targetMatch.mloc[locNdx] === undefined) targetMatch.mloc[locNdx] = targetMatch.locator.slice();\n if (altMatch !== undefined) {\n for (var ndx in altMatch.mloc) {\n if (typeof ndx === \"string\") ndx = ndx.split(\",\")[0];\n if (targetMatch.mloc[ndx] === undefined) targetMatch.mloc[ndx] = altMatch.mloc[ndx];\n }\n targetMatch.locator[targetMatch.alternation] = Object.keys(targetMatch.mloc).join(\",\");\n }\n return true;\n }\n }\n return false;\n }\n if (testPos > 500 && quantifierRecurse !== undefined) {\n throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + getMaskSet().mask;\n }\n if (testPos === pos && match.matches === undefined) {\n matches.push({\n match: match,\n locator: loopNdx.reverse(),\n cd: cacheDependency,\n mloc: {}\n });\n return true;\n } else if (match.matches !== undefined) {\n if (match.isGroup && quantifierRecurse !== match) {\n match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx, quantifierRecurse);\n if (match) return true;\n } else if (match.isOptional) {\n var optionalToken = match;\n match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse);\n if (match) {\n $.each(matches, function(ndx, mtch) {\n mtch.match.optionality = true;\n });\n latestMatch = matches[matches.length - 1].match;\n if (quantifierRecurse === undefined && isFirstMatch(latestMatch, optionalToken)) {\n insertStop = true;\n testPos = pos;\n } else return true;\n }\n } else if (match.isAlternator) {\n var alternateToken = match, malternateMatches = [], maltMatches, currentMatches = matches.slice(), loopNdxCnt = loopNdx.length;\n var altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;\n if (altIndex === -1 || typeof altIndex === \"string\") {\n var currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [], amndx;\n if (typeof altIndex == \"string\") {\n altIndexArr = altIndex.split(\",\");\n } else {\n for (amndx = 0; amndx < alternateToken.matches.length; amndx++) {\n altIndexArr.push(amndx.toString());\n }\n }\n if (getMaskSet().excludes[pos]) {\n var altIndexArrClone = altIndexArr.slice();\n for (var i = 0, el = getMaskSet().excludes[pos].length; i < el; i++) {\n altIndexArr.splice(altIndexArr.indexOf(getMaskSet().excludes[pos][i].toString()), 1);\n }\n if (altIndexArr.length === 0) {\n getMaskSet().excludes[pos] = undefined;\n altIndexArr = altIndexArrClone;\n }\n }\n if (opts.keepStatic === true || isFinite(parseInt(opts.keepStatic)) && currentPos >= opts.keepStatic) altIndexArr = altIndexArr.slice(0, 1);\n var unMatchedAlternation = false;\n for (var ndx = 0; ndx < altIndexArr.length; ndx++) {\n amndx = parseInt(altIndexArr[ndx]);\n matches = [];\n ndxInitializer = typeof altIndex === \"string\" ? resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice() : ndxInitializerClone.slice();\n if (alternateToken.matches[amndx] && handleMatch(alternateToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse)) match = true; else if (ndx === 0) {\n unMatchedAlternation = true;\n }\n maltMatches = matches.slice();\n testPos = currentPos;\n matches = [];\n for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\n var altMatch = maltMatches[ndx1], dropMatch = false;\n altMatch.match.jit = altMatch.match.jit || unMatchedAlternation;\n altMatch.alternation = altMatch.alternation || loopNdxCnt;\n setMergeLocators(altMatch);\n for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\n var altMatch2 = malternateMatches[ndx2];\n if (typeof altIndex !== \"string\" || altMatch.alternation !== undefined && $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1) {\n if (altMatch.match.nativeDef === altMatch2.match.nativeDef) {\n dropMatch = true;\n setMergeLocators(altMatch2, altMatch);\n break;\n } else if (isSubsetOf(altMatch, altMatch2)) {\n if (setMergeLocators(altMatch, altMatch2)) {\n dropMatch = true;\n malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch);\n }\n break;\n } else if (isSubsetOf(altMatch2, altMatch)) {\n setMergeLocators(altMatch2, altMatch);\n break;\n } else if (staticCanMatchDefinition(altMatch, altMatch2)) {\n if (setMergeLocators(altMatch, altMatch2)) {\n dropMatch = true;\n malternateMatches.splice(malternateMatches.indexOf(altMatch2), 0, altMatch);\n }\n break;\n }\n }\n }\n if (!dropMatch) {\n malternateMatches.push(altMatch);\n }\n }\n }\n matches = currentMatches.concat(malternateMatches);\n testPos = pos;\n insertStop = matches.length > 0;\n match = malternateMatches.length > 0;\n ndxInitializer = ndxInitializerClone.slice();\n } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);\n if (match) return true;\n } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) {\n var qt = match;\n for (var qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {\n var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];\n match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup);\n if (match) {\n latestMatch = matches[matches.length - 1].match;\n latestMatch.optionalQuantifier = qndx >= qt.quantifier.min;\n latestMatch.jit = (qndx || 1) * tokenGroup.matches.indexOf(latestMatch) >= qt.quantifier.jit;\n if (latestMatch.optionalQuantifier && isFirstMatch(latestMatch, tokenGroup)) {\n insertStop = true;\n testPos = pos;\n break;\n }\n if (latestMatch.jit) {\n getMaskSet().jitOffset[pos] = tokenGroup.matches.indexOf(latestMatch);\n }\n return true;\n }\n }\n } else {\n match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse);\n if (match) return true;\n }\n } else {\n testPos++;\n }\n }\n for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) {\n if (maskToken.matches[tndx].isQuantifier !== true) {\n var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);\n if (match && testPos === pos) {\n return match;\n } else if (testPos > pos) {\n break;\n }\n }\n }\n }\n function mergeLocators(pos, tests) {\n var locator = [];\n if (!$.isArray(tests)) tests = [ tests ];\n if (tests.length > 0) {\n if (tests[0].alternation === undefined) {\n locator = determineTestTemplate(pos, tests.slice()).locator.slice();\n if (locator.length === 0) locator = tests[0].locator.slice();\n } else {\n $.each(tests, function(ndx, tst) {\n if (tst.def !== \"\") {\n if (locator.length === 0) locator = tst.locator.slice(); else {\n for (var i = 0; i < locator.length; i++) {\n if (tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1) {\n locator[i] += \",\" + tst.locator[i];\n }\n }\n }\n }\n });\n }\n }\n return locator;\n }\n if (pos > -1) {\n if (ndxIntlzr === undefined) {\n var previousPos = pos - 1, test;\n while ((test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) === undefined && previousPos > -1) {\n previousPos--;\n }\n if (test !== undefined && previousPos > -1) {\n ndxInitializer = mergeLocators(previousPos, test);\n cacheDependency = ndxInitializer.join(\"\");\n testPos = previousPos;\n }\n }\n if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) {\n return getMaskSet().tests[pos];\n }\n for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {\n var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);\n if (match && testPos === pos || testPos > pos) {\n break;\n }\n }\n }\n if (matches.length === 0 || insertStop) {\n matches.push({\n match: {\n fn: null,\n optionality: false,\n casing: null,\n def: \"\",\n placeholder: \"\"\n },\n locator: [],\n mloc: {},\n cd: cacheDependency\n });\n }\n if (ndxIntlzr !== undefined && getMaskSet().tests[pos]) {\n return $.extend(true, [], matches);\n }\n getMaskSet().tests[pos] = $.extend(true, [], matches);\n return getMaskSet().tests[pos];\n }\n function getBufferTemplate() {\n if (getMaskSet()._buffer === undefined) {\n getMaskSet()._buffer = getMaskTemplate(false, 1);\n if (getMaskSet().buffer === undefined) getMaskSet().buffer = getMaskSet()._buffer.slice();\n }\n return getMaskSet()._buffer;\n }\n function getBuffer(noCache) {\n if (getMaskSet().buffer === undefined || noCache === true) {\n getMaskSet().buffer = getMaskTemplate(true, getLastValidPosition(), true);\n if (getMaskSet()._buffer === undefined) getMaskSet()._buffer = getMaskSet().buffer.slice();\n }\n return getMaskSet().buffer;\n }\n function refreshFromBuffer(start, end, buffer) {\n var i, p;\n if (start === true) {\n resetMaskSet();\n start = 0;\n end = buffer.length;\n } else {\n for (i = start; i < end; i++) {\n delete getMaskSet().validPositions[i];\n }\n }\n p = start;\n for (i = start; i < end; i++) {\n resetMaskSet(true);\n if (buffer[i] !== opts.skipOptionalPartCharacter) {\n var valResult = isValid(p, buffer[i], true, true);\n if (valResult !== false) {\n resetMaskSet(true);\n p = valResult.caret !== undefined ? valResult.caret : valResult.pos + 1;\n }\n }\n }\n }\n function casing(elem, test, pos) {\n switch (opts.casing || test.casing) {\n case \"upper\":\n elem = elem.toUpperCase();\n break;\n\n case \"lower\":\n elem = elem.toLowerCase();\n break;\n\n case \"title\":\n var posBefore = getMaskSet().validPositions[pos - 1];\n if (pos === 0 || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE)) {\n elem = elem.toUpperCase();\n } else {\n elem = elem.toLowerCase();\n }\n break;\n\n default:\n if ($.isFunction(opts.casing)) {\n var args = Array.prototype.slice.call(arguments);\n args.push(getMaskSet().validPositions);\n elem = opts.casing.apply(this, args);\n }\n }\n return elem;\n }\n function checkAlternationMatch(altArr1, altArr2, na) {\n var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = false, naArr = na !== undefined ? na.split(\",\") : [], naNdx;\n for (var i = 0; i < naArr.length; i++) {\n if ((naNdx = altArr1.indexOf(naArr[i])) !== -1) {\n altArr1.splice(naNdx, 1);\n }\n }\n for (var alndx = 0; alndx < altArr1.length; alndx++) {\n if ($.inArray(altArr1[alndx], altArrC) !== -1) {\n isMatch = true;\n break;\n }\n }\n return isMatch;\n }\n function alternate(pos, c, strict, fromSetValid, rAltPos) {\n var validPsClone = $.extend(true, {}, getMaskSet().validPositions), lastAlt, alternation, isValidRslt = false, altPos, prevAltPos, i, validPos, decisionPos, lAltPos = rAltPos !== undefined ? rAltPos : getLastValidPosition();\n if (lAltPos === -1 && rAltPos === undefined) {\n lastAlt = 0;\n prevAltPos = getTest(lastAlt);\n alternation = prevAltPos.alternation;\n } else {\n for (;lAltPos >= 0; lAltPos--) {\n altPos = getMaskSet().validPositions[lAltPos];\n if (altPos && altPos.alternation !== undefined) {\n if (prevAltPos && prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) {\n break;\n }\n lastAlt = lAltPos;\n alternation = getMaskSet().validPositions[lastAlt].alternation;\n prevAltPos = altPos;\n }\n }\n }\n if (alternation !== undefined) {\n decisionPos = parseInt(lastAlt);\n getMaskSet().excludes[decisionPos] = getMaskSet().excludes[decisionPos] || [];\n if (pos !== true) {\n getMaskSet().excludes[decisionPos].push(getDecisionTaker(prevAltPos));\n }\n var validInputsClone = [], staticInputsBeforePos = 0;\n for (i = decisionPos; i < getLastValidPosition(undefined, true) + 1; i++) {\n validPos = getMaskSet().validPositions[i];\n if (validPos && validPos.generatedInput !== true) {\n validInputsClone.push(validPos.input);\n } else if (i < pos) staticInputsBeforePos++;\n delete getMaskSet().validPositions[i];\n }\n while (getMaskSet().excludes[decisionPos] && getMaskSet().excludes[decisionPos].length < 10) {\n var posOffset = staticInputsBeforePos * -1, validInputs = validInputsClone.slice();\n getMaskSet().tests[decisionPos] = undefined;\n resetMaskSet(true);\n isValidRslt = true;\n while (validInputs.length > 0) {\n var input = validInputs.shift();\n if (!(isValidRslt = isValid(getLastValidPosition(undefined, true) + 1, input, false, fromSetValid, true))) {\n break;\n }\n }\n if (isValidRslt && c !== undefined) {\n var targetLvp = getLastValidPosition(pos) + 1;\n for (i = decisionPos; i < getLastValidPosition() + 1; i++) {\n validPos = getMaskSet().validPositions[i];\n if ((validPos === undefined || validPos.match.fn == null) && i < pos + posOffset) {\n posOffset++;\n }\n }\n pos = pos + posOffset;\n isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid, true);\n }\n if (!isValidRslt) {\n resetMaskSet();\n prevAltPos = getTest(decisionPos);\n getMaskSet().validPositions = $.extend(true, {}, validPsClone);\n if (getMaskSet().excludes[decisionPos]) {\n var decisionTaker = getDecisionTaker(prevAltPos);\n if (getMaskSet().excludes[decisionPos].indexOf(decisionTaker) !== -1) {\n isValidRslt = alternate(pos, c, strict, fromSetValid, decisionPos - 1);\n break;\n }\n getMaskSet().excludes[decisionPos].push(decisionTaker);\n for (i = decisionPos; i < getLastValidPosition(undefined, true) + 1; i++) delete getMaskSet().validPositions[i];\n } else {\n isValidRslt = alternate(pos, c, strict, fromSetValid, decisionPos - 1);\n break;\n }\n } else break;\n }\n }\n getMaskSet().excludes[decisionPos] = undefined;\n return isValidRslt;\n }\n function isValid(pos, c, strict, fromSetValid, fromAlternate, validateOnly) {\n function isSelection(posObj) {\n return isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1;\n }\n strict = strict === true;\n var maskPos = pos;\n if (pos.begin !== undefined) {\n maskPos = isRTL ? pos.end : pos.begin;\n }\n function _isValid(position, c, strict) {\n var rslt = false;\n $.each(getTests(position), function(ndx, tst) {\n var test = tst.match;\n getBuffer(true);\n rslt = test.fn != null ? test.fn.test(c, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && test.def !== \"\" ? {\n c: getPlaceholder(position, test, true) || test.def,\n pos: position\n } : false;\n if (rslt !== false) {\n var elem = rslt.c !== undefined ? rslt.c : c, validatedPos = position;\n elem = elem === opts.skipOptionalPartCharacter && test.fn === null ? getPlaceholder(position, test, true) || test.def : elem;\n if (rslt.remove !== undefined) {\n if (!$.isArray(rslt.remove)) rslt.remove = [ rslt.remove ];\n $.each(rslt.remove.sort(function(a, b) {\n return b - a;\n }), function(ndx, lmnt) {\n revalidateMask({\n begin: lmnt,\n end: lmnt + 1\n });\n });\n }\n if (rslt.insert !== undefined) {\n if (!$.isArray(rslt.insert)) rslt.insert = [ rslt.insert ];\n $.each(rslt.insert.sort(function(a, b) {\n return a - b;\n }), function(ndx, lmnt) {\n isValid(lmnt.pos, lmnt.c, true, fromSetValid);\n });\n }\n if (rslt !== true && rslt.pos !== undefined && rslt.pos !== position) {\n validatedPos = rslt.pos;\n }\n if (rslt !== true && rslt.pos === undefined && rslt.c === undefined) {\n return false;\n }\n if (!revalidateMask(pos, $.extend({}, tst, {\n input: casing(elem, test, validatedPos)\n }), fromSetValid, validatedPos)) {\n rslt = false;\n }\n return false;\n }\n });\n return rslt;\n }\n var result = true, positionsClone = $.extend(true, {}, getMaskSet().validPositions);\n if ($.isFunction(opts.preValidation) && !strict && fromSetValid !== true && validateOnly !== true) {\n result = opts.preValidation(getBuffer(), maskPos, c, isSelection(pos), opts, getMaskSet());\n }\n if (result === true) {\n trackbackPositions(undefined, maskPos, true);\n if (maxLength === undefined || maskPos < maxLength) {\n result = _isValid(maskPos, c, strict);\n if ((!strict || fromSetValid === true) && result === false && validateOnly !== true) {\n var currentPosValid = getMaskSet().validPositions[maskPos];\n if (currentPosValid && currentPosValid.match.fn === null && (currentPosValid.match.def === c || c === opts.skipOptionalPartCharacter)) {\n result = {\n caret: seekNext(maskPos)\n };\n } else {\n if ((opts.insertMode || getMaskSet().validPositions[seekNext(maskPos)] === undefined) && (!isMask(maskPos, true) || getMaskSet().jitOffset[maskPos])) {\n if (getMaskSet().jitOffset[maskPos] && getMaskSet().validPositions[seekNext(maskPos)] === undefined) {\n result = isValid(maskPos + getMaskSet().jitOffset[maskPos], c, strict);\n if (result !== false) result.caret = maskPos;\n } else for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) {\n result = _isValid(nPos, c, strict);\n if (result !== false) {\n result = trackbackPositions(maskPos, result.pos !== undefined ? result.pos : nPos) || result;\n maskPos = nPos;\n break;\n }\n }\n }\n }\n }\n }\n if (result === false && opts.keepStatic !== false && (opts.regex == null || isComplete(getBuffer())) && !strict && fromAlternate !== true) {\n result = alternate(maskPos, c, strict, fromSetValid);\n }\n if (result === true) {\n result = {\n pos: maskPos\n };\n }\n }\n if ($.isFunction(opts.postValidation) && result !== false && !strict && fromSetValid !== true && validateOnly !== true) {\n var postResult = opts.postValidation(getBuffer(true), pos.begin !== undefined ? isRTL ? pos.end : pos.begin : pos, result, opts);\n if (postResult !== undefined) {\n if (postResult.refreshFromBuffer && postResult.buffer) {\n var refresh = postResult.refreshFromBuffer;\n refreshFromBuffer(refresh === true ? refresh : refresh.start, refresh.end, postResult.buffer);\n }\n result = postResult === true ? result : postResult;\n }\n }\n if (result && result.pos === undefined) {\n result.pos = maskPos;\n }\n if (result === false || validateOnly === true) {\n resetMaskSet(true);\n getMaskSet().validPositions = $.extend(true, {}, positionsClone);\n }\n return result;\n }\n function trackbackPositions(originalPos, newPos, fillOnly) {\n var result;\n if (originalPos === undefined) {\n for (originalPos = newPos - 1; originalPos > 0; originalPos--) {\n if (getMaskSet().validPositions[originalPos]) break;\n }\n }\n for (var ps = originalPos; ps < newPos; ps++) {\n if (getMaskSet().validPositions[ps] === undefined && !isMask(ps, true)) {\n var vp = ps == 0 ? getTest(ps) : getMaskSet().validPositions[ps - 1];\n if (vp) {\n var tests = getTests(ps).slice();\n if (tests[tests.length - 1].match.def === \"\") tests.pop();\n var bestMatch = determineTestTemplate(ps, tests);\n bestMatch = $.extend({}, bestMatch, {\n input: getPlaceholder(ps, bestMatch.match, true) || bestMatch.match.def\n });\n bestMatch.generatedInput = true;\n revalidateMask(ps, bestMatch, true);\n if (fillOnly !== true) {\n var cvpInput = getMaskSet().validPositions[newPos].input;\n getMaskSet().validPositions[newPos] = undefined;\n result = isValid(newPos, cvpInput, true, true);\n }\n }\n }\n }\n return result;\n }\n function revalidateMask(pos, validTest, fromSetValid, validatedPos) {\n function IsEnclosedStatic(pos, valids, selection) {\n var posMatch = valids[pos];\n if (posMatch !== undefined && (posMatch.match.fn === null && posMatch.match.optionality !== true || posMatch.input === opts.radixPoint)) {\n var prevMatch = selection.begin <= pos - 1 ? valids[pos - 1] && valids[pos - 1].match.fn === null && valids[pos - 1] : valids[pos - 1], nextMatch = selection.end > pos + 1 ? valids[pos + 1] && valids[pos + 1].match.fn === null && valids[pos + 1] : valids[pos + 1];\n return prevMatch && nextMatch;\n }\n return false;\n }\n var begin = pos.begin !== undefined ? pos.begin : pos, end = pos.end !== undefined ? pos.end : pos;\n if (pos.begin > pos.end) {\n begin = pos.end;\n end = pos.begin;\n }\n validatedPos = validatedPos !== undefined ? validatedPos : begin;\n if (begin !== end || opts.insertMode && getMaskSet().validPositions[validatedPos] !== undefined && fromSetValid === undefined) {\n var positionsClone = $.extend(true, {}, getMaskSet().validPositions), lvp = getLastValidPosition(undefined, true), i;\n getMaskSet().p = begin;\n for (i = lvp; i >= begin; i--) {\n if (getMaskSet().validPositions[i] && getMaskSet().validPositions[i].match.nativeDef === \"+\") {\n opts.isNegative = false;\n }\n delete getMaskSet().validPositions[i];\n }\n var valid = true, j = validatedPos, vps = getMaskSet().validPositions, needsValidation = false, posMatch = j, i = j;\n if (validTest) {\n getMaskSet().validPositions[validatedPos] = $.extend(true, {}, validTest);\n posMatch++;\n j++;\n if (begin < end) i++;\n }\n for (;i <= lvp; i++) {\n var t = positionsClone[i];\n if (t !== undefined && (i >= end || i >= begin && t.generatedInput !== true && IsEnclosedStatic(i, positionsClone, {\n begin: begin,\n end: end\n }))) {\n while (getTest(posMatch).match.def !== \"\") {\n if (needsValidation === false && positionsClone[posMatch] && positionsClone[posMatch].match.nativeDef === t.match.nativeDef) {\n getMaskSet().validPositions[posMatch] = $.extend(true, {}, positionsClone[posMatch]);\n getMaskSet().validPositions[posMatch].input = t.input;\n trackbackPositions(undefined, posMatch, true);\n j = posMatch + 1;\n valid = true;\n } else if (opts.shiftPositions && positionCanMatchDefinition(posMatch, t.match.def)) {\n var result = isValid(posMatch, t.input, true, true);\n valid = result !== false;\n j = result.caret || result.insert ? getLastValidPosition() : posMatch + 1;\n needsValidation = true;\n } else {\n valid = t.generatedInput === true || t.input === opts.radixPoint && opts.numericInput === true;\n }\n if (valid) break;\n if (!valid && posMatch > end && isMask(posMatch, true) && (t.match.fn !== null || posMatch > getMaskSet().maskLength)) {\n break;\n }\n posMatch++;\n }\n if (getTest(posMatch).match.def == \"\") valid = false;\n posMatch = j;\n }\n if (!valid) break;\n }\n if (!valid) {\n getMaskSet().validPositions = $.extend(true, {}, positionsClone);\n resetMaskSet(true);\n return false;\n }\n } else if (validTest) {\n getMaskSet().validPositions[validatedPos] = $.extend(true, {}, validTest);\n }\n resetMaskSet(true);\n return true;\n }\n function isMask(pos, strict) {\n var test = getTestTemplate(pos).match;\n if (test.def === \"\") test = getTest(pos).match;\n if (test.fn != null) {\n return test.fn;\n }\n if (strict !== true && pos > -1) {\n var tests = getTests(pos);\n return tests.length > 1 + (tests[tests.length - 1].match.def === \"\" ? 1 : 0);\n }\n return false;\n }\n function seekNext(pos, newBlock) {\n var position = pos + 1;\n while (getTest(position).match.def !== \"\" && (newBlock === true && (getTest(position).match.newBlockMarker !== true || !isMask(position)) || newBlock !== true && !isMask(position))) {\n position++;\n }\n return position;\n }\n function seekPrevious(pos, newBlock) {\n var position = pos, tests;\n if (position <= 0) return 0;\n while (--position > 0 && (newBlock === true && getTest(position).match.newBlockMarker !== true || newBlock !== true && !isMask(position) && (tests = getTests(position), \n tests.length < 2 || tests.length === 2 && tests[1].match.def === \"\"))) {}\n return position;\n }\n function writeBuffer(input, buffer, caretPos, event, triggerEvents) {\n if (event && $.isFunction(opts.onBeforeWrite)) {\n var result = opts.onBeforeWrite.call(inputmask, event, buffer, caretPos, opts);\n if (result) {\n if (result.refreshFromBuffer) {\n var refresh = result.refreshFromBuffer;\n refreshFromBuffer(refresh === true ? refresh : refresh.start, refresh.end, result.buffer || buffer);\n buffer = getBuffer(true);\n }\n if (caretPos !== undefined) caretPos = result.caret !== undefined ? result.caret : caretPos;\n }\n }\n if (input !== undefined) {\n input.inputmask._valueSet(buffer.join(\"\"));\n if (caretPos !== undefined && (event === undefined || event.type !== \"blur\")) {\n caret(input, caretPos);\n } else renderColorMask(input, caretPos, buffer.length === 0);\n if (triggerEvents === true) {\n var $input = $(input), nptVal = input.inputmask._valueGet();\n skipInputEvent = true;\n $input.trigger(\"input\");\n setTimeout(function() {\n if (nptVal === getBufferTemplate().join(\"\")) {\n $input.trigger(\"cleared\");\n } else if (isComplete(buffer) === true) {\n $input.trigger(\"complete\");\n }\n }, 0);\n }\n }\n }\n function getPlaceholder(pos, test, returnPL) {\n test = test || getTest(pos).match;\n if (test.placeholder !== undefined || returnPL === true) {\n return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder;\n } else if (test.fn === null) {\n if (pos > -1 && getMaskSet().validPositions[pos] === undefined) {\n var tests = getTests(pos), staticAlternations = [], prevTest;\n if (tests.length > 1 + (tests[tests.length - 1].match.def === \"\" ? 1 : 0)) {\n for (var i = 0; i < tests.length; i++) {\n if (tests[i].match.optionality !== true && tests[i].match.optionalQuantifier !== true && (tests[i].match.fn === null || (prevTest === undefined || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, true, opts) !== false))) {\n staticAlternations.push(tests[i]);\n if (tests[i].match.fn === null) prevTest = tests[i];\n if (staticAlternations.length > 1) {\n if (/[0-9a-bA-Z]/.test(staticAlternations[0].match.def)) {\n return opts.placeholder.charAt(pos % opts.placeholder.length);\n }\n }\n }\n }\n }\n }\n return test.def;\n }\n return opts.placeholder.charAt(pos % opts.placeholder.length);\n }\n function HandleNativePlaceholder(npt, value) {\n if (ie) {\n if (npt.inputmask._valueGet() !== value && (npt.placeholder !== value || npt.placeholder === \"\")) {\n var buffer = getBuffer().slice(), nptValue = npt.inputmask._valueGet();\n if (nptValue !== value) {\n var lvp = getLastValidPosition();\n if (lvp === -1 && nptValue === getBufferTemplate().join(\"\")) {\n buffer = [];\n } else if (lvp !== -1) {\n clearOptionalTail(buffer);\n }\n writeBuffer(npt, buffer);\n }\n }\n } else if (npt.placeholder !== value) {\n npt.placeholder = value;\n if (npt.placeholder === \"\") npt.removeAttribute(\"placeholder\");\n }\n }\n var EventRuler = {\n on: function(input, eventName, eventHandler) {\n var ev = function(e) {\n var that = this;\n if (that.inputmask === undefined && this.nodeName !== \"FORM\") {\n var imOpts = $.data(that, \"_inputmask_opts\");\n if (imOpts) new Inputmask(imOpts).mask(that); else EventRuler.off(that);\n } else if (e.type !== \"setvalue\" && this.nodeName !== \"FORM\" && (that.disabled || that.readOnly && !(e.type === \"keydown\" && (e.ctrlKey && e.keyCode === 67) || opts.tabThrough === false && e.keyCode === Inputmask.keyCode.TAB))) {\n e.preventDefault();\n } else {\n switch (e.type) {\n case \"input\":\n if (skipInputEvent === true) {\n skipInputEvent = false;\n return e.preventDefault();\n }\n if (mobile) {\n var args = arguments;\n setTimeout(function() {\n eventHandler.apply(that, args);\n caret(that, that.inputmask.caretPos, undefined, true);\n }, 0);\n return false;\n }\n break;\n\n case \"keydown\":\n skipKeyPressEvent = false;\n skipInputEvent = false;\n break;\n\n case \"keypress\":\n if (skipKeyPressEvent === true) {\n return e.preventDefault();\n }\n skipKeyPressEvent = true;\n break;\n\n case \"click\":\n if (iemobile || iphone) {\n var args = arguments;\n setTimeout(function() {\n eventHandler.apply(that, args);\n }, 0);\n return false;\n }\n break;\n }\n var returnVal = eventHandler.apply(that, arguments);\n if (returnVal === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n return returnVal;\n }\n };\n input.inputmask.events[eventName] = input.inputmask.events[eventName] || [];\n input.inputmask.events[eventName].push(ev);\n if ($.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1) {\n if (input.form !== null) $(input.form).on(eventName, ev);\n } else {\n $(input).on(eventName, ev);\n }\n },\n off: function(input, event) {\n if (input.inputmask && input.inputmask.events) {\n var events;\n if (event) {\n events = [];\n events[event] = input.inputmask.events[event];\n } else {\n events = input.inputmask.events;\n }\n $.each(events, function(eventName, evArr) {\n while (evArr.length > 0) {\n var ev = evArr.pop();\n if ($.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1) {\n if (input.form !== null) $(input.form).off(eventName, ev);\n } else {\n $(input).off(eventName, ev);\n }\n }\n delete input.inputmask.events[eventName];\n });\n }\n }\n };\n var EventHandlers = {\n keydownEvent: function(e) {\n var input = this, $input = $(input), k = e.keyCode, pos = caret(input);\n if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported(\"cut\")) {\n e.preventDefault();\n handleRemove(input, k, pos);\n writeBuffer(input, getBuffer(true), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join(\"\"));\n } else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {\n e.preventDefault();\n var caretPos = seekNext(getLastValidPosition());\n caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, true);\n } else if (k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP) {\n e.preventDefault();\n caret(input, 0, e.shiftKey ? pos.begin : 0, true);\n } else if ((opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || k === 90 && e.ctrlKey) && e.altKey !== true) {\n checkVal(input, true, false, undoValue.split(\"\"));\n $input.trigger(\"click\");\n } else if (k === Inputmask.keyCode.INSERT && !(e.shiftKey || e.ctrlKey)) {\n opts.insertMode = !opts.insertMode;\n input.setAttribute(\"im-insert\", opts.insertMode);\n } else if (opts.tabThrough === true && k === Inputmask.keyCode.TAB) {\n if (e.shiftKey === true) {\n if (getTest(pos.begin).match.fn === null) {\n pos.begin = seekNext(pos.begin);\n }\n pos.end = seekPrevious(pos.begin, true);\n pos.begin = seekPrevious(pos.end, true);\n } else {\n pos.begin = seekNext(pos.begin, true);\n pos.end = seekNext(pos.begin, true);\n if (pos.end < getMaskSet().maskLength) pos.end--;\n }\n if (pos.begin < getMaskSet().maskLength) {\n e.preventDefault();\n caret(input, pos.begin, pos.end);\n }\n }\n opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts);\n ignorable = $.inArray(k, opts.ignorables) !== -1;\n },\n keypressEvent: function(e, checkval, writeOut, strict, ndx) {\n var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;\n if (checkval !== true && (!(e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable))) {\n if (k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join(\"\")) {\n undoValue = getBuffer().join(\"\");\n setTimeout(function() {\n $input.trigger(\"change\");\n }, 0);\n }\n return true;\n } else {\n if (k) {\n if (k === 46 && e.shiftKey === false && opts.radixPoint !== \"\") k = opts.radixPoint.charCodeAt(0);\n var pos = checkval ? {\n begin: ndx,\n end: ndx\n } : caret(input), forwardPosition, c = String.fromCharCode(k), offset = 0;\n if (opts._radixDance && opts.numericInput) {\n var caretPos = getBuffer().indexOf(opts.radixPoint.charAt(0)) + 1;\n if (pos.begin <= caretPos) {\n if (k === opts.radixPoint.charCodeAt(0)) offset = 1;\n pos.begin -= 1;\n pos.end -= 1;\n }\n }\n getMaskSet().writeOutBuffer = true;\n var valResult = isValid(pos, c, strict);\n if (valResult !== false) {\n resetMaskSet(true);\n forwardPosition = valResult.caret !== undefined ? valResult.caret : seekNext(valResult.pos.begin ? valResult.pos.begin : valResult.pos);\n getMaskSet().p = forwardPosition;\n }\n forwardPosition = (opts.numericInput && valResult.caret === undefined ? seekPrevious(forwardPosition) : forwardPosition) + offset;\n if (writeOut !== false) {\n setTimeout(function() {\n opts.onKeyValidation.call(input, k, valResult, opts);\n }, 0);\n if (getMaskSet().writeOutBuffer && valResult !== false) {\n var buffer = getBuffer();\n writeBuffer(input, buffer, forwardPosition, e, checkval !== true);\n }\n }\n e.preventDefault();\n if (checkval) {\n if (valResult !== false) valResult.forwardPosition = forwardPosition;\n return valResult;\n }\n }\n }\n },\n pasteEvent: function(e) {\n var input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(true), caretPos = caret(input), tempValue;\n if (isRTL) {\n tempValue = caretPos.end;\n caretPos.end = caretPos.begin;\n caretPos.begin = tempValue;\n }\n var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);\n if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join(\"\")) valueBeforeCaret = \"\";\n if (valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join(\"\")) valueAfterCaret = \"\";\n if (window.clipboardData && window.clipboardData.getData) {\n inputValue = valueBeforeCaret + window.clipboardData.getData(\"Text\") + valueAfterCaret;\n } else if (ev.clipboardData && ev.clipboardData.getData) {\n inputValue = valueBeforeCaret + ev.clipboardData.getData(\"text/plain\") + valueAfterCaret;\n } else return true;\n var pasteValue = inputValue;\n if ($.isFunction(opts.onBeforePaste)) {\n pasteValue = opts.onBeforePaste.call(inputmask, inputValue, opts);\n if (pasteValue === false) {\n return e.preventDefault();\n }\n if (!pasteValue) {\n pasteValue = inputValue;\n }\n }\n checkVal(input, false, false, pasteValue.toString().split(\"\"));\n writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join(\"\"));\n return e.preventDefault();\n },\n inputFallBackEvent: function(e) {\n function radixPointHandler(input, inputValue, caretPos) {\n if (inputValue.charAt(caretPos.begin - 1) === \".\" && opts.radixPoint !== \"\") {\n inputValue = inputValue.split(\"\");\n inputValue[caretPos.begin - 1] = opts.radixPoint.charAt(0);\n inputValue = inputValue.join(\"\");\n }\n return inputValue;\n }\n function ieMobileHandler(input, inputValue, caretPos) {\n if (iemobile) {\n var inputChar = inputValue.replace(getBuffer().join(\"\"), \"\");\n if (inputChar.length === 1) {\n var iv = inputValue.split(\"\");\n iv.splice(caretPos.begin, 0, inputChar);\n inputValue = iv.join(\"\");\n }\n }\n return inputValue;\n }\n var input = this, inputValue = input.inputmask._valueGet();\n if (getBuffer().join(\"\") !== inputValue) {\n var caretPos = caret(input);\n inputValue = radixPointHandler(input, inputValue, caretPos);\n inputValue = ieMobileHandler(input, inputValue, caretPos);\n if (getBuffer().join(\"\") !== inputValue) {\n var buffer = getBuffer().join(\"\"), offset = !opts.numericInput && inputValue.length > buffer.length ? -1 : 0, frontPart = inputValue.substr(0, caretPos.begin), backPart = inputValue.substr(caretPos.begin), frontBufferPart = buffer.substr(0, caretPos.begin + offset), backBufferPart = buffer.substr(caretPos.begin + offset);\n var selection = caretPos, entries = \"\", isEntry = false;\n if (frontPart !== frontBufferPart) {\n var fpl = (isEntry = frontPart.length >= frontBufferPart.length) ? frontPart.length : frontBufferPart.length, i;\n for (i = 0; frontPart.charAt(i) === frontBufferPart.charAt(i) && i < fpl; i++) ;\n if (isEntry) {\n selection.begin = i - offset;\n entries += frontPart.slice(i, selection.end);\n }\n }\n if (backPart !== backBufferPart) {\n if (backPart.length > backBufferPart.length) {\n entries += backPart.slice(0, 1);\n } else {\n if (backPart.length < backBufferPart.length) {\n selection.end += backBufferPart.length - backPart.length;\n if (!isEntry && opts.radixPoint !== \"\" && backPart === \"\" && frontPart.charAt(selection.begin + offset - 1) === opts.radixPoint) {\n selection.begin--;\n entries = opts.radixPoint;\n }\n }\n }\n }\n writeBuffer(input, getBuffer(), {\n begin: selection.begin + offset,\n end: selection.end + offset\n });\n if (entries.length > 0) {\n $.each(entries.split(\"\"), function(ndx, entry) {\n var keypress = new $.Event(\"keypress\");\n keypress.which = entry.charCodeAt(0);\n ignorable = false;\n EventHandlers.keypressEvent.call(input, keypress);\n });\n } else {\n if (selection.begin === selection.end - 1) {\n selection.begin = seekPrevious(selection.begin + 1);\n if (selection.begin === selection.end - 1) {\n caret(input, selection.begin);\n } else {\n caret(input, selection.begin, selection.end);\n }\n }\n var keydown = new $.Event(\"keydown\");\n keydown.keyCode = opts.numericInput ? Inputmask.keyCode.BACKSPACE : Inputmask.keyCode.DELETE;\n EventHandlers.keydownEvent.call(input, keydown);\n }\n e.preventDefault();\n }\n }\n },\n beforeInputEvent: function(e) {\n if (e.cancelable) {\n var input = this;\n switch (e.inputType) {\n case \"insertText\":\n $.each(e.data.split(\"\"), function(ndx, entry) {\n var keypress = new $.Event(\"keypress\");\n keypress.which = entry.charCodeAt(0);\n ignorable = false;\n EventHandlers.keypressEvent.call(input, keypress);\n });\n return e.preventDefault();\n\n case \"deleteContentBackward\":\n var keydown = new $.Event(\"keydown\");\n keydown.keyCode = Inputmask.keyCode.BACKSPACE;\n EventHandlers.keydownEvent.call(input, keydown);\n return e.preventDefault();\n\n case \"deleteContentForward\":\n var keydown = new $.Event(\"keydown\");\n keydown.keyCode = Inputmask.keyCode.DELETE;\n EventHandlers.keydownEvent.call(input, keydown);\n return e.preventDefault();\n }\n }\n },\n setValueEvent: function(e) {\n this.inputmask.refreshValue = false;\n var input = this, value = e && e.detail ? e.detail[0] : arguments[1], value = value || input.inputmask._valueGet(true);\n if ($.isFunction(opts.onBeforeMask)) value = opts.onBeforeMask.call(inputmask, value, opts) || value;\n value = value.toString().split(\"\");\n checkVal(input, true, false, value);\n undoValue = getBuffer().join(\"\");\n if ((opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join(\"\")) {\n input.inputmask._valueSet(\"\");\n }\n },\n focusEvent: function(e) {\n var input = this, nptValue = input.inputmask._valueGet();\n if (opts.showMaskOnFocus) {\n if (nptValue !== getBuffer().join(\"\")) {\n writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()));\n } else if (mouseEnter === false) {\n caret(input, seekNext(getLastValidPosition()));\n }\n }\n if (opts.positionCaretOnTab === true && mouseEnter === false) {\n EventHandlers.clickEvent.apply(input, [ e, true ]);\n }\n undoValue = getBuffer().join(\"\");\n },\n mouseleaveEvent: function(e) {\n var input = this;\n mouseEnter = false;\n if (opts.clearMaskOnLostFocus && document.activeElement !== input) {\n HandleNativePlaceholder(input, originalPlaceholder);\n }\n },\n clickEvent: function(e, tabbed) {\n function doRadixFocus(clickPos) {\n if (opts.radixPoint !== \"\") {\n var vps = getMaskSet().validPositions;\n if (vps[clickPos] === undefined || vps[clickPos].input === getPlaceholder(clickPos)) {\n if (clickPos < seekNext(-1)) return true;\n var radixPos = $.inArray(opts.radixPoint, getBuffer());\n if (radixPos !== -1) {\n for (var vp in vps) {\n if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) {\n return false;\n }\n }\n return true;\n }\n }\n }\n return false;\n }\n var input = this;\n setTimeout(function() {\n if (document.activeElement === input) {\n var selectedCaret = caret(input);\n if (tabbed) {\n if (isRTL) {\n selectedCaret.end = selectedCaret.begin;\n } else {\n selectedCaret.begin = selectedCaret.end;\n }\n }\n if (selectedCaret.begin === selectedCaret.end) {\n switch (opts.positionCaretOnClick) {\n case \"none\":\n break;\n\n case \"select\":\n caret(input, 0, getBuffer().length);\n break;\n\n case \"ignore\":\n caret(input, seekNext(getLastValidPosition()));\n break;\n\n case \"radixFocus\":\n if (doRadixFocus(selectedCaret.begin)) {\n var radixPos = getBuffer().join(\"\").indexOf(opts.radixPoint);\n caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);\n break;\n }\n\n default:\n var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, true), lastPosition = seekNext(lvclickPosition);\n if (clickPosition < lastPosition) {\n caret(input, !isMask(clickPosition, true) && !isMask(clickPosition - 1, true) ? seekNext(clickPosition) : clickPosition);\n } else {\n var lvp = getMaskSet().validPositions[lvclickPosition], tt = getTestTemplate(lastPosition, lvp ? lvp.match.locator : undefined, lvp), placeholder = getPlaceholder(lastPosition, tt.match);\n if (placeholder !== \"\" && getBuffer()[lastPosition] !== placeholder && tt.match.optionalQuantifier !== true && tt.match.newBlockMarker !== true || !isMask(lastPosition, opts.keepStatic) && tt.match.def === placeholder) {\n var newPos = seekNext(lastPosition);\n if (clickPosition >= newPos || clickPosition === lastPosition) {\n lastPosition = newPos;\n }\n }\n caret(input, lastPosition);\n }\n break;\n }\n }\n }\n }, 0);\n },\n cutEvent: function(e) {\n var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e;\n var clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);\n clipboardData.setData(\"text\", isRTL ? clipData.reverse().join(\"\") : clipData.join(\"\"));\n if (document.execCommand) document.execCommand(\"copy\");\n handleRemove(input, Inputmask.keyCode.DELETE, pos);\n writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(\"\"));\n },\n blurEvent: function(e) {\n var $input = $(this), input = this;\n if (input.inputmask) {\n HandleNativePlaceholder(input, originalPlaceholder);\n var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();\n if (nptValue !== \"\" || colorMask !== undefined) {\n if (opts.clearMaskOnLostFocus) {\n if (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\")) {\n buffer = [];\n } else {\n clearOptionalTail(buffer);\n }\n }\n if (isComplete(buffer) === false) {\n setTimeout(function() {\n $input.trigger(\"incomplete\");\n }, 0);\n if (opts.clearIncomplete) {\n resetMaskSet();\n if (opts.clearMaskOnLostFocus) {\n buffer = [];\n } else {\n buffer = getBufferTemplate().slice();\n }\n }\n }\n writeBuffer(input, buffer, undefined, e);\n }\n if (undoValue !== getBuffer().join(\"\")) {\n undoValue = buffer.join(\"\");\n $input.trigger(\"change\");\n }\n }\n },\n mouseenterEvent: function(e) {\n var input = this;\n mouseEnter = true;\n if (document.activeElement !== input && opts.showMaskOnHover) {\n HandleNativePlaceholder(input, (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\"));\n }\n },\n submitEvent: function(e) {\n if (undoValue !== getBuffer().join(\"\")) {\n $el.trigger(\"change\");\n }\n if (opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join(\"\")) {\n el.inputmask._valueSet(\"\");\n }\n if (opts.clearIncomplete && isComplete(getBuffer()) === false) {\n el.inputmask._valueSet(\"\");\n }\n if (opts.removeMaskOnSubmit) {\n el.inputmask._valueSet(el.inputmask.unmaskedvalue(), true);\n setTimeout(function() {\n writeBuffer(el, getBuffer());\n }, 0);\n }\n },\n resetEvent: function(e) {\n el.inputmask.refreshValue = true;\n setTimeout(function() {\n $el.trigger(\"setvalue\");\n }, 0);\n }\n };\n function checkVal(input, writeOut, strict, nptvl, initiatingEvent) {\n var inputmask = this || input.inputmask, inputValue = nptvl.slice(), charCodes = \"\", initialNdx = -1, result = undefined;\n function isTemplateMatch(ndx, charCodes) {\n var charCodeNdx = getMaskTemplate(true, 0, false).slice(ndx, seekNext(ndx)).join(\"\").replace(/'/g, \"\").indexOf(charCodes);\n return charCodeNdx !== -1 && !isMask(ndx) && (getTest(ndx).match.nativeDef === charCodes.charAt(0) || getTest(ndx).match.fn === null && getTest(ndx).match.nativeDef === \"'\" + charCodes.charAt(0) || getTest(ndx).match.nativeDef === \" \" && (getTest(ndx + 1).match.nativeDef === charCodes.charAt(0) || getTest(ndx + 1).match.fn === null && getTest(ndx + 1).match.nativeDef === \"'\" + charCodes.charAt(0)));\n }\n resetMaskSet();\n if (!strict && opts.autoUnmask !== true) {\n var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(\"\"), matches = inputValue.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(staticInput), \"g\"));\n if (matches && matches.length > 0) {\n inputValue.splice(0, matches.length * staticInput.length);\n initialNdx = seekNext(initialNdx);\n }\n } else {\n initialNdx = seekNext(initialNdx);\n }\n if (initialNdx === -1) {\n getMaskSet().p = seekNext(initialNdx);\n initialNdx = 0;\n } else getMaskSet().p = initialNdx;\n inputmask.caretPos = {\n begin: initialNdx\n };\n $.each(inputValue, function(ndx, charCode) {\n if (charCode !== undefined) {\n if (getMaskSet().validPositions[ndx] === undefined && inputValue[ndx] === getPlaceholder(ndx) && isMask(ndx, true) && isValid(ndx, inputValue[ndx], true, undefined, undefined, true) === false) {\n getMaskSet().p++;\n } else {\n var keypress = new $.Event(\"_checkval\");\n keypress.which = charCode.charCodeAt(0);\n charCodes += charCode;\n var lvp = getLastValidPosition(undefined, true);\n if (!isTemplateMatch(initialNdx, charCodes)) {\n result = EventHandlers.keypressEvent.call(input, keypress, true, false, strict, inputmask.caretPos.begin);\n if (result) {\n initialNdx = inputmask.caretPos.begin + 1;\n charCodes = \"\";\n }\n } else {\n result = EventHandlers.keypressEvent.call(input, keypress, true, false, strict, lvp + 1);\n }\n if (result) {\n writeBuffer(undefined, getBuffer(), result.forwardPosition, keypress, false);\n inputmask.caretPos = {\n begin: result.forwardPosition,\n end: result.forwardPosition\n };\n }\n }\n }\n });\n if (writeOut) writeBuffer(input, getBuffer(), result ? result.forwardPosition : undefined, initiatingEvent || new $.Event(\"checkval\"), initiatingEvent && initiatingEvent.type === \"input\");\n }\n function unmaskedvalue(input) {\n if (input) {\n if (input.inputmask === undefined) {\n return input.value;\n }\n if (input.inputmask && input.inputmask.refreshValue) {\n EventHandlers.setValueEvent.call(input);\n }\n }\n var umValue = [], vps = getMaskSet().validPositions;\n for (var pndx in vps) {\n if (vps[pndx].match && vps[pndx].match.fn != null) {\n umValue.push(vps[pndx].input);\n }\n }\n var unmaskedValue = umValue.length === 0 ? \"\" : (isRTL ? umValue.reverse() : umValue).join(\"\");\n if ($.isFunction(opts.onUnMask)) {\n var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\");\n unmaskedValue = opts.onUnMask.call(inputmask, bufferValue, unmaskedValue, opts);\n }\n return unmaskedValue;\n }\n function caret(input, begin, end, notranslate) {\n function translatePosition(pos) {\n if (isRTL && typeof pos === \"number\" && (!opts.greedy || opts.placeholder !== \"\") && el) {\n pos = el.inputmask._valueGet().length - pos;\n }\n return pos;\n }\n var range;\n if (begin !== undefined) {\n if ($.isArray(begin)) {\n end = isRTL ? begin[0] : begin[1];\n begin = isRTL ? begin[1] : begin[0];\n }\n if (begin.begin !== undefined) {\n end = isRTL ? begin.begin : begin.end;\n begin = isRTL ? begin.end : begin.begin;\n }\n if (typeof begin === \"number\") {\n begin = notranslate ? begin : translatePosition(begin);\n end = notranslate ? end : translatePosition(end);\n end = typeof end == \"number\" ? end : begin;\n var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;\n input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0;\n input.inputmask.caretPos = {\n begin: begin,\n end: end\n };\n if (input === document.activeElement) {\n if (\"selectionStart\" in input) {\n input.selectionStart = begin;\n input.selectionEnd = end;\n } else if (window.getSelection) {\n range = document.createRange();\n if (input.firstChild === undefined || input.firstChild === null) {\n var textNode = document.createTextNode(\"\");\n input.appendChild(textNode);\n }\n range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length);\n range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length);\n range.collapse(true);\n var sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (input.createTextRange) {\n range = input.createTextRange();\n range.collapse(true);\n range.moveEnd(\"character\", end);\n range.moveStart(\"character\", begin);\n range.select();\n }\n renderColorMask(input, {\n begin: begin,\n end: end\n });\n }\n }\n } else {\n if (\"selectionStart\" in input) {\n begin = input.selectionStart;\n end = input.selectionEnd;\n } else if (window.getSelection) {\n range = window.getSelection().getRangeAt(0);\n if (range.commonAncestorContainer.parentNode === input || range.commonAncestorContainer === input) {\n begin = range.startOffset;\n end = range.endOffset;\n }\n } else if (document.selection && document.selection.createRange) {\n range = document.selection.createRange();\n begin = 0 - range.duplicate().moveStart(\"character\", -input.inputmask._valueGet().length);\n end = begin + range.text.length;\n }\n return {\n begin: notranslate ? begin : translatePosition(begin),\n end: notranslate ? end : translatePosition(end)\n };\n }\n }\n function determineLastRequiredPosition(returnDefinition) {\n var buffer = getMaskTemplate(true, getLastValidPosition(), true, true), bl = buffer.length, pos, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = lvTest !== undefined ? lvTest.locator.slice() : undefined, testPos;\n for (pos = lvp + 1; pos < buffer.length; pos++) {\n testPos = getTestTemplate(pos, ndxIntlzr, pos - 1);\n ndxIntlzr = testPos.locator.slice();\n positions[pos] = $.extend(true, {}, testPos);\n }\n var lvTestAlt = lvTest && lvTest.alternation !== undefined ? lvTest.locator[lvTest.alternation] : undefined;\n for (pos = bl - 1; pos > lvp; pos--) {\n testPos = positions[pos];\n if ((testPos.match.optionality || testPos.match.optionalQuantifier && testPos.match.newBlockMarker || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && testPos.match.fn != null || testPos.match.fn === null && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAlt.toString().split(\",\")) && getTests(pos)[0].def !== \"\")) && buffer[pos] === getPlaceholder(pos, testPos.match)) {\n bl--;\n } else break;\n }\n return returnDefinition ? {\n l: bl,\n def: positions[bl] ? positions[bl].match : undefined\n } : bl;\n }\n function clearOptionalTail(buffer) {\n buffer.length = 0;\n var template = getMaskTemplate(true, 0, true, undefined, true), lmnt, validPos;\n while (lmnt = template.shift(), lmnt !== undefined) buffer.push(lmnt);\n return buffer;\n }\n function isComplete(buffer) {\n if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);\n if (opts.repeat === \"*\") return undefined;\n var complete = false, lrp = determineLastRequiredPosition(true), aml = seekPrevious(lrp.l);\n if (lrp.def === undefined || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {\n complete = true;\n for (var i = 0; i <= aml; i++) {\n var test = getTestTemplate(i).match;\n if (test.fn !== null && getMaskSet().validPositions[i] === undefined && test.optionality !== true && test.optionalQuantifier !== true || test.fn === null && buffer[i] !== getPlaceholder(i, test)) {\n complete = false;\n break;\n }\n }\n }\n return complete;\n }\n function handleRemove(input, k, pos, strict, fromIsValid) {\n if (opts.numericInput || isRTL) {\n if (k === Inputmask.keyCode.BACKSPACE) {\n k = Inputmask.keyCode.DELETE;\n } else if (k === Inputmask.keyCode.DELETE) {\n k = Inputmask.keyCode.BACKSPACE;\n }\n if (isRTL) {\n var pend = pos.end;\n pos.end = pos.begin;\n pos.begin = pend;\n }\n }\n if (k === Inputmask.keyCode.BACKSPACE && pos.end - pos.begin < 1) {\n pos.begin = seekPrevious(pos.begin);\n if (getMaskSet().validPositions[pos.begin] !== undefined && getMaskSet().validPositions[pos.begin].input === opts.groupSeparator) {\n pos.begin--;\n }\n } else if (k === Inputmask.keyCode.DELETE && pos.begin === pos.end) {\n pos.end = isMask(pos.end, true) && (getMaskSet().validPositions[pos.end] && getMaskSet().validPositions[pos.end].input !== opts.radixPoint) ? pos.end + 1 : seekNext(pos.end) + 1;\n if (getMaskSet().validPositions[pos.begin] !== undefined && getMaskSet().validPositions[pos.begin].input === opts.groupSeparator) {\n pos.end++;\n }\n }\n revalidateMask(pos);\n if (strict !== true && opts.keepStatic !== false || opts.regex !== null) {\n var result = alternate(true);\n if (result) {\n var newPos = result.caret !== undefined ? result.caret : result.pos ? seekNext(result.pos.begin ? result.pos.begin : result.pos) : getLastValidPosition(-1, true);\n if (k !== Inputmask.keyCode.DELETE || pos.begin > newPos) {\n pos.begin == newPos;\n }\n }\n }\n var lvp = getLastValidPosition(pos.begin, true);\n if (lvp < pos.begin || pos.begin === -1) {\n getMaskSet().p = seekNext(lvp);\n } else if (strict !== true) {\n getMaskSet().p = pos.begin;\n if (fromIsValid !== true) {\n while (getMaskSet().p < lvp && getMaskSet().validPositions[getMaskSet().p] === undefined) {\n getMaskSet().p++;\n }\n }\n }\n }\n function initializeColorMask(input) {\n var computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null);\n function findCaretPos(clientx) {\n var e = document.createElement(\"span\"), caretPos;\n for (var style in computedStyle) {\n if (isNaN(style) && style.indexOf(\"font\") !== -1) {\n e.style[style] = computedStyle[style];\n }\n }\n e.style.textTransform = computedStyle.textTransform;\n e.style.letterSpacing = computedStyle.letterSpacing;\n e.style.position = \"absolute\";\n e.style.height = \"auto\";\n e.style.width = \"auto\";\n e.style.visibility = \"hidden\";\n e.style.whiteSpace = \"nowrap\";\n document.body.appendChild(e);\n var inputText = input.inputmask._valueGet(), previousWidth = 0, itl;\n for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {\n e.innerHTML += inputText.charAt(caretPos) || \"_\";\n if (e.offsetWidth >= clientx) {\n var offset1 = clientx - previousWidth;\n var offset2 = e.offsetWidth - clientx;\n e.innerHTML = inputText.charAt(caretPos);\n offset1 -= e.offsetWidth / 3;\n caretPos = offset1 < offset2 ? caretPos - 1 : caretPos;\n break;\n }\n previousWidth = e.offsetWidth;\n }\n document.body.removeChild(e);\n return caretPos;\n }\n var template = document.createElement(\"div\");\n template.style.width = computedStyle.width;\n template.style.textAlign = computedStyle.textAlign;\n colorMask = document.createElement(\"div\");\n input.inputmask.colorMask = colorMask;\n colorMask.className = \"im-colormask\";\n input.parentNode.insertBefore(colorMask, input);\n input.parentNode.removeChild(input);\n colorMask.appendChild(input);\n colorMask.appendChild(template);\n input.style.left = template.offsetLeft + \"px\";\n $(colorMask).on(\"mouseleave\", function(e) {\n return EventHandlers.mouseleaveEvent.call(input, [ e ]);\n });\n $(colorMask).on(\"mouseenter\", function(e) {\n return EventHandlers.mouseenterEvent.call(input, [ e ]);\n });\n $(colorMask).on(\"click\", function(e) {\n caret(input, findCaretPos(e.clientX));\n return EventHandlers.clickEvent.call(input, [ e ]);\n });\n }\n function renderColorMask(input, caretPos, clear) {\n var maskTemplate = [], isStatic = false, test, testPos, ndxIntlzr, pos = 0;\n function setEntry(entry) {\n if (entry === undefined) entry = \"\";\n if (!isStatic && (test.fn === null || testPos.input === undefined)) {\n isStatic = true;\n maskTemplate.push(\"<span class='im-static'>\" + entry);\n } else if (isStatic && (test.fn !== null && testPos.input !== undefined || test.def === \"\")) {\n isStatic = false;\n var mtl = maskTemplate.length;\n maskTemplate[mtl - 1] = maskTemplate[mtl - 1] + \"</span>\";\n maskTemplate.push(entry);\n } else maskTemplate.push(entry);\n }\n function setCaret() {\n if (document.activeElement === input) {\n maskTemplate.splice(caretPos.begin, 0, caretPos.begin === caretPos.end || caretPos.end > getMaskSet().maskLength ? '<mark class=\"im-caret\" style=\"border-right-width: 1px;border-right-style: solid;\">' : '<mark class=\"im-caret-select\">');\n maskTemplate.splice(caretPos.end + 1, 0, \"</mark>\");\n }\n }\n if (colorMask !== undefined) {\n var buffer = getBuffer();\n if (caretPos === undefined) {\n caretPos = caret(input);\n } else if (caretPos.begin === undefined) {\n caretPos = {\n begin: caretPos,\n end: caretPos\n };\n }\n if (clear !== true) {\n var lvp = getLastValidPosition();\n do {\n if (getMaskSet().validPositions[pos]) {\n testPos = getMaskSet().validPositions[pos];\n test = testPos.match;\n ndxIntlzr = testPos.locator.slice();\n setEntry(buffer[pos]);\n } else {\n testPos = getTestTemplate(pos, ndxIntlzr, pos - 1);\n test = testPos.match;\n ndxIntlzr = testPos.locator.slice();\n if (opts.jitMasking === false || pos < lvp || typeof opts.jitMasking === \"number\" && isFinite(opts.jitMasking) && opts.jitMasking > pos) {\n setEntry(getPlaceholder(pos, test));\n } else isStatic = false;\n }\n pos++;\n } while ((maxLength === undefined || pos < maxLength) && (test.fn !== null || test.def !== \"\") || lvp > pos || isStatic);\n if (isStatic) setEntry();\n setCaret();\n }\n var template = colorMask.getElementsByTagName(\"div\")[0];\n template.innerHTML = maskTemplate.join(\"\");\n input.inputmask.positionColorMask(input, template);\n }\n }\n function mask(elem) {\n function isElementTypeSupported(input, opts) {\n function patchValueProperty(npt) {\n var valueGet;\n var valueSet;\n function patchValhook(type) {\n if ($.valHooks && ($.valHooks[type] === undefined || $.valHooks[type].inputmaskpatch !== true)) {\n var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {\n return elem.value;\n };\n var valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {\n elem.value = value;\n return elem;\n };\n $.valHooks[type] = {\n get: function(elem) {\n if (elem.inputmask) {\n if (elem.inputmask.opts.autoUnmask) {\n return elem.inputmask.unmaskedvalue();\n } else {\n var result = valhookGet(elem);\n return getLastValidPosition(undefined, undefined, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== true ? result : \"\";\n }\n } else return valhookGet(elem);\n },\n set: function(elem, value) {\n var $elem = $(elem), result;\n result = valhookSet(elem, value);\n if (elem.inputmask) {\n $elem.trigger(\"setvalue\", [ value ]);\n }\n return result;\n },\n inputmaskpatch: true\n };\n }\n }\n function getter() {\n if (this.inputmask) {\n return this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : getLastValidPosition() !== -1 || opts.nullable !== true ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join(\"\") : valueGet.call(this) : \"\";\n } else return valueGet.call(this);\n }\n function setter(value) {\n valueSet.call(this, value);\n if (this.inputmask) {\n $(this).trigger(\"setvalue\", [ value ]);\n }\n }\n function installNativeValueSetFallback(npt) {\n EventRuler.on(npt, \"mouseenter\", function(event) {\n var $input = $(this), input = this, value = input.inputmask._valueGet();\n if (value !== getBuffer().join(\"\")) {\n $input.trigger(\"setvalue\");\n }\n });\n }\n if (!npt.inputmask.__valueGet) {\n if (opts.noValuePatching !== true) {\n if (Object.getOwnPropertyDescriptor) {\n if (typeof Object.getPrototypeOf !== \"function\") {\n Object.getPrototypeOf = typeof \"test\".__proto__ === \"object\" ? function(object) {\n return object.__proto__;\n } : function(object) {\n return object.constructor.prototype;\n };\n }\n var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), \"value\") : undefined;\n if (valueProperty && valueProperty.get && valueProperty.set) {\n valueGet = valueProperty.get;\n valueSet = valueProperty.set;\n Object.defineProperty(npt, \"value\", {\n get: getter,\n set: setter,\n configurable: true\n });\n } else if (npt.tagName !== \"INPUT\") {\n valueGet = function() {\n return this.textContent;\n };\n valueSet = function(value) {\n this.textContent = value;\n };\n Object.defineProperty(npt, \"value\", {\n get: getter,\n set: setter,\n configurable: true\n });\n }\n } else if (document.__lookupGetter__ && npt.__lookupGetter__(\"value\")) {\n valueGet = npt.__lookupGetter__(\"value\");\n valueSet = npt.__lookupSetter__(\"value\");\n npt.__defineGetter__(\"value\", getter);\n npt.__defineSetter__(\"value\", setter);\n }\n npt.inputmask.__valueGet = valueGet;\n npt.inputmask.__valueSet = valueSet;\n }\n npt.inputmask._valueGet = function(overruleRTL) {\n return isRTL && overruleRTL !== true ? valueGet.call(this.el).split(\"\").reverse().join(\"\") : valueGet.call(this.el);\n };\n npt.inputmask._valueSet = function(value, overruleRTL) {\n valueSet.call(this.el, value === null || value === undefined ? \"\" : overruleRTL !== true && isRTL ? value.split(\"\").reverse().join(\"\") : value);\n };\n if (valueGet === undefined) {\n valueGet = function() {\n return this.value;\n };\n valueSet = function(value) {\n this.value = value;\n };\n patchValhook(npt.type);\n installNativeValueSetFallback(npt);\n }\n }\n }\n var elementType = input.getAttribute(\"type\");\n var isSupported = input.tagName === \"INPUT\" && $.inArray(elementType, opts.supportsInputType) !== -1 || input.isContentEditable || input.tagName === \"TEXTAREA\";\n if (!isSupported) {\n if (input.tagName === \"INPUT\") {\n var el = document.createElement(\"input\");\n el.setAttribute(\"type\", elementType);\n isSupported = el.type === \"text\";\n el = null;\n } else isSupported = \"partial\";\n }\n if (isSupported !== false) {\n patchValueProperty(input);\n } else input.inputmask = undefined;\n return isSupported;\n }\n EventRuler.off(elem);\n var isSupported = isElementTypeSupported(elem, opts);\n if (isSupported !== false) {\n el = elem;\n $el = $(el);\n originalPlaceholder = el.placeholder;\n maxLength = el !== undefined ? el.maxLength : undefined;\n if (maxLength === -1) maxLength = undefined;\n if (opts.colorMask === true) {\n initializeColorMask(el);\n }\n if (mobile) {\n if (\"inputMode\" in el) {\n el.inputmode = opts.inputmode;\n el.setAttribute(\"inputmode\", opts.inputmode);\n }\n if (opts.disablePredictiveText === true) {\n if (\"autocorrect\" in el) {\n el.autocorrect = false;\n } else {\n if (opts.colorMask !== true) {\n initializeColorMask(el);\n }\n el.type = \"password\";\n }\n }\n }\n if (isSupported === true) {\n el.setAttribute(\"im-insert\", opts.insertMode);\n EventRuler.on(el, \"submit\", EventHandlers.submitEvent);\n EventRuler.on(el, \"reset\", EventHandlers.resetEvent);\n EventRuler.on(el, \"blur\", EventHandlers.blurEvent);\n EventRuler.on(el, \"focus\", EventHandlers.focusEvent);\n if (opts.colorMask !== true) {\n EventRuler.on(el, \"click\", EventHandlers.clickEvent);\n EventRuler.on(el, \"mouseleave\", EventHandlers.mouseleaveEvent);\n EventRuler.on(el, \"mouseenter\", EventHandlers.mouseenterEvent);\n }\n EventRuler.on(el, \"paste\", EventHandlers.pasteEvent);\n EventRuler.on(el, \"cut\", EventHandlers.cutEvent);\n EventRuler.on(el, \"complete\", opts.oncomplete);\n EventRuler.on(el, \"incomplete\", opts.onincomplete);\n EventRuler.on(el, \"cleared\", opts.oncleared);\n if (!mobile && opts.inputEventOnly !== true) {\n EventRuler.on(el, \"keydown\", EventHandlers.keydownEvent);\n EventRuler.on(el, \"keypress\", EventHandlers.keypressEvent);\n } else {\n el.removeAttribute(\"maxLength\");\n }\n EventRuler.on(el, \"input\", EventHandlers.inputFallBackEvent);\n EventRuler.on(el, \"beforeinput\", EventHandlers.beforeInputEvent);\n }\n EventRuler.on(el, \"setvalue\", EventHandlers.setValueEvent);\n undoValue = getBufferTemplate().join(\"\");\n if (el.inputmask._valueGet(true) !== \"\" || opts.clearMaskOnLostFocus === false || document.activeElement === el) {\n var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, el.inputmask._valueGet(true), opts) || el.inputmask._valueGet(true) : el.inputmask._valueGet(true);\n if (initialValue !== \"\") checkVal(el, true, false, initialValue.split(\"\"));\n var buffer = getBuffer().slice();\n undoValue = buffer.join(\"\");\n if (isComplete(buffer) === false) {\n if (opts.clearIncomplete) {\n resetMaskSet();\n }\n }\n if (opts.clearMaskOnLostFocus && document.activeElement !== el) {\n if (getLastValidPosition() === -1) {\n buffer = [];\n } else {\n clearOptionalTail(buffer);\n }\n }\n if (opts.clearMaskOnLostFocus === false || opts.showMaskOnFocus && document.activeElement === el || el.inputmask._valueGet(true) !== \"\") writeBuffer(el, buffer);\n if (document.activeElement === el) {\n caret(el, seekNext(getLastValidPosition()));\n }\n }\n }\n }\n var valueBuffer;\n if (actionObj !== undefined) {\n switch (actionObj.action) {\n case \"isComplete\":\n el = actionObj.el;\n return isComplete(getBuffer());\n\n case \"unmaskedvalue\":\n if (el === undefined || actionObj.value !== undefined) {\n valueBuffer = actionObj.value;\n valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, valueBuffer, opts) || valueBuffer : valueBuffer).split(\"\");\n checkVal.call(this, undefined, false, false, valueBuffer);\n if ($.isFunction(opts.onBeforeWrite)) opts.onBeforeWrite.call(inputmask, undefined, getBuffer(), 0, opts);\n }\n return unmaskedvalue(el);\n\n case \"mask\":\n mask(el);\n break;\n\n case \"format\":\n valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask.call(inputmask, actionObj.value, opts) || actionObj.value : actionObj.value).split(\"\");\n checkVal.call(this, undefined, true, false, valueBuffer);\n if (actionObj.metadata) {\n return {\n value: isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"),\n metadata: maskScope.call(this, {\n action: \"getmetadata\"\n }, maskset, opts)\n };\n }\n return isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\n\n case \"isValid\":\n if (actionObj.value) {\n valueBuffer = actionObj.value.split(\"\");\n checkVal.call(this, undefined, true, true, valueBuffer);\n } else {\n actionObj.value = getBuffer().join(\"\");\n }\n var buffer = getBuffer();\n var rl = determineLastRequiredPosition(), lmib = buffer.length - 1;\n for (;lmib > rl; lmib--) {\n if (isMask(lmib)) break;\n }\n buffer.splice(rl, lmib + 1 - rl);\n return isComplete(buffer) && actionObj.value === getBuffer().join(\"\");\n\n case \"getemptymask\":\n return getBufferTemplate().join(\"\");\n\n case \"remove\":\n if (el && el.inputmask) {\n $.data(el, \"_inputmask_opts\", null);\n $el = $(el);\n el.inputmask._valueSet(opts.autoUnmask ? unmaskedvalue(el) : el.inputmask._valueGet(true));\n EventRuler.off(el);\n if (el.inputmask.colorMask) {\n colorMask = el.inputmask.colorMask;\n colorMask.removeChild(el);\n colorMask.parentNode.insertBefore(el, colorMask);\n colorMask.parentNode.removeChild(colorMask);\n }\n var valueProperty;\n if (Object.getOwnPropertyDescriptor && Object.getPrototypeOf) {\n valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), \"value\");\n if (valueProperty) {\n if (el.inputmask.__valueGet) {\n Object.defineProperty(el, \"value\", {\n get: el.inputmask.__valueGet,\n set: el.inputmask.__valueSet,\n configurable: true\n });\n }\n }\n } else if (document.__lookupGetter__ && el.__lookupGetter__(\"value\")) {\n if (el.inputmask.__valueGet) {\n el.__defineGetter__(\"value\", el.inputmask.__valueGet);\n el.__defineSetter__(\"value\", el.inputmask.__valueSet);\n }\n }\n el.inputmask = undefined;\n }\n return el;\n break;\n\n case \"getmetadata\":\n if ($.isArray(maskset.metadata)) {\n var maskTarget = getMaskTemplate(true, 0, false).join(\"\");\n $.each(maskset.metadata, function(ndx, mtdt) {\n if (mtdt.mask === maskTarget) {\n maskTarget = mtdt;\n return false;\n }\n });\n return maskTarget;\n }\n return maskset.metadata;\n }\n }\n }\n return Inputmask;\n});","module.exports = function (element) {\n var headerBanner = $(\".header-banner\");\n var navigation = $(\".header-wrapper\");\n var headerBannerHeight = headerBanner.length ? headerBanner.outerHeight() : 0;\n var navigationHeight = navigation.length ? navigation.outerHeight() : 0;\n var headerHeight = headerBannerHeight + navigationHeight;\n\n var position = element && element.length ? element.offset().top - headerHeight : 0;\n\n $(\"html, body\").animate({\n scrollTop: position\n }, 500);\n if (!element) {\n $(\".logo-home\").focus();\n }\n};\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const 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/**\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 */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\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 */\nconst 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\nfunction allowedAttribute(attr, allowedAttributeList) {\n const 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 const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let 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\nexport 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 const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach((attr) => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.3.1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.3.1'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\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}\n\nconst AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n}\n\nconst Default = {\n animation : true,\n template : '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<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}\n\nconst HoverState = {\n SHOW : 'show',\n OUT : 'out'\n}\n\nconst Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n}\n\nconst ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n}\n\nconst Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n}\n\nconst Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n}\n\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\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.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\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 if (this._popper !== null) {\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 show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function'\n ? this.config.placement.call(this, tip, this.element)\n : this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\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\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: (data) => this._handlePopperPlacementChange(data)\n })\n\n $(tip).addClass(ClassName.SHOW)\n\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 if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\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.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._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.SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\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.FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n 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 getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function'\n ? this.config.title.call(this.element)\n : this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = (data) => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element) || {}\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _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 _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSEENTER\n : this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER\n ? this.constructor.Event.MOUSELEAVE\n : this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n })\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => {\n if (this.element) {\n this.hide()\n }\n }\n )\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\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(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\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(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach((dataAttr) => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...typeof config === 'object' && config ? config : {}\n }\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(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const 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 _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n const popperInstance = popperData.instance\n this.tip = popperInstance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _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, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * appends params to a url\n * @param {string} data - data returned from the server\"s ajax call\n * @param {Object} iconEmpty - icon that was clicked to add a product to the wishlist\n * @param {Object} iconFilled - icon that was clicked to remove a product from the wishlist\n */\nfunction displayMessageAndChangeIcon(data, iconEmpty, iconFilled) {\n $.spinner().stop();\n var status;\n if (data.success) {\n status = \"alert-success\";\n iconFilled.toggleClass(\"d-none\");\n iconEmpty.toggleClass(\"d-none\");\n } else {\n status = \"alert-danger\";\n }\n\n if ($(\".add-to-wishlist-messages\").length === 0) {\n $(\"body\").append(\n \"<div class='add-to-wishlist-messages '></div>\"\n );\n }\n $(\".add-to-wishlist-messages\")\n .append(\"<div class='add-to-wishlist-alert text-center alert \" + status + \"'>\" + data.msg + \"</div>\");\n\n setTimeout(function () {\n $(\".add-to-wishlist-messages\").remove();\n }, 5000);\n}\n\nmodule.exports = {\n addToWishlist: function () {\n $(\"body\").off(\"click\", \".wishlistTile\").on(\"click\", \".wishlistTile\", function (e) {\n e.preventDefault();\n var $productTile = $(this).closest(\".product\");\n\n if ($(this).hasClass(\"wishlist-add\")) {\n var gtmWishlistContainer = $productTile.find(\".gtm-add-to-wishlist-container\");\n var gtmAddToWishlistObj = gtmWishlistContainer.find(\".gtm-add-to-wishlist\").attr(\"data-add-to-wishlist\");\n if (gtmAddToWishlistObj) {\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"add_to_wishlist\",\n data: JSON.parse(gtmAddToWishlistObj)\n });\n }\n }\n \n var productID = $productTile.data(\"pid\") || $productTile.attr(\"id\");\n var $allCopiesOfTile = $productTile.data(\"pid\") ? $(\".product[data-pid='\" + productID +\"']\") : $(\"#\" + productID + \".product\");\n\n var iconEmpty = $allCopiesOfTile.find(\".wishlist-add\");\n var iconFilled = $allCopiesOfTile.find(\".wishlist-remove\");\n\n var url = \"\";\n if ($(this).data(\"url\")) {\n url = $(this).data(\"url\");\n } else {\n url = $(this).attr(\"href\");\n }\n var pid = $(this).closest(\".product\").data(\"pid\");\n var optionId = $(this).closest(\".product-detail\").find(\".product-option\").attr(\"data-option-id\");\n var optionVal = $(this).closest(\".product-detail\").find(\".options-select option:selected\").attr(\"data-value-id\");\n optionId = optionId || null;\n optionVal = optionVal || null;\n var type = \"get\";\n var data = {};\n if (!url || !pid) {\n return;\n }\n if (!$(this).hasClass(\"wishlist-remove\")) {\n data = {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal\n };\n type = \"post\";\n } else {\n url = url + \"?pid=\" + pid;\n }\n\n $.spinner().start();\n\n $.ajax({\n url: url,\n type: type,\n dataType: \"json\",\n data: data,\n success: function (response) {\n displayMessageAndChangeIcon(response, iconEmpty, iconFilled);\n },\n error: function (err) {\n displayMessageAndChangeIcon(err, iconEmpty, iconFilled);\n }\n });\n });\n }\n};\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n 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']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\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);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\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);\n var marginLeft = parseFloat(styles.marginLeft);\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]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\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","'use strict';\n\nvar scrollAnimate = require('../components/scrollAnimate');\n\n/**\n * Display error messages and highlight form fields with errors.\n * @param {string} parentSelector - the form which contains the fields\n * @param {Object} fieldErrors - the fields with errors\n */\nfunction loadFormErrors(parentSelector, fieldErrors) { // eslint-disable-line\n // Display error messages and highlight form fields with errors.\n $.each(fieldErrors, function (attr) {\n $('*[name=' + attr + ']', parentSelector)\n .addClass('is-invalid')\n .siblings('.invalid-feedback')\n .html(fieldErrors[attr]);\n });\n // Animate to top of form that has errors\n scrollAnimate($(parentSelector));\n}\n\n/**\n * Clear the form errors.\n * @param {string} parentSelector - the parent form selector.\n */\nfunction clearPreviousErrors(parentSelector) {\n $(parentSelector).find('.form-control.is-invalid').removeClass('is-invalid');\n $('.error-message').hide();\n}\n\nmodule.exports = {\n loadFormErrors: loadFormErrors,\n clearPreviousErrors: clearPreviousErrors\n};\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/*!\n* global/window.js\n* https://github.com/RobinHerbots/Inputmask\n* Copyright (c) 2010 - 2019 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 4.0.9\n*/\n\nif (typeof define === \"function\" && define.amd) define(function() {\n return typeof window !== \"undefined\" ? window : new (eval(\"require('jsdom').JSDOM\"))(\"\").window;\n}); else if (typeof exports === \"object\") module.exports = typeof window !== \"undefined\" ? window : new (eval(\"require('jsdom').JSDOM\"))(\"\").window;","'use strict';\n\nmodule.exports = function (element) {\n var position = element && element.length ? element.offset().top : 0;\n $('html, body').animate({\n scrollTop: position\n }, 500);\n if (!element) {\n $('.logo-home').focus();\n }\n};\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} button - button that was clicked to add a product to the saveForLaterList\n */\nfunction displayMessage(data, button) {\n $.spinner().stop();\n var status;\n if (data.success) {\n status = \"alert-success\";\n } else {\n status = \"alert-danger\";\n }\n\n if ($(\".add-to-saveForLaterList-messages\").length === 0) {\n $(\"body\").append(\"<div class='add-to-saveForLaterList-messages '></div>\");\n }\n $(\".add-to-saveForLaterList-messages\").append(\n \"<div class='add-to-saveForLaterList-alert alert text-center \" + status + \"'>\" + data.msg + \"</div>\"\n );\n\n setTimeout(function () {\n $(\".add-to-saveForLaterList-messages\").remove();\n button.removeAttr(\"disabled\");\n }, 5000);\n}\n\nmodule.exports = {\n addToList: function () {\n $(\".add-to-list\").on(\"click\", function (e) {\n e.preventDefault();\n var url = $(this).data(\"href\");\n var button = $(this);\n var pid = $(this).closest(\".product-detail\").find(\".product-id\").html() || $(this).data(\"pid\");\n var optionId = $(this).closest(\".product-detail\").find(\".product-option\").attr(\"data-option-id\");\n var optionVal = $(this)\n .closest(\".product-detail\")\n .find(\".options-select option:selected\")\n .attr(\"data-value-id\");\n optionId = optionId || null;\n optionVal = optionVal || null;\n if (!url || !pid) {\n return;\n }\n\n $.spinner().start();\n $(this).attr(\"disabled\", true);\n $.ajax({\n url: url,\n type: \"post\",\n dataType: \"json\",\n data: {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal\n },\n success: function (data) {\n displayMessage(data, button);\n },\n error: function (err) {\n displayMessage(err, button);\n }\n });\n });\n }\n};\n","'use strict';\n\nmodule.exports = function (include) {\n if (typeof include === 'function') {\n include();\n } else if (typeof include === 'object') {\n Object.keys(include).forEach(function (key) {\n if (typeof include[key] === 'function') {\n include[key]();\n }\n });\n }\n};\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * appends params to a url\n * @param {string} data - data returned from the server's ajax call\n * @param {Object} iconEmpty - icon that was clicked to add a product to the wishlist\n * @param {Object} iconFilled - icon that was clicked to remove a product from the wishlist\n */\nfunction displayMessageAndChangeIcon(data, iconEmpty, iconFilled) {\n $.spinner().stop();\n var status;\n if (data.success) {\n status = \"alert-success\";\n iconEmpty.toggleClass(\"d-none\");\n iconFilled.toggleClass(\"d-none\");\n } else {\n status = \"alert-danger\";\n }\n\n if ($(\".add-to-wishlist-messages\").length === 0) {\n $(\"body\").append(\n \"<div class='add-to-wishlist-messages '></div>\"\n );\n }\n $(\".add-to-wishlist-messages\")\n .append(\"<div class='add-to-wishlist-alert text-center alert \" + status + \"'>\" + data.msg + \"</div>\");\n\n setTimeout(function () {\n $(\".add-to-wishlist-messages\").remove();\n }, 5000);\n}\n\nmodule.exports = {\n addToWishlist: function () {\n $(\"body\").on(\"click\", \".add-to-wish-list\", function (e) {\n e.preventDefault();\n var iconEmpty = $(this).closest(\".product-detail .product-main-region\").find(\".wishlist-add\");\n var iconFilled = $(this).closest(\".product-detail .product-main-region\").find(\".wishlist-remove\");\n var pid = $(this).closest(\".product-detail\").find(\".product-id\").html();\n\n var url = \"\";\n if ($(this).data(\"url\")) {\n url = $(this).data(\"url\");\n }\n else {\n url = $(this).attr(\"href\");\n }\n\n var optionId = $(this).closest(\".product-detail\").find(\".product-option\").attr(\"data-option-id\");\n var optionVal = $(this).closest(\".product-detail\").find(\".options-select option:selected\").attr(\"data-value-id\");\n optionId = optionId || null;\n optionVal = optionVal || null;\n var type = \"get\";\n var data = {};\n if (!url || !pid) {\n return;\n }\n if (!$(this).hasClass(\"wishlist-remove\")) {\n data = {\n pid: pid,\n optionId: optionId,\n optionVal: optionVal\n };\n type = \"post\";\n } else {\n url = url + \"?pid=\" + pid;\n }\n\n if ($(this).hasClass(\"wishlist-add\")) {\n var gtmWishlistContainer = $(this).closest(\".product-detail\").find(\".gtm-add-to-wishlist-container\");\n var gtmAddToWishlistObj = gtmWishlistContainer.find(\".gtm-add-to-wishlist\").attr(\"data-add-to-wishlist\");\n $(\"body\").trigger(\"gtm:standartEvent\", {\n event: \"add_to_wishlist\",\n data: JSON.parse(gtmAddToWishlistObj)\n });\n }\n\n $.spinner().start();\n\n $.ajax({\n url: url,\n type: type,\n dataType: \"json\",\n data: data,\n success: function (response) {\n displayMessageAndChangeIcon(response, iconEmpty, iconFilled);\n },\n error: function (err) {\n displayMessageAndChangeIcon(err, iconEmpty, iconFilled);\n }\n });\n });\n }\n};\n","require(\"./dist/inputmask/inputmask.extensions\");\r\nrequire(\"./dist/inputmask/inputmask.date.extensions\");\r\nrequire(\"./dist/inputmask/inputmask.numeric.extensions\");\r\n\r\nmodule.exports = require(\"./dist/inputmask/inputmask.js\");\r\n","/*!\n* inputmask.extensions.js\n* https://github.com/RobinHerbots/Inputmask\n* Copyright (c) 2010 - 2019 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 4.0.9\n*/\n\n(function(factory) {\n if (typeof define === \"function\" && define.amd) {\n define([ \"./inputmask\" ], factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory(require(\"./inputmask\"));\n } else {\n factory(window.Inputmask);\n }\n})(function(Inputmask) {\n Inputmask.extendDefinitions({\n A: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n casing: \"upper\"\n },\n \"&\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n casing: \"upper\"\n },\n \"#\": {\n validator: \"[0-9A-Fa-f]\",\n casing: \"upper\"\n }\n });\n Inputmask.extendAliases({\n cssunit: {\n regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\n },\n url: {\n regex: \"(https?|ftp)//.*\",\n autoUnmask: false\n },\n ip: {\n mask: \"i[i[i]].i[i[i]].i[i[i]].i[i[i]]\",\n definitions: {\n i: {\n validator: function(chrs, maskset, pos, strict, opts) {\n if (pos - 1 > -1 && maskset.buffer[pos - 1] !== \".\") {\n chrs = maskset.buffer[pos - 1] + chrs;\n if (pos - 2 > -1 && maskset.buffer[pos - 2] !== \".\") {\n chrs = maskset.buffer[pos - 2] + chrs;\n } else chrs = \"0\" + chrs;\n } else chrs = \"00\" + chrs;\n return new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\").test(chrs);\n }\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return maskedValue;\n },\n inputmode: \"numeric\"\n },\n email: {\n mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\n greedy: false,\n casing: \"lower\",\n onBeforePaste: function(pastedValue, opts) {\n pastedValue = pastedValue.toLowerCase();\n return pastedValue.replace(\"mailto:\", \"\");\n },\n definitions: {\n \"*\": {\n validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5!#$%&'*+/=?^_`{|}~-]\"\n },\n \"-\": {\n validator: \"[0-9A-Za-z-]\"\n }\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return maskedValue;\n },\n inputmode: \"email\"\n },\n mac: {\n mask: \"##:##:##:##:##:##\"\n },\n vin: {\n mask: \"V{13}9{4}\",\n definitions: {\n V: {\n validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n casing: \"upper\"\n }\n },\n clearIncomplete: true,\n autoUnmask: true\n }\n });\n return Inputmask;\n});"],"sourceRoot":""}