webpack-bootstrap-ui-kit/dist/js/app.js.map
2019-11-25 14:45:03 +07:00

1 line
1.2 MiB

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@a2nt/meta-lightbox/src/js/meta-lightbox.js","webpack:///./node_modules/bootstrap-datepicker/dist/js/bootstrap-datepicker.js","webpack:///./node_modules/bootstrap-timepicker/js/bootstrap-timepicker.js","webpack:///./node_modules/bootstrap/js/dist/alert.js","webpack:///./node_modules/bootstrap/js/dist/button.js","webpack:///./node_modules/bootstrap/js/dist/carousel.js","webpack:///./node_modules/bootstrap/js/dist/collapse.js","webpack:///./node_modules/bootstrap/js/dist/modal.js","webpack:///./node_modules/bootstrap/js/dist/popover.js","webpack:///./node_modules/bootstrap/js/dist/scrollspy.js","webpack:///./node_modules/bootstrap/js/dist/tab.js","webpack:///./node_modules/bootstrap/js/dist/tooltip.js","webpack:///./node_modules/bootstrap/js/dist/util.js","webpack:///./node_modules/font-awesome sync nonrecursive \\.(otf|eot|svg|ttf|woff|woff2)$","webpack:///./node_modules/hammerjs/hammer.js","webpack:///./node_modules/jquery-hammerjs/jquery.hammer.js","webpack:///./node_modules/jquery-hoverintent/jquery.hoverIntent.js","webpack:///./node_modules/jquery.inputmask/dist/jquery.inputmask.bundle.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/select2/dist/js/select2.js","webpack:///./node_modules/smooth-scroll/dist/smooth-scroll.polyfills.min.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/img sync nonrecursive \\.(png|jpe","webpack:///./src/img/bg.png","webpack:///./src/img/photo1.png","webpack:///./src/img/photo2.jpg","webpack:///./src/img/photo3.svg","webpack:///./src/js/_consts.js","webpack:///./src/js/_events.js","webpack:///./src/js/_components/_ui.hover.js","webpack:///./src/js/_components/_ui.carousel.js","webpack:///./src/js/_components/_ui.menu.js","webpack:///./src/js/_components/_ui.spinner.js","webpack:///./src/js/_components/_ui.ajax.js","webpack:///./src/js/_components/_ui.form.fields.js","webpack:///./src/js/_components/_ui.form.basics.js","webpack:///./src/js/_main.js","webpack:///./src/js/_components/_ui.video.preview.js","webpack:///./src/js/_components/_ui.form.datetime.js","webpack:///./src/js/_components/_ui.form.validate.field.js","webpack:///./src/js/_components/_ui.form.stepped.js","webpack:///./src/js/_layout.js","webpack:///./src/js/app.js","webpack:///./src/js/lang/_en.js","webpack:///external \"jQuery\""],"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","$","window","document","pluginName","defaults","effect","theme","keyboardNav","clickOverlayToClose","onInit","beforeShowLightbox","afterShowLightbox","lightbox","beforeHideLightbox","afterHideLightbox","onPrev","element","onNext","errorMessage","MetaLightbox","options","this","extend","_defaults","_name","init","$this","$html","ajaxLoaded","hasClass","addClass","removeClass","on","e","preventDefault","stopPropagation","showLightbox","off","code","keyCode","which","destructLightbox","trigger","el","$el","content","currentLink","galleryItems","constructLightbox","find","processContent","data","length","hide","show","index","eq","last","first","setTimeout","link","img","video","src","classTerm","iframe","wrap","href","attr","html","isHidpi","match","$content","imgwrapper","append","css","height","resize","zoom","contentLoaded","setTitle","ga","frameborder","vspace","hspace","scrolling","substring","clone","outerHeight","ajax","sync","async","url","dataType","method","cache","statusCode","404","console","log","location","302","error","jqXHR","statusText","success","status","dataJson","parseJSON","title","getResponseHeader","indexOf","replace","localStorage","setItem","URL","history","pushState","page","imagesLoaded","then","text","titleWrap","overlay","nav","close","$overlay","$target","target","replaceState","empty","devicePixelRatio","matchMedia","matches","fn","each","metaLightbox","jQuery","undefined","UTCDate","Date","UTC","apply","arguments","UTCToday","today","getFullYear","getMonth","getDate","isUTCEquals","date1","date2","getUTCFullYear","getUTCMonth","getUTCDate","alias","deprecationMsg","datepicker","deprecated","extras","DateArray","slice","contains","val","valueOf","remove","splice","new_array","isArray","clear","push","copy","a","Datepicker","_events","_secondaryEvents","_process_options","dates","viewDate","defaultViewDate","focusDate","isInput","is","inputField","component","isInline","picker","DPGlobal","template","_check_template","templates","leftArrow","rightArrow","_buildEvents","_attachEvents","appendTo","rtl","calendarWeeks","Number","startDate","_o","endDate","daysOfWeekDisabled","daysOfWeekHighlighted","datesDisabled","_allow_update","setViewMode","startView","fillDow","fillMonths","update","constructor","_resolveViewName","view","viewModes","viewMode","inArray","names","_resolveDaysOfWeek","daysOfWeek","split","map","tmp","ex","opts","lang","language","minViewMode","maxViewMode","Math","max","min","multidate","multidateSeparator","String","weekStart","weekEnd","format","parseFormat","_local_to_utc","_zero_time","parseDate","assumeNearbyYear","Infinity","plc","orientation","toLowerCase","_plc","grep","word","test","x","y","year","month","day","_applyEvents","evs","ch","ev","_unapplyEvents","events","keyup","proxy","keydown","paste","showOnFocus","focus","click","blur","_focused_from","immediateUpdates","date","navArrowsClick","dayCellClick","place","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","event","altdate","local_date","_utc_to_local","type","ix","formatDate","prop","enableOnReadonly","container","navigator","msMaxTouchPoints","disableTouchKeyboard","detach","forceParse","setValue","destroy","dateString","originalEvent","clipboardData","types","getData","setDate","utc","local","getTime","getTimezoneOffset","_zero_utc_time","getDates","getUTCDates","selected_date","clearDates","autoclose","setDates","args","setUTCDates","setUTCDate","formatted","getFormattedDate","join","getStartDate","setStartDate","updateNavArrows","getEndDate","setEndDate","setDaysOfWeekDisabled","setDaysOfWeekHighlighted","setDatesDisabled","calendarWidth","outerWidth","calendarHeight","windowWidth","width","scrollTop","appendOffset","offset","parentsZindex","parents","itemZIndex","zIndex","zIndexOffset","parent","left","top","yorient","parseInt","right","oldDates","fromArgs","dateWithinRange","updateViewDate","change","fill","showWeekDays","dowCnt","daysMin","localDate","monthsShort","setRange","range","getClassNames","cls","todayHighlight","dateIsDisabled","getUTCDay","_fill_yearsView","selector","cssClass","factor","startYear","endYear","beforeFn","classes","tooltip","before","step","startVal","floor","endVal","focusedVal","selected","currVal","noop","enabled","concat","startMonth","endMonth","todaytxt","cleartxt","titleFormat","todayDate","titleBtnVisible","todayBtn","weekOfDateIsDisabled","isNaN","clearBtn","prevMonth","nextMonth","setUTCFullYear","weekDay","clsName","ws","th","yth","calWeek","beforeShowDay","isFunction","uniqueSort","unique","toString","monthsTitle","months","end","beforeShowMonth","that","moDate","beforeShowYear","beforeShowDecade","beforeShowCentury","prevIsDisabled","nextIsDisabled","toggleClass","_setDate","setUTCMonth","timestamp","currentTarget","dir","navStep","moveMonth","_toggle_multidate","toggleActive","moveDay","newDate","moveWeek","new_month","new_date","mag","abs","moveYear","moveAvailableDate","newViewDate","dateChanged","keyboardNavigation","ctrlKey","shiftKey","children","filter","DateRangePicker","inputs","jquery","keepEmptyValues","datepickerPlugin","dateUpdated","pickers","updateDates","opts_from_el","prefix","out","RegExp","re_lower","_","opts_from_locale","locale_opts","k","updateRanges","updating","dp","keep_empty_values","j","old","option","internal_return","Array","shift","elopts","locopts","toArray","Error","Constructor","en","days","daysShort","validParts","nonpunctuation","toValue","toDisplay","separators","parts","assumeNearby","part","fn_map","w","dateAliases","yesterday","tomorrow","filtered","parsed","setters_order","setters_map","yyyy","v","threshold","fparts","match_part","cnt","_date","D","DD","M","MM","yy","dd","mm","seps","headTemplate","contTemplate","footTemplate","noConflict","version","msg","warn","Timepicker","widget","$element","defaultTime","disableFocus","disableMousewheel","isOpen","minuteStep","modalBackdrop","secondStep","snapToStep","showInputs","showMeridian","showSeconds","appendWidgetTo","showWidgetOnAddonClick","icons","maxHours","explicitMode","handleDocumentClick","self","scope","$widget","hideWidget","_init","showWidget","highlightUnit","elementKeydown","blurElement","mousewheel","getTemplate","widgetClick","select","widgetKeydown","widgetKeyup","setDefaultTime","highlightedUnit","updateFromElementVal","hour","minute","second","meridian","decrementHour","toggleMeridian","decrementMinute","newVal","decrementSecond","highlightPrevUnit","highlightNextUnit","incrementHour","highlightHour","incrementMinute","highlightMinute","incrementSecond","highlightSecond","highlightMeridian","getCursorPosition","input","selectionStart","selection","sel","createRange","selLen","moveStart","hourTemplate","minuteTemplate","secondTemplate","meridianTemplate","templateContent","up","down","modal","position","setSelectionRange","delta","wheelDelta","detail","scrollTo","changeToNearestStep","segment","round","widgetWidth","widgetHeight","windowHeight","topOverflow","bottomOverflow","timepicker","dTime","hours","getHours","minutes","getMinutes","seconds","getSeconds","ceil","setTime","time","ignoreWidget","timeMode","timeArray","updateElement","updateWidget","updateFromWidgetInputs","$input","action","closest","Util","_defineProperties","props","descriptor","configurable","writable","JQUERY_NO_CONFLICT","Event","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_element","protoProps","staticProps","_proto","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","getSelectorFromElement","querySelector","closeEvent","_this","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","_destroyElement","emulateTransitionEnd","_jQueryInterface","config","_handleDismiss","alertInstance","factory","NAME","Selector","FOCUS_BLUR_DATA_API","Button","toggle","triggerChangeEvent","addAriaPressed","checked","classList","activeElement","hasAttribute","setAttribute","button","_defineProperty","obj","_objectSpread","source","ownKeys","keys","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","forEach","DATA_KEY","EVENT_KEY","Default","interval","keyboard","slide","pause","touch","DefaultType","Direction","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","LOAD_DATA_API","ACTIVE","ACTIVE_ITEM","ITEM","ITEM_IMG","NEXT_PREV","INDICATORS","DATA_SLIDE","DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","documentElement","maxTouchPoints","_pointerEvent","Boolean","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","triggerTransitionEnd","cycle","clearInterval","setInterval","visibilityState","to","activeIndex","_getItemIndex","direction","typeCheckConfig","_handleSwipe","absDeltax","_this2","_keydown","_addTouchEventListeners","_this3","start","pointerType","toUpperCase","clientX","touches","clearTimeout","querySelectorAll","add","move","tagName","parentNode","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","reflow","nextElementInterval","getAttribute","defaultInterval","TypeError","ride","_dataApiClickHandler","slideIndex","carousels","len","$carousel","SHOW","SHOWN","HIDE","HIDDEN","Dimension","ACTIVES","DATA_TOGGLE","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","not","startEvent","dimension","_getDimension","style","setTransitioning","scrollSize","getBoundingClientRect","triggerArrayLength","isTransitioning","isElement","_getTargetFromElement","triggerArray","$trigger","selectors","backdrop","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","DIALOG","MODAL_BODY","DATA_DISMISS","FIXED_CONTENT","STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","showEvent","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","hideEvent","transition","_hideModal","htmlElement","handleUpdate","nodeType","Node","ELEMENT_NODE","body","appendChild","display","removeAttribute","_enforceFocus","shownEvent","transitionComplete","has","_this5","_this6","_this7","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","_this8","animate","createElement","className","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","rect","innerWidth","_getScrollbarWidth","_this9","fixedContent","stickyContent","actualPadding","calculatedPadding","parseFloat","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","clientWidth","removeChild","_this10","Tooltip","BSCLS_PREFIX_REGEX","placement","INSERTED","CLICK","FOCUSOUT","Popover","_Tooltip","subClass","superClass","__proto__","isWithContent","getTitle","_getContent","addAttachmentClass","attachment","getTipElement","CLASS_PREFIX","tip","setContent","$tip","setElementContent","_cleanTipClass","tabClass","ACTIVATE","SCROLL","DATA_SPY","NAV_LIST_GROUP","NAV_LINKS","NAV_ITEMS","LIST_ITEMS","DROPDOWN","DROPDOWN_ITEMS","DROPDOWN_TOGGLE","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","item","sort","b","getUID","pageYOffset","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","$link","node","scrollSpys","$spy","Tab","previous","listElement","itemSelector","nodeName","makeArray","complete","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","Popper","uriAttrs","DefaultWhitelist","area","br","col","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","_loop","elName","attributeList","attributes","whitelistedAttributes","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","DISALLOWED_ATTRIBUTES","animation","delay","fallbackPlacement","boundary","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HoverState","Trigger","_isEnabled","_timeout","_hoverState","_activeTrigger","_popper","_setListeners","enable","disable","toggleEnabled","dataKey","context","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","shadowRoot","findShadowRoot","isInTheDom","ownerDocument","tipId","_getAttachment","_getContainer","modifiers","_getOffset","flip","behavior","arrow","preventOverflow","boundariesElement","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","_fixTransition","prevHoverState","scheduleUpdate","offsets","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","popperData","popperInstance","instance","popper","initConfigAnimation","transitionEndEmulator","duration","called","random","getElementById","hrefAttr","trim","err","transitionDelay","floatTransitionDuration","floatTransitionDelay","offsetHeight","supportsTransitionEnd","componentName","configTypes","expectedTypes","valueType","attachShadow","getRootNode","root","ShadowRoot","special","bindType","delegateType","handle","handleObj","handler","webpackEmptyContext","req","resolve","exportName","assign","VENDOR_PREFIXES","TEST_ELEMENT","TYPE_FUNCTION","now","setTimeoutContext","timeout","bindFn","invokeArrayArg","arg","iterator","deprecate","message","deprecationMessage","stack","output","nextKey","dest","merge","inherit","child","base","properties","childP","baseP","_super","boolOrFn","ifUndefined","val1","val2","addEventListeners","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","inStr","str","findByKey","uniqueArray","results","values","prefixed","camelProp","_uniqueId","getWindowForElement","doc","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","userAgent","COMPUTE_INTERVAL","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","Input","manager","inputTarget","domHandler","inputHandler","eventType","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offsetDelta","prevDelta","prevInput","deltaX","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","lastInterval","computeIntervalInputData","srcEvent","computeInputData","emit","recognize","clientY","p1","p2","sqrt","atan2","PI","evEl","evTarget","evWin","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","all","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","DEDUP_TIMEOUT","DEDUP_DISTANCE","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","set","compute","actions","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Recognizer","state","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","count","Hammer","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","isValid","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","stop","force","stopped","curRecognizer","existing","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","originalEmit","hammer","hammerify","cX","cY","_cfg","sensitivity","INSTANCE_COUNT","track","pageX","pageY","compare","cfg","timeoutId","isActive","over","hoverIntent","handlerIn","handlerOut","instanceId","isPlainObject","handleHover","hoverIntentData","Inputmask","maskset","noMasksCache","definitions","userOptions","dataAttribute","isRTL","numericInput","resolveAlias","aliasStr","aliasDefinition","aliases","mask","generateMaskSet","nocache","generateMask","metadata","greedy","repeat","placeholder","repeatStart","groupmarker","quantifiermarker","masksetDefinition","masksCache","maskToken","analyseMask","validPositions","_buffer","buffer","tests","maskLength","reverse","ms","keepStatic","altMask","ndx","msk","alternatormarker","pop","maskScope","actionObj","getMaskTemplate","baseOnInput","minimalPos","includeMode","ndxIntlzr","testPos","maskTemplate","pos","lvp","getLastValidPosition","maxLength","getMaskSet","locator","nativeDef","getPlaceholder","getTestTemplate","jitMasking","isFinite","def","resetMaskSet","soft","closestTo","strict","after","valids","posNdx","psNdx","stripValidPositions","nocheck","IsEnclosedStatic","posMatch","prevMatch","nextMatch","startPos","positionsClone","needsValidation","optionality","canClearPosition","isMask","positionCanMatchDefinition","determineTestTemplate","guessNextBest","testPositions","lvTest","getTests","lvTestAltArr","alternation","optionalQuantifier","newBlockMarker","checkAlternationMatch","tstPs","getTest","valid","tndx","resolveTestFromToken","ndxInitializer","loopNdx","quantifierRecurse","handleMatch","isFirstMatch","latestMatch","tokenGroup","firstMatch","isQuantifier","resolveNdxInitializer","alternateNdx","targetAlternation","bestMatch","indexPos","lmnt","ndxPos","cd","cacheDependency","isGroup","isOptional","optionalToken","insertStop","isAlternator","maltMatches","alternateToken","malternateMatches","currentMatches","loopNdxCnt","altIndex","amndx","currentPos","ndxInitializerClone","altIndexArr","ntndx","ndx1","altMatch","hasMatch","ndx2","altMatch2","na","altLocArr","alndx","qt","qndx","quantifier","filterTests","maskTokens","previousPos","tst","mtndx","cardinality","casing","getBufferTemplate","getBuffer","noCache","refreshFromBuffer","skipOptionalPartCharacter","posBefore","fromCharCode","SPACE","altArr1","altArr2","altArrC","isMatch","fromSetValid","fromAlternate","isSelection","posObj","begin","insertMode","_isValid","rslt","loopend","chrs","getBufferElement","validatedPos","possibleModifiedBuffer","insert","setValidPosition","trackbackAlternations","originalPos","newPos","vp","targetLocator","tll","ps","equality","validTest","vps","initialLength","fillMissingNonMask","result","caret","generatedInput","maskPos","pndx","testTemplate","testsFromPos","radixPointDefinitionSymbol","radixPoint","handleRemove","DELETE","currentPosValid","seekNext","staticChar","nPos","snPos","lastAlt","altPos","prevAltPos","validPos","altNdxs","decisionPos","validPsClone","isValidRslt","lAltPos","decisionTaker","possibilityPos","prevPos","mndx","validInputs","staticInputsBeforePos","staticInputsBeforePosAlternate","verifyValidInput","possibilities","targetLvp","alternate","postValidation","newBlock","maskL","seekPrevious","writeBuffer","caretPos","triggerInputEvent","onBeforeWrite","inputmask","_valueSet","renderColorMask","skipInputEvent","prevTest","staticAlternations","charAt","checkVal","writeOut","nptvl","initiatingEvent","stickyCaret","inputValue","charCodes","initialNdx","autoUnmask","staticInput","escapeRegex","charCode","keypress","charCodeAt","nextTest","charCodeNdx","bufferTemplateArr","isTemplateMatch","EventHandlers","keypressEvent","forwardPosition","unmaskedvalue","umValue","unmaskedValue","onUnMask","bufferValue","notranslate","translatePosition","selectionEnd","getSelection","getRangeAt","commonAncestorContainer","startOffset","endOffset","duplicate","_valueGet","scrollCalc","getComputedStyle","currentStyle","fontSize","scrollLeft","scrollWidth","mobile","firstChild","textNode","createTextNode","setStart","setEnd","collapse","removeAllRanges","addRange","createTextRange","moveEnd","determineLastRequiredPosition","returnDefinition","bl","positions","lvTestAlt","clearOptionalTail","rl","lmib","isComplete","lrp","aml","BACKSPACE","pend","groupSeparator","generalize","initializeColorMask","colorMask","offsetWidth","computedStyle","borderLeftWidth","borderRightWidth","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","lineHeight","webkitAppearance","mozAppearance","Appearance","backgroundColor","color","clientx","textTransform","letterSpacing","visibility","whiteSpace","itl","inputText","previousWidth","offset1","offset2","findCaretPos","clickEvent","handleStatic","static","undoValue","valueBuffer","skipKeyPressEvent","ignorable","mouseEnter","EventRuler","eventName","eventHandler","imOpts","disabled","readOnly","tabThrough","TAB","iemobile","iphone","returnVal","form","evArr","keydownEvent","BACKSPACE_SAFARI","X","evName","isSupported","isInputEventSupported","END","PAGE_DOWN","HOME","PAGE_UP","undoOnEscape","ESCAPE","altKey","INSERT","onKeyDown","ignorables","checkval","metaKey","ENTER","writeOutBuffer","valResult","onKeyValidation","pasteEvent","tempValue","valueBeforeCaret","substr","valueAfterCaret","pasteValue","onBeforePaste","inputFallBackEvent","inputChar","bufferTemplate","setValueEvent","onBeforeMask","clearMaskOnLostFocus","clearIncomplete","focusEvent","nptValue","showMaskOnFocus","showMaskOnHover","positionCaretOnTab","mouseleaveEvent","tabbed","selectedCaret","positionCaretOnClick","clickPos","radixPos","doRadixFocus","clickPosition","lastPosition","dblclickEvent","cutEvent","clipData","setData","execCommand","blurEvent","mouseenterEvent","submitEvent","removeMaskOnSubmit","resetEvent","elementType","supportsInputType","isContentEditable","npt","nullable","valueGet","setter","valueSet","__valueGet","noValuePatching","getPrototypeOf","valueProperty","textContent","__lookupGetter__","__lookupSetter__","__defineGetter__","__defineSetter__","__valueSet","overruleRTL","valHooks","inputmaskpatch","valhookGet","valhookSet","$elem","patchValhook","installNativeValueSetFallback","patchValueProperty","isElementTypeSupported","rightAlign","textAlign","android","inputmode","androidHack","oncomplete","onincomplete","oncleared","inputEventOnly","initialValue","maskTarget","mtdt","ua","optionalmarker","escapeChar","pastedValue","validator","definitionSymbol","staticDefinitionSymbol","elems","scopedOpts","importOption","optionData","dataoptions","attrOptions","JSON","parse","importAttributeOptions","noremask","getemptymask","hasMaskedValue","getmetadata","MaskToken","openGroup","insertTestDefinition","mtoken","maskdef","escaped","prevalidators","prevalidator","prevalidatorsL","defaultCase","openenings","currentOpeningToken","alternator","currentToken","openingToken","lastMatch","groupToken","tokenizer","exec","mq","mq0","mq1","verifyGroupMarker","token","nextToken","reverseTokens","intMatch","st","extendDefaults","extendDefinitions","definition","extendAliases","unmask","ALT","CAPS_LOCK","COMMA","COMMAND","COMMAND_LEFT","COMMAND_RIGHT","CONTROL","DOWN","MENU","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PERIOD","SHIFT","UP","WINDOWS","nptmask","triggerHandler","regex","val1pre","val2pre","separator","escapedSeparator","leapday","yearrange","minyear","maxyear","isInYearRange","enteredyear","enteredyear2","determinebaseyear","hint","currentyear","maxYearPrefix","maxYearPostfix","maxxYear","currentYearPrefix","currentYearAndHint","getFrontValue","currentResult","dayMonthValue","bufferStr","isLeapYear","pchrs","frontValue","yearPrefix","datetime","hrspre","hrs24","hrs","ampm","mspre","timeseparator","hourFormat","h","datetime12","shamsi","A","ip","maskedValue","email","mac","vin","V","numeric","autoEscape","txt","escapedTxt","integerDigits","autoGroup","groupSize","mod","integerOptional","digitsOptional","digits","decimalProtect","dq","suffix","allowPlus","allowMinus","negationSymbol","front","back","unmaskAsNumber","postFormat","charAtPos","cbuf","isNegative","bufVal","bufValOrigin","escapedGroupSeparator","radixSplit","reg","needsRefresh","processValue","floatValue","signedFloatValue","radixPosition","rpb","unshift","integerPart","integerNPart","signHandler","matchRslt","radixHandler","integerValue","leadingZeroHandler","decimalPart","radix","bufClone","vs","kommaMatches","dotMatches","decPart","digitsFactor","pow","positionInput","currency","decimal","integer","percentage","maskSort","maska","maskb","maskas","maskbs","localeCompare","analyseMaskBase","maskGroups","phoneCodes","reduceVariations","masks","previousVariation","previousmaskGroup","variation","maskGroup","rebuild","submasks","abstractphone","countrycode","processedValue","Regex","regexTokens","quantifierFilter","RegexToken","repeaterPart","validateRegexToken","fromGroup","isvalid","regexPart","openGroupCount","matchToken","crrntndx","matchGroup","regexPartBak","qm","testExp","tl","cbuffer","opengroups","quantifierToken","analyseRegex","regexToken","isBrowser","timeoutDuration","longerTimeoutBrowsers","debounce","Promise","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","firstElementChild","element1root","getScroll","upperSide","scrollingElement","getBordersSize","styles","axis","sideA","sideB","getSize","getWindowSizes","classCallCheck","createClass","defineProperties","_extends","getClientRect","bottom","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","parentElement","getBoundaries","boundaries","excludeScroll","relativeOffset","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","refRect","rects","sortedAreas","_ref","filteredAreas","_ref2","computedPlacement","getReferenceOffsets","getOuterSizes","marginBottom","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","arr","check","runModifiers","ends","findIndex","cur","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","isNumeric","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","index2","Defaults","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","keepTogether","opSide","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","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","prefixedProperty","invertTop","invertLeft","applyStyle","onLoad","modifierOptions","requestAnimationFrame","Utils","global","PopperUtils","S2","select2","amd","requirejs","require","define","undef","main","makeMap","defined","waiting","defining","hasOwn","aps","jsSuffixRegExp","hasProp","normalize","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","plugin","relResourceName","f","pr","uri","deps","cjsModule","ret","usingExports","callbackType","load","alt","_defined","_$","getMethods","theClass","proto","methods","methodName","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","listeners","params","_type","invoke","generateChars","chars","func","_convertData","originalKey","dataLevel","hasScroll","escapeMarkup","markup","replaceMap","'","appendMany","$nodes","$jqNodes","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","Results","dataAdapter","render","$results","displayMessage","hideLoading","$message","hideMessages","$options","$option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","current","selectedIds","showLoading","loading","loadingMore","$loading","prepend","attrs","Element","msMatchesSelector","webkitMatchesSelector","_resultId","role","label","$children","$child","$childrenContainer","$container","removeAttr","$highlighted","getHighlightedResults","currentIndex","nextIndex","$next","currentOffset","nextTop","nextOffset","nextBottom","isAtTop","isAtBottom","evt","CTRL","ESC","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","SingleSelection","$rendered","selectionContainer","MultipleSelection","$selections","Placeholder","decorated","normalizePlaceholder","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","removeAll","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","path","translations","BaseAdapter","query","generateResultId","SelectAdapter","currentData","unselect","addOptions","innerText","normalizedData","_normalizeItem","matcher","ArrayAdapter","_dataToConvert","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","newData","$newOption","replaceWith","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","q","transport","failure","$request","fail","_request","abort","request","_queryTimeout","Tags","tags","createTag","insertTag","tag","_removeOldTags","wrapper","checkChildren","Tokenizer","dropdown","tokenData","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","Dropdown","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","parentOffset","isConnected","minWidth","MinimumResultsForSearch","minimumResultsForSearch","countResults","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","_resolveLanguage","uniqueLanguages","_processTranslations","debug","stripDiacritics","amdLanguageBase","dropdownAutoWidth","original","scrollAfterSelect","templateResult","templateSelection","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","isEmptyObject","resolvedLanguages","baseLanguage","languageData","camelCase","convertedData","Options","fromElement","InputCompat","excludedData","dataset","upperCaseLetter","letter","attributeName","dataName","dataValue","Select2","_generateId","tabindex","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","insertAfter","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","attachEvent","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","_observer","mutations","observe","childList","subtree","nonRelayEvents","toggleDropdown","open","addedNodes","removedNodes","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","hasFocus","detachEvent","disconnect","thisMethods","instanceOptions","bubbles","cancelable","initCustomEvent","CustomEvent","ignore","header","topOnEmptyHash","speed","clip","easing","customEasing","updateURL","popstate","emitEvents","decodeURIComponent","InvalidCharacterError","offsetTop","anchor","g","E","S","C","O","I","F","L","cancelScroll","outline","H","smoothScroll","stringify","hostname","pathname","animateScroll","Function","webpackContext","webpackContextResolve","ENVS","AJAX","LOADED","MAPLOADED","MAPMARKERCLICK","MAPPOPUPCLOSE","SET_TARGET_UPDATE","RESTORE_FIELD","FORM_INIT_BASICS","FORM_INIT_STEPPED","FORM_INIT_VALIDATE","FORM_INIT_VALIDATE_FIELD","FORM_INIT_STORAGE","FORM_VALIDATION_FAILED","FORM_STEPPED_NEW_STEP","FORM_STEPPED_FIRST_STEP","FORM_STEPPED_LAST_STEP","FORM_FIELDS","W","HoverUI","ui","$parent","$triger","isShown","ready","jsHoverUI","CarouselUI","$indicators","carousel","$youtubeSlides","YT","Player","pauseVideo","Events","SlidingMenu","jsSlidingMenu","SpinnerUI","AjaxUI","G","$Html","$Body","Spinner","MainUI","updateLocation","absoluteLocation","URLDetails","js","regions","replaceRegion","preload","$head","items","itemCallback","Deferred","promise","dfds","dfd","always","when","$region","jsAjaxUI","Title","onpopstate","$existingLink","FormFieldUI","shown","vals","$collapse","_el","restore","wipe","FormBasics","$fields","$selectFields","$radioOptions","siblings","jsFormBasics","SmoothScroll","$AlertNotify","$SiteWideMessage","updateOnlineStatus","onLine","datastatus","reload","loadImages","detectBootstrapScreenSize","getScript","fonts","WebFont","google","families","targetEl","$targetEl","print","envs","Consts","curEnv","env","relative","fadeOut","alert","fadeIn","play","$imgs","$imgUrls","$imgLazyUrls","lazySrc","VideoPreviewUI","$_el","video_id","YouTubeGetID","jsonp","thumbnail_src","thumbnail_large","jsVideoPreviewUI","datepickerOptions","DatetimeUI","defaultDate","jsDatetimeUI","FormValidateField","_actions","validate","extraChecks","checkValidity","isHtml","valideURL","removeError","setError","childNodes","$field","SteppedForm","LANG","_currentStepCounter","_totalStepsCounter","_steps","_stepNext","_stepPrev","_currentStep","_totalSteps","_stepsOrder","$hasError","$modal","targetStep","currentStep","fieldUI","jsSteppedForm","LayoutUI","importAll","STEPCOUNTER","STEPBUTTONS"],"mappings":"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ACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,KACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,QAMdL,EAAGK,OAAO,oBAAoB,CAC5B,aACC,SAAUR,GACX,SAAS4M,EAAalhE,EAAUvf,GAC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","file":"js/app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/js/app.js\");\n","/*\n * MetaLightbox v0.61\n * https://tony.twma.pro\n *\n */\n\n//=require ../../bower_components/jquery-zoom/jquery.zoom.js\n\n(function($, window, document) {\n\n var pluginName = 'metaLightbox',\n defaults = {\n effect: 'fade',\n theme: 'default',\n keyboardNav: true,\n clickOverlayToClose: true,\n onInit: function() {},\n beforeShowLightbox: function() {},\n afterShowLightbox: function(lightbox) {},\n beforeHideLightbox: function() {},\n afterHideLightbox: function() {},\n onPrev: function(element) {},\n onNext: function(element) {},\n errorMessage: 'The requested content cannot be loaded. Please try again later.',\n };\n\n function MetaLightbox(element, options) {\n /*this.el = element;\n this.$el = $(this.el);*/\n\n this.options = $.extend({}, defaults, options);\n\n this._defaults = defaults;\n this._name = pluginName;\n\n this.init();\n }\n\n MetaLightbox.prototype = {\n\n init: function() {\n var $this = this,\n $html = $('html');\n\n this.ajaxLoaded = false;\n\n // make object globally accessible\n document.MetaLightbox = this;\n\n // Need this so we don't use CSS transitions in mobile\n if (!$html.hasClass('meta-lightbox-notouch')) $html.addClass('meta-lightbox-notouch');\n if ('ontouchstart' in document) $html.removeClass('meta-lightbox-notouch');\n\n // Setup the click\n $(document).on('click', '[data-toggle=\"lightbox\"],[data-lightbox-gallery]', function(e) {\n e.preventDefault();\n e.stopPropagation();\n\n $this.showLightbox(this);\n return false;\n });\n\n // keyboardNav\n if (this.options.keyboardNav) {\n $('body').off('keyup').on('keyup', (e) => {\n var code = (e.keyCode ? e.keyCode : e.which);\n // Escape\n if (code === 27) {\n $this.destructLightbox();\n }\n // Left\n if (code === 37) {\n $('.meta-lightbox-prev').trigger('click');\n }\n // Right\n if (code === 39) {\n $('.meta-lightbox-next').trigger('click');\n }\n });\n }\n\n this.options.onInit.call(this);\n\n },\n\n showLightbox: function(element) {\n this.el = element;\n this.$el = $(this.el);\n\n var $this = this,\n lightbox, content, currentLink, galleryItems;\n\n this.options.beforeShowLightbox.call(this);\n\n lightbox = this.constructLightbox();\n if (!lightbox) return;\n content = lightbox.find('.meta-lightbox-content');\n if (!content) return;\n currentLink = this.$el;\n $('body').addClass(`meta-lightbox-body-effect-${ this.options.effect}`);\n\n // Add content\n this.processContent(content, currentLink);\n\n // Nav\n if (this.$el.data('lightbox-gallery')) {\n galleryItems = $(`[data-lightbox-gallery=\"${ this.$el.data('lightbox-gallery') }\"]`);\n\n if (galleryItems.length === 1) {\n $('.meta-lightbox-nav').hide();\n } else {\n $('.meta-lightbox-nav').show();\n }\n\n // Prev\n $('.meta-lightbox-prev').off('click').on('click', function(e) {\n e.preventDefault();\n var index = galleryItems.index(currentLink);\n currentLink = galleryItems.eq(index - 1);\n if (!$(currentLink).length) currentLink = galleryItems.last();\n $this.processContent(content, currentLink);\n $this.options.onPrev.call(this, [currentLink]);\n });\n\n // Next\n $('.meta-lightbox-next').off('click').on('click', function(e) {\n e.preventDefault();\n var index = galleryItems.index(currentLink);\n currentLink = galleryItems.eq(index + 1);\n if (!$(currentLink).length) currentLink = galleryItems.first();\n $this.processContent(content, currentLink);\n $this.options.onNext.call(this, [currentLink]);\n });\n }\n\n setTimeout(function() {\n lightbox.addClass('meta-lightbox-open');\n $this.options.afterShowLightbox.call(this, [lightbox]);\n }, 1); // For CSS transitions\n },\n\n processContent: function(content, link) {\n var $this = this,\n img, video, src, classTerm, iframe, wrap;\n\n href = link.attr('href');\n if (!href) {\n href = link.data('href');\n }\n\n content.html('').addClass('meta-lightbox-loading');\n\n // Is HiDPI?\n if (this.isHidpi() && link.data('lightbox-hidpi')) {\n href = link.data('lightbox-hidpi');\n }\n\n // Image\n if (href.match(/\\.(jpeg|jpg|gif|png)$/i) != null) {\n /*if ($(window).width() < 768) {\n window.open(href, '_blank');\n }*/\n img = $('<img>', {\n src: href,\n });\n img.on('load', () => {\n var wrap = $('<div class=\"meta-lightbox-image\"></div>'),\n $content = $('.meta-lightbox-content'),\n imgwrapper = $('<span class=\"meta-lightbox-zoom-wrapper\"></span>');\n\n imgwrapper.append(img);\n wrap.append(imgwrapper);\n\n // Vertically center images\n wrap.css({\n 'line-height': `${$content.height() }px`,\n 'height': `${$content.height() }px`, // For Firefox\n });\n $(window).resize(() => {\n wrap.css({\n 'line-height': `${$content.height() }px`,\n 'height': `${$content.height() }px`, // For Firefox\n });\n });\n\n if (typeof imgwrapper['zoom'] !== 'undefined') {\n imgwrapper.zoom();\n }\n\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n\n });\n /*.each(function () {\n if (this.complete) $(this).load();\n });*/\n\n img.on('error', () => {\n var wrap = $(`<div class=\"meta-lightbox-error\"><p>${ $this.options.errorMessage }</p></div>`);\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n });\n\n // Set the title\n if (link.data('title')) {\n $this.setTitle(link.data('title'));\n } else if (link.attr('title')) {\n $this.setTitle(link.attr('title'));\n } else {\n $('.meta-lightbox-title-wrap').html('');\n }\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'Image Click', href);\n }\n }\n // Video (Youtube/Vimeo)\n else if (video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/)) {\n src = '';\n classTerm = 'meta-lightbox-video';\n\n if (video[1] == 'youtube') {\n src = `https://www.youtube.com/embed/${ video[4]}`;\n classTerm = 'meta-lightbox-youtube';\n }\n if (video[1] == 'youtu') {\n src = `https://www.youtube.com/embed/${ video[3]}`;\n classTerm = 'meta-lightbox-youtube';\n }\n if (video[1] == 'youtube-nocookie') {\n src = `https://www.youtube-nocookie.com/embed/${ video[4]}`;\n classTerm = 'nivo-lightbox-youtube';\n }\n if (video[1] == 'vimeo') {\n src = `https://player.vimeo.com/video/${ video[3]}`;\n classTerm = 'meta-lightbox-vimeo';\n }\n\n if (src) {\n iframe = $('<iframe>', {\n src,\n 'class': classTerm,\n frameborder: 0,\n vspace: 0,\n hspace: 0,\n scrolling: 'auto',\n });\n content.html(iframe);\n iframe.on('load', () => {\n content.removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n });\n }\n\n // Set the title\n if (link.data('title')) {\n $this.setTitle(link.data('title'));\n } else if (link.attr('title')) {\n $this.setTitle(link.attr('title'));\n } else {\n $('.meta-lightbox-title-wrap').html('');\n }\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'Video Click', video);\n }\n }\n // Inline HTML\n else if (href.substring(0, 1) == '#') {\n if ($(href).length) {\n wrap = $('<div class=\"meta-lightbox-inline\" />');\n wrap.append($(href).clone().show());\n\n // Vertically center html\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n 'position': 'relative',\n 'top': '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2) }px`,\n });\n }\n $(window).resize(() => {\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n 'position': 'relative',\n 'top': '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2) }px`,\n });\n }\n });\n\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n } else {\n wrap = $(`<div class=\"meta-lightbox-error\"><p>${ $this.options.errorMessage }</p></div>`);\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n }\n\n $('.meta-lightbox-title-wrap').html('');\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'meta', 'inline HTML click', href);\n }\n }\n // AJAX/iFrame (default)\n else {\n $.ajax({\n sync: false,\n async: true,\n url: href,\n dataType: 'html',\n method: 'GET',\n cache: false,\n statusCode: {\n 404: function() {\n console.log('page not found');\n window.location.href = url;\n },\n 302: function() {\n console.log('redirect 302');\n window.location.href = url;\n },\n },\n error: function(jqXHR) {\n console.log(`AJAX request failure.${ jqXHR.statusText}`);\n\n var wrap = $(`<div class=\"meta-lightbox-error\"><p>${ $this.options.errorMessage }</p></div>`);\n content.html(wrap).removeClass('meta-lightbox-loading');\n $this.contentLoaded();\n\n // google analytics\n if (typeof ga === 'function') {\n ga('send', 'event', 'error', 'AJAX ERROR', jqXHR.statusText);\n }\n },\n success: function(data, status, jqXHR) {\n try {\n const dataJson = $.parseJSON(data);\n if (typeof(dataJson) === 'object') {\n // Replace regions\n if (typeof(dataJson['regions']) === 'object' && typeof dataJson['regions']['LayoutAjax'] !== 'undefinded') {\n var wrap = $('<div class=\"meta-lightbox-ajax\" />');\n wrap.html(dataJson['regions']['LayoutAjax']);\n content.html(wrap).removeClass('meta-lightbox-loading');\n }\n\n // trigger events\n /*if (typeof (data['events']) === 'object') {\n for (var eventName in data.events) {\n $(document).trigger(eventName, [data['events'][eventName]]);\n }\n }*/\n\n\n var title = jqXHR.getResponseHeader('X-Title'),\n link = jqXHR.getResponseHeader('X-Link');\n\n if (\n title && title.length &&\n link && link.length &&\n link !== window.location.href &&\n link.substring(0, link.indexOf('#')) !== window.location.href.replace($('base').attr('href'), '/')\n ) {\n $('.meta-lightbox-ajax').data('curr-title', document.title);\n $('.meta-lightbox-ajax').data('curr-link', window.location.href);\n\n if (typeof window.localStorage !== 'undefined' && link !== '/') {\n window.localStorage.setItem('current-page', link);\n }\n\n if (\n document.URL !== link &&\n document.URL !== $('base').attr('href') + link &&\n document.URL !== `${$('base').attr('href') }/${ link}`\n ) {\n window.history.pushState({\n title,\n page: link,\n ajax: 'true',\n }, title, link);\n }\n\n // update redirect urls\n /*var pattern = new RegExp('\\\\b(redirect_uri=).*?(&|$)');\n $('a').each(function () {\n var $this = $(this);\n $this.attr('href', $this.attr('href').replace(pattern, 'redirect_uri=' + encodeURI($('base').attr('href') + link)));\n });*/\n\n $('.meta-lightbox-title-wrap').html('');\n\n // google analytics\n if (typeof ga === 'function') {\n ga('set', {\n page: link.replace($('base').attr('href'), ''),\n title,\n });\n ga('send', 'pageview');\n }\n }\n }\n } catch (e) {\n var wrap = $('<div class=\"meta-lightbox-ajax\" />');\n wrap.append(data);\n content.html(wrap).removeClass('meta-lightbox-loading');\n }\n\n // Vertically center html\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n 'position': 'relative',\n 'top': '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2) }px`,\n });\n }\n $(window).resize(() => {\n if (wrap.outerHeight() < content.height()) {\n wrap.css({\n 'position': 'relative',\n 'top': '50%',\n 'margin-top': `${-(wrap.outerHeight() / 2) }px`,\n });\n }\n });\n\n setTimeout(() => {\n $(window).resize();\n\n window.imagesLoaded().then(() => {\n $(window).resize();\n });\n }, 500);\n\n $this.contentLoaded();\n },\n });\n }\n },\n\n setTitle: function(text) {\n var titleWrap = $('<div>', {\n 'class': 'meta-lightbox-title',\n });\n titleWrap.text(text);\n $('.meta-lightbox-title-wrap').html(titleWrap);\n },\n\n contentLoaded: function() {\n setTimeout(() => {\n $(window).trigger('meta-lightbox-loaded');\n }, 1); // For CSS transitions\n\n setTimeout(() => {\n $('body').addClass('meta-lightbox-body-effect-fade');\n }, 600);\n },\n\n\n\n constructLightbox: function() {\n var $this = this,\n overlay = $('<div>', {\n 'class': `meta-lightbox-overlay meta-lightbox-theme-${ this.options.theme } meta-lightbox-effect-${ this.options.effect}`,\n }),\n wrap = $('<div>', {\n 'class': 'meta-lightbox-wrap',\n }),\n content = $('<div>', {\n 'class': 'meta-lightbox-content',\n }),\n nav = $('<a href=\"#\" class=\"meta-lightbox-nav meta-lightbox-prev\"><i class=\"fa fa-chevron-left\"></i> <span class=\"sr-only\">Previous</span></a><a href=\"#\" class=\"meta-lightbox-nav meta-lightbox-next\"><i class=\"fa fa-chevron-right\"></i> <span class=\"sr-only\">Next</span></a>'),\n close = $('<a href=\"#\" class=\"meta-lightbox-close fa fa-times\" title=\"Close\"><span class=\"sr-only\">Close</span></a>'),\n title = $('<div>', {\n 'class': 'meta-lightbox-title-wrap',\n }),\n isMSIE = /*@cc_on!@*/ 0,\n $overlay = $('.meta-lightbox-overlay');\n\n if ($overlay.length) return $overlay;\n\n\n if (isMSIE) overlay.addClass('meta-lightbox-ie');\n\n wrap.append(content);\n wrap.append(title);\n overlay.append(wrap);\n overlay.append(nav);\n overlay.append(close);\n $('body').append(overlay);\n\n if ($this.options.clickOverlayToClose) {\n overlay.on('click', (e) => {\n var $target = $(e.target);\n\n if (\n $target.hasClass('meta-lightbox-zoom-wrapper') ||\n $target.hasClass('meta-lightbox-content') ||\n $target.hasClass('meta-lightbox-wrap') ||\n $target.hasClass('meta-lightbox-image') ||\n $target.hasClass('meta-lightbox-overlay')\n ) {\n $this.destructLightbox();\n }\n });\n }\n\n close.on('click', (e) => {\n e.preventDefault();\n $this.destructLightbox();\n });\n\n return overlay;\n },\n\n destructLightbox: function() {\n var $this = this,\n $overlay = $('.meta-lightbox-overlay'),\n isMSIE = /*@cc_on!@*/ 0;\n this.options.beforeHideLightbox.call(this);\n\n var title = $('.meta-lightbox-ajax').data('curr-title'),\n link = $('.meta-lightbox-ajax').data('curr-link');\n if (title && link) {\n\n if (typeof window.localStorage !== 'undefined' && link !== '/') {\n window.localStorage.setItem('current-page', link);\n }\n\n if (\n document.URL !== link &&\n document.URL !== $('base').attr('href') + link &&\n document.URL !== `${$('base').attr('href') }/${ link}`\n ) {\n window.history.replaceState({\n title,\n page: link,\n ajax: 'true',\n }, title, link);\n }\n\n // update redirect urls\n /*var pattern = new RegExp('\\\\b(redirect_uri=).*?(&|$)');\n $('a').each(function () {\n var $this = $(this);\n $this.attr('href', $this.attr('href').replace(pattern, 'redirect_uri=' + encodeURI($('base').attr('href') + link)));\n });*/\n }\n\n $overlay.removeClass('meta-lightbox-open');\n $('.meta-lightbox-nav').hide();\n $('body').removeClass(`meta-lightbox-body-effect-${ $this.options.effect}`);\n $('.meta-lightbox-content .meta-lightbox-zoom-wrapper').trigger('zoom.destroy');\n\n // For IE\n if (isMSIE) {\n $overlay.find('iframe').attr(\"src\", \" \");\n $overlay.find('iframe').remove();\n }\n $('.meta-lightbox-prev').off('click');\n\n // Remove click handlers\n $('.meta-lightbox-next').off('click');\n\n // Empty content (for videos)\n $('.meta-lightbox-content').empty();\n\n $('body').removeClass('meta-lightbox-body-effect-fade');\n\n this.options.afterHideLightbox.call(this);\n\n },\n\n isHidpi: function() {\n var mediaQuery = \"(-webkit-min-device-pixel-ratio: 1.5),\\\n (min--moz-device-pixel-ratio: 1.5),\\\n (-o-min-device-pixel-ratio: 3/2),\\\n (min-resolution: 1.5dppx)\";\n if (window.devicePixelRatio > 1) return true;\n return (window.matchMedia && window.matchMedia(mediaQuery).matches);\n },\n\n };\n\n $.fn[pluginName] = function(options) {\n return this.each(function() {\n if (!$.data(this, pluginName)) {\n $.data(this, pluginName, new MetaLightbox(this, options));\n }\n });\n };\n\n $(document).metaLightbox();\n\n})(jQuery, this, document);\n","/*!\n * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)\n *\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n\n(function(factory){\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n factory(require('jquery'));\n } else {\n factory(jQuery);\n }\n}(function($, undefined){\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction isUTCEquals(date1, date2) {\n\t\treturn (\n\t\t\tdate1.getUTCFullYear() === date2.getUTCFullYear() &&\n\t\t\tdate1.getUTCMonth() === date2.getUTCMonth() &&\n\t\t\tdate1.getUTCDate() === date2.getUTCDate()\n\t\t);\n\t}\n\tfunction alias(method, deprecationMsg){\n\t\treturn function(){\n\t\t\tif (deprecationMsg !== undefined) {\n\t\t\t\t$.fn.datepicker.deprecated(deprecationMsg);\n\t\t\t}\n\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\tfunction isValidDate(d) {\n\t\treturn d && !isNaN(d.getTime());\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n // Use date arithmetic to allow dates with different times to match\n if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!$.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.length = 0;\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\n\t\tthis._events = [];\n\t\tthis._secondaryEvents = [];\n\n\t\tthis._process_options(options);\n\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = this.o.defaultViewDate;\n\t\tthis.focusDate = null;\n\n\t\tthis.element = $(element);\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.inputField = this.isInput ? this.element : this.element.find('input');\n\t\tthis.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;\n\t\tif (this.component && this.component.length === 0)\n\t\t\tthis.component = false;\n\t\tthis.isInline = !this.component && this.element.is('div');\n\n\t\tthis.picker = $(DPGlobal.template);\n\n\t\t// Checking templates and inserting\n\t\tif (this._check_template(this.o.templates.leftArrow)) {\n\t\t\tthis.picker.find('.prev').html(this.o.templates.leftArrow);\n\t\t}\n\n\t\tif (this._check_template(this.o.templates.rightArrow)) {\n\t\t\tthis.picker.find('.next').html(this.o.templates.rightArrow);\n\t\t}\n\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tif (this.o.calendarWeeks) {\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')\n\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\treturn Number(val) + 1;\n\t\t\t\t});\n\t\t}\n\n\t\tthis._process_options({\n\t\t\tstartDate: this._o.startDate,\n\t\t\tendDate: this._o.endDate,\n\t\t\tdaysOfWeekDisabled: this.o.daysOfWeekDisabled,\n\t\t\tdaysOfWeekHighlighted: this.o.daysOfWeekHighlighted,\n\t\t\tdatesDisabled: this.o.datesDisabled\n\t\t});\n\n\t\tthis._allow_update = false;\n\t\tthis.setViewMode(this.o.startView);\n\t\tthis._allow_update = true;\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis.update();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_resolveViewName: function(view){\n\t\t\t$.each(DPGlobal.viewModes, function(i, viewMode){\n\t\t\t\tif (view === i || $.inArray(view, viewMode.names) !== -1){\n\t\t\t\t\tview = i;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn view;\n\t\t},\n\n\t\t_resolveDaysOfWeek: function(daysOfWeek){\n\t\t\tif (!$.isArray(daysOfWeek))\n\t\t\t\tdaysOfWeek = daysOfWeek.split(/[,\\s]*/);\n\t\t\treturn $.map(daysOfWeek, Number);\n\t\t},\n\n\t\t_check_template: function(tmp){\n\t\t\ttry {\n\t\t\t\t// If empty\n\t\t\t\tif (tmp === undefined || tmp === \"\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// If no html, everything ok\n\t\t\t\tif ((tmp.match(/[<>]/g) || []).length <= 0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Checking if html is fine\n\t\t\t\tvar jDom = $(tmp);\n\t\t\t\treturn jDom.length > 0;\n\t\t\t}\n\t\t\tcatch (ex) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\t// Retrieve view index from any aliases\n\t\t\to.startView = this._resolveViewName(o.startView);\n\t\t\to.minViewMode = this._resolveViewName(o.minViewMode);\n\t\t\to.maxViewMode = this._resolveViewName(o.maxViewMode);\n\n\t\t\t// Check view is between min and max\n\t\t\to.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = (o.weekStart + 6) % 7;\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);\n\t\t\to.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);\n\n\t\t\to.datesDisabled = o.datesDisabled||[];\n\t\t\tif (!$.isArray(o.datesDisabled)) {\n\t\t\t\to.datesDisabled = o.datesDisabled.split(',');\n\t\t\t}\n\t\t\to.datesDisabled = $.map(o.datesDisabled, function(d){\n\t\t\t\treturn DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn /^auto|left|right|top|bottom$/.test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^left|right$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn /^top|bottom$/.test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t\tif (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {\n\t\t\t\to.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);\n\t\t\t} else if (o.defaultViewDate) {\n\t\t\t\tvar year = o.defaultViewDate.year || new Date().getFullYear();\n\t\t\t\tvar month = o.defaultViewDate.month || 0;\n\t\t\t\tvar day = o.defaultViewDate.day || 1;\n\t\t\t\to.defaultViewDate = UTCDate(year, month, day);\n\t\t\t} else {\n\t\t\t\to.defaultViewDate = UTCToday();\n\t\t\t}\n\t\t},\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t} else if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n var events = {\n keyup: $.proxy(function(e){\n if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)\n this.update();\n }, this),\n keydown: $.proxy(this.keydown, this),\n paste: $.proxy(this.paste, this)\n };\n\n if (this.o.showOnFocus === true) {\n events.focus = $.proxy(this.show, this);\n }\n\n if (this.isInput) { // single input\n this._events = [\n [this.element, events]\n ];\n }\n // component: input + button\n else if (this.component && this.inputField.length) {\n this._events = [\n // For components that are not readonly, allow keyboard nav\n [this.inputField, events],\n [this.component, {\n click: $.proxy(this.show, this)\n }]\n ];\n }\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tif (this.o.immediateUpdates) {\n\t\t\t\t// Trigger input updates immediately on changed year/month\n\t\t\t\tthis._events.push([this.element, {\n\t\t\t\t\t'changeYear changeMonth': $.proxy(function(e){\n\t\t\t\t\t\tthis.update(e.date);\n\t\t\t\t\t}, this)\n\t\t\t\t}]);\n\t\t\t}\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.prev, .next', {\n\t\t\t\t\tclick: $.proxy(this.navArrowsClick, this)\n\t\t\t\t}],\n\t\t\t\t[this.picker, '.day:not(.disabled)', {\n\t\t\t\t\tclick: $.proxy(this.dayCellClick, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length ||\n\t\t\t\t\t\t\tthis.isInline\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tviewMode: this.viewMode,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t} else if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))\n\t\t\t\treturn;\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo(this.o.container);\n\t\t\tthis.place();\n\t\t\tthis.picker.show();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t\tif ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {\n\t\t\t\t$(this.element).blur();\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline || !this.picker.is(':visible'))\n\t\t\t\treturn this;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.setViewMode(this.o.startView);\n\n\t\t\tif (this.o.forceParse && this.inputField.val())\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t\treturn this;\n\t\t},\n\n\t\tdestroy: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tpaste: function(e){\n\t\t\tvar dateString;\n\t\t\tif (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types\n\t\t\t\t&& $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {\n\t\t\t\tdateString = e.originalEvent.clipboardData.getData('text/plain');\n\t\t\t} else if (window.clipboardData) {\n\t\t\t\tdateString = window.clipboardData.getData('Text');\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setDate(dateString);\n\t\t\tthis.update();\n\t\t\te.preventDefault();\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\tif (!utc) {\n\t\t\t\treturn utc;\n\t\t\t}\n\n\t\t\tvar local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));\n\n\t\t\tif (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {\n\t\t\t\tlocal = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));\n\t\t\t}\n\n\t\t\treturn local;\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\tvar selected_date = this.dates.get(-1);\n\t\t\tif (selected_date !== undefined) {\n\t\t\t\treturn new Date(selected_date);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\n\t\tclearDates: function(){\n\t\t\tthis.inputField.val('');\n\t\t\tthis.update();\n\t\t\tthis._trigger('changeDate');\n\n\t\t\tif (this.o.autoclose) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.setDates.apply(this, $.map(args, this._utc_to_local));\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tthis.inputField.val(formatted);\n\t\t\treturn this;\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tgetStartDate: function(){\n\t\t\treturn this.o.startDate;\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tgetEndDate: function(){\n\t\t\treturn this.o.endDate;\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDaysOfWeekHighlighted: function(daysOfWeekHighlighted){\n\t\t\tthis._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tsetDatesDisabled: function(datesDisabled){\n\t\t\tthis._process_options({datesDisabled: datesDisabled});\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn this;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\tcontainer = $(this.o.container),\n\t\t\t\twindowWidth = container.width(),\n\t\t\t\tscrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),\n\t\t\t\tappendOffset = container.offset();\n\n\t\t\tvar parentsZindex = [0];\n\t\t\tthis.element.parents().each(function(){\n\t\t\t\tvar itemZIndex = $(this).css('z-index');\n\t\t\t\tif (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));\n\t\t\t});\n\t\t\tvar zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left - appendOffset.left;\n\t\t\tvar top = offset.top - appendOffset.top;\n\n\t\t\tif (this.o.container !== 'body') {\n\t\t\t\ttop += scrollTop;\n\t\t\t}\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\tif (offset.left < 0) {\n\t\t\t\t\t// component is outside the window on the left side. Move it into visible range\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\t} else if (left + calendarWidth > windowWidth) {\n\t\t\t\t\t// the calendar passes the widow right edge. Align it to component right side\n\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\tleft += width - calendarWidth;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.o.rtl) {\n\t\t\t\t\t\t// Default to right\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-right');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Default to left\n\t\t\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + top - calendarHeight;\n\t\t\t\tyorient = top_overflow < 0 ? 'bottom' : 'top';\n\t\t\t}\n\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\t\t\telse\n\t\t\t\ttop += height;\n\n\t\t\tif (this.o.rtl) {\n\t\t\t\tvar right = windowWidth - (left + width);\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tright: right,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.picker.css({\n\t\t\t\t\ttop: top,\n\t\t\t\t\tleft: left,\n\t\t\t\t\tzIndex: zIndex\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn this;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t} else {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.inputField.val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\t!this.dateWithinRange(date) ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\t\t\t\telse\n\t\t\t\t\tthis.viewDate = this.o.defaultViewDate;\n\t\t\t}\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t\tthis.element.change();\n\t\t\t}\n\t\t\telse if (this.dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates) && fromArgs) {\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\tthis.element.change();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length) {\n\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.element.change();\n\t\t\t}\n\n\t\t\tthis.fill();\n\t\t\treturn this;\n\t\t},\n\n\t\tfillDow: function(){\n if (this.o.showWeekDays) {\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '<tr>';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\thtml += '<th class=\"cw\">&#160;</th>';\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '<th class=\"dow';\n if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)\n html += ' disabled';\n html += '\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n\t\t\t}\n\t\t\thtml += '</tr>';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n }\n\t\t},\n\n\t\tfillMonths: function(){\n var localDate = this._utc_to_local(this.viewDate);\n\t\t\tvar html = '';\n\t\t\tvar focused;\n\t\t\tfor (var i = 0; i < 12; i++){\n\t\t\t\tfocused = localDate && localDate.getMonth() === i ? ' focused' : '';\n\t\t\t\thtml += '<span class=\"month' + focused + '\">' + dates[this.o.language].monthsShort[i] + '</span>';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = UTCToday();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with UTC today, not local today\n\t\t\tif (this.o.todayHighlight && isUTCEquals(date, today)) {\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (!this.dateWithinRange(date)){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.dateIsDisabled(date)){\n\t\t\t\tcls.push('disabled', 'disabled-date');\n\t\t\t}\n\t\t\tif ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){\n\t\t\t\tcls.push('highlighted');\n\t\t\t}\n\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t\tif (date.valueOf() === this.range[0]){\n cls.push('range-start');\n }\n if (date.valueOf() === this.range[this.range.length-1]){\n cls.push('range-end');\n }\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\t_fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){\n\t\t\tvar html = '';\n\t\t\tvar step = factor / 10;\n\t\t\tvar view = this.picker.find(selector);\n\t\t\tvar startVal = Math.floor(year / factor) * factor;\n\t\t\tvar endVal = startVal + step * 9;\n\t\t\tvar focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;\n\t\t\tvar selected = $.map(this.dates, function(d){\n\t\t\t\treturn Math.floor(d.getUTCFullYear() / step) * step;\n\t\t\t});\n\n\t\t\tvar classes, tooltip, before;\n\t\t\tfor (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {\n\t\t\t\tclasses = [cssClass];\n\t\t\t\ttooltip = null;\n\n\t\t\t\tif (currVal === startVal - step) {\n\t\t\t\t\tclasses.push('old');\n\t\t\t\t} else if (currVal === endVal + step) {\n\t\t\t\t\tclasses.push('new');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(currVal, selected) !== -1) {\n\t\t\t\t\tclasses.push('active');\n\t\t\t\t}\n\t\t\t\tif (currVal < startYear || currVal > endYear) {\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t}\n\t\t\t\tif (currVal === focusedVal) {\n\t\t\t\t classes.push('focused');\n }\n\n\t\t\t\tif (beforeFn !== $.noop) {\n\t\t\t\t\tbefore = beforeFn(new Date(currVal, 0, 1));\n\t\t\t\t\tif (before === undefined) {\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\t} else if (typeof before === 'boolean') {\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\t} else if (typeof before === 'string') {\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\t}\n\t\t\t\t\tif (before.enabled === false) {\n\t\t\t\t\t\tclasses.push('disabled');\n\t\t\t\t\t}\n\t\t\t\t\tif (before.classes) {\n\t\t\t\t\t\tclasses = classes.concat(before.classes.split(/\\s+/));\n\t\t\t\t\t}\n\t\t\t\t\tif (before.tooltip) {\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thtml += '<span class=\"' + classes.join(' ') + '\"' + (tooltip ? ' title=\"' + tooltip + '\"' : '') + '>' + currVal + '</span>';\n\t\t\t}\n\n\t\t\tview.find('.datepicker-switch').text(startVal + '-' + endVal);\n\t\t\tview.find('td').html(html);\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,\n todayDate = UTCToday(),\n titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),\n\t\t\t\ttooltip,\n\t\t\t\tbefore;\n\t\t\tif (isNaN(year) || isNaN(month))\n\t\t\t\treturn;\n\t\t\tthis.picker.find('.datepicker-days .datepicker-switch')\n\t\t\t\t\t\t.text(DPGlobal.formatDate(d, titleFormat, this.o.language));\n\t\t\tthis.picker.find('tfoot .today')\n\t\t\t\t\t\t.text(todaytxt)\n .css('display', titleBtnVisible ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('tfoot .clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.css('display', this.o.clearBtn === true ? 'table-cell' : 'none');\n\t\t\tthis.picker.find('thead .datepicker-title')\n\t\t\t\t\t\t.text(this.o.title)\n\t\t\t\t\t\t.css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month, 0),\n\t\t\t\tday = prevMonth.getUTCDate();\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tif (prevMonth.getUTCFullYear() < 100){\n nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());\n }\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar weekDay, clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tweekDay = prevMonth.getUTCDay();\n\t\t\t\tif (weekDay === this.o.weekStart){\n\t\t\t\t\thtml.push('<tr>');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tvar content = prevMonth.getUTCDate();\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tbefore = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t\tif (before.content)\n\t\t\t\t\t\tcontent = before.content;\n\t\t\t\t}\n\n\t\t\t\t//Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)\n\t\t\t\t//Fallback to unique function for older jquery versions\n\t\t\t\tif ($.isFunction($.uniqueSort)) {\n\t\t\t\t\tclsName = $.uniqueSort(clsName);\n\t\t\t\t} else {\n\t\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\t}\n\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + ' data-date=\"' + prevMonth.getTime().toString() + '\">' + content + '</td>');\n\t\t\t\ttooltip = null;\n\t\t\t\tif (weekDay === this.o.weekEnd){\n\t\t\t\t\thtml.push('</tr>');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').html(html.join(''));\n\n\t\t\tvar monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('.datepicker-switch')\n\t\t\t\t\t\t\t.text(this.o.maxViewMode < 2 ? monthsTitle : year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('tbody span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\tif (this.o.beforeShowMonth !== $.noop){\n\t\t\t\tvar that = this;\n\t\t\t\t$.each(months, function(i, month){\n var moDate = new Date(year, i, 1);\n var before = that.o.beforeShowMonth(moDate);\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof before === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof before === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false && !$(month).hasClass('disabled'))\n\t\t\t\t\t $(month).addClass('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t $(month).addClass(before.classes);\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t $(month).prop('title', before.tooltip);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Generating decade/years picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-years',\n\t\t\t\t'year',\n\t\t\t\t10,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowYear\n\t\t\t);\n\n\t\t\t// Generating century/decades picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-decades',\n\t\t\t\t'decade',\n\t\t\t\t100,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowDecade\n\t\t\t);\n\n\t\t\t// Generating millennium/centuries picker\n\t\t\tthis._fill_yearsView(\n\t\t\t\t'.datepicker-centuries',\n\t\t\t\t'century',\n\t\t\t\t1000,\n\t\t\t\tyear,\n\t\t\t\tstartYear,\n\t\t\t\tendYear,\n\t\t\t\tthis.o.beforeShowCentury\n\t\t\t);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\tprevIsDisabled,\n\t\t\t\tnextIsDisabled,\n\t\t\t\tfactor = 1;\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 4:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 2:\n\t\t\t\t\tfactor *= 10;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\tprevIsDisabled = Math.floor(year / factor) * factor <= startYear;\n\t\t\t\t\tnextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tprevIsDisabled = year <= startYear && month <= startMonth;\n\t\t\t\t\tnextIsDisabled = year >= endYear && month >= endMonth;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.picker.find('.prev').toggleClass('disabled', prevIsDisabled);\n\t\t\tthis.picker.find('.next').toggleClass('disabled', nextIsDisabled);\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tvar target, dir, day, year, month;\n\t\t\ttarget = $(e.target);\n\n\t\t\t// Clicked on the switch\n\t\t\tif (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){\n\t\t\t\tthis.setViewMode(this.viewMode + 1);\n\t\t\t}\n\n\t\t\t// Clicked on today button\n\t\t\tif (target.hasClass('today') && !target.hasClass('day')){\n\t\t\t\tthis.setViewMode(0);\n\t\t\t\tthis._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');\n\t\t\t}\n\n\t\t\t// Clicked on clear button\n\t\t\tif (target.hasClass('clear')){\n\t\t\t\tthis.clearDates();\n\t\t\t}\n\n\t\t\tif (!target.hasClass('disabled')){\n\t\t\t\t// Clicked on a month, year, decade, century\n\t\t\t\tif (target.hasClass('month')\n\t\t\t\t\t\t|| target.hasClass('year')\n\t\t\t\t\t\t|| target.hasClass('decade')\n\t\t\t\t\t\t|| target.hasClass('century')) {\n\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\n\t\t\t\t\tday = 1;\n\t\t\t\t\tif (this.viewMode === 1){\n\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\tyear = Number(target.text());\n\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);\n\n\t\t\t\t\tif (this.viewMode === this.o.minViewMode){\n\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setViewMode(this.viewMode - 1);\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\tthis._focused_from.focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\tdayCellClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar timestamp = $target.data('date');\n\t\t\tvar date = new Date(timestamp);\n\n\t\t\tif (this.o.updateViewDate) {\n\t\t\t\tif (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {\n\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t}\n\n\t\t\t\tif (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {\n\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._setDate(date);\n\t\t},\n\n\t\t// Clicked on prev or next\n\t\tnavArrowsClick: function(e){\n\t\t\tvar $target = $(e.currentTarget);\n\t\t\tvar dir = $target.hasClass('prev') ? -1 : 1;\n\t\t\tif (this.viewMode !== 0){\n\t\t\t\tdir *= DPGlobal.viewModes[this.viewMode].navStep * 12;\n\t\t\t}\n\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\tthis._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);\n\t\t\tthis.fill();\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\n\t\t\tif (ix !== -1){\n\t\t\t\tif (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){\n\t\t\t\t\tthis.dates.remove(ix);\n\t\t\t\t}\n\t\t\t} else if (this.o.multidate === false) {\n\t\t\t\tthis.dates.clear();\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif ((!which && this.o.updateViewDate) || which === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tif (!which || which !== 'view') {\n\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tthis.inputField.trigger('change');\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveDay: function(date, dir){\n\t\t\tvar newDate = new Date(date);\n\t\t\tnewDate.setUTCDate(date.getUTCDate() + dir);\n\n\t\t\treturn newDate;\n\t\t},\n\n\t\tmoveWeek: function(date, dir){\n\t\t\treturn this.moveDay(date, dir * 7);\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!isValidDate(date))\n\t\t\t\treturn this.o.defaultViewDate;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tmoveAvailableDate: function(date, dir, fn){\n\t\t\tdo {\n\t\t\t\tdate = this[fn](date, dir);\n\n\t\t\t\tif (!this.dateWithinRange(date))\n\t\t\t\t\treturn false;\n\n\t\t\t\tfn = 'moveDay';\n\t\t\t}\n\t\t\twhile (this.dateIsDisabled(date));\n\n\t\t\treturn date;\n\t\t},\n\n\t\tweekOfDateIsDisabled: function(date){\n\t\t\treturn $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;\n\t\t},\n\n\t\tdateIsDisabled: function(date){\n\t\t\treturn (\n\t\t\t\tthis.weekOfDateIsDisabled(date) ||\n\t\t\t\t$.grep(this.o.datesDisabled, function(d){\n\t\t\t\t\treturn isUTCEquals(date, d);\n\t\t\t\t}).length > 0\n\t\t\t);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (!this.picker.is(':visible')){\n\t\t\t\tif (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\t\te.stopPropagation();\n }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 39: // right\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;\n if (this.viewMode === 0) {\n \t\t\t\t\tif (e.ctrlKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n \t\t\t\t\t} else if (e.shiftKey){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n\n \t\t\t\t\t\tif (newViewDate)\n \t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n \t\t\t\t\t} else if (e.keyCode === 37 || e.keyCode === 39){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');\n \t\t\t\t\t} else if (!this.weekOfDateIsDisabled(focusDate)){\n \t\t\t\t\t\tnewViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');\n \t\t\t\t\t}\n } else if (this.viewMode === 1) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');\n } else if (this.viewMode === 2) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n dir = dir * 4;\n }\n newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');\n }\n\t\t\t\t\tif (newViewDate){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tif (!this.o.forceParse)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tif (this.o.keyboardNavigation) {\n\t\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\t\tdateChanged = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tthis.inputField.trigger('change');\n\t\t\t}\n\t\t},\n\n\t\tsetViewMode: function(viewMode){\n\t\t\tthis.viewMode = viewMode;\n\t\t\tthis.picker\n\t\t\t\t.children('div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)\n\t\t\t\t\t.show();\n\t\t\tthis.updateNavArrows();\n this._trigger('changeViewMode', new Date(this.viewDate));\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\t$.data(element, 'datepicker', this);\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\tthis.keepEmptyValues = options.keepEmptyValues;\n\t\tdelete options.keepEmptyValues;\n\n\t\tdatepickerPlugin.call($(this.inputs), options)\n\t\t\t.on('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $.data(i, 'datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tclearDates: function(){\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.clearDates();\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling. Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $.data(e.target, 'datepicker');\n\n\t\t\tif (dp === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar new_date = dp.getUTCDate(),\n\t\t\t\tkeep_empty_values = this.keepEmptyValues,\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tj = i - 1,\n\t\t\t\tk = i + 1,\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate() && (p === dp || !keep_empty_values))\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[j]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (j >= 0 && new_date < this.dates[j]){\n\t\t\t\t\tthis.pickers[j--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t} else if (new_date > this.dates[k]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (k < l && new_date > this.dates[k]){\n\t\t\t\t\tthis.pickers[k++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tdestroy: function(){\n\t\t\t$.map(this.pickers, function(p){ p.destroy(); });\n\t\t\t$(this.inputs).off('changeDate', this.dateUpdated);\n\t\t\tdelete this.element.data().datepicker;\n\t\t},\n\t\tremove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\tvar datepickerPlugin = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.hasClass('input-daterange') || opts.inputs){\n\t\t\t\t\t$.extend(opts, {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t});\n\t\t\t\t\tdata = new DateRangePicker(this, opts);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdata = new Datepicker(this, opts);\n\t\t\t\t}\n\t\t\t\t$this.data('datepicker', data);\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t}\n\t\t});\n\n\t\tif (\n\t\t\tinternal_return === undefined ||\n\t\t\tinternal_return instanceof Datepicker ||\n\t\t\tinternal_return instanceof DateRangePicker\n\t\t)\n\t\t\treturn this;\n\n\t\tif (this.length > 1)\n\t\t\tthrow new Error('Using only allowed for the collection of a single element (' + option + ' function)');\n\t\telse\n\t\t\treturn internal_return;\n\t};\n\t$.fn.datepicker = datepickerPlugin;\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tassumeNearbyYear: false,\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tbeforeShowMonth: $.noop,\n\t\tbeforeShowYear: $.noop,\n\t\tbeforeShowDecade: $.noop,\n\t\tbeforeShowCentury: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\ttoggleActive: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tdaysOfWeekHighlighted: [],\n\t\tdatesDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'mm/dd/yyyy',\n\t\tkeepEmptyValues: false,\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmaxViewMode: 4,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tupdateViewDate: true,\n\t\tweekStart: 0,\n\t\tdisableTouchKeyboard: false,\n\t\tenableOnReadonly: true,\n\t\tshowOnFocus: true,\n\t\tzIndexOffset: 10,\n\t\tcontainer: 'body',\n\t\timmediateUpdates: false,\n\t\ttitle: '',\n\t\ttemplates: {\n\t\t\tleftArrow: '&#x00AB;',\n\t\t\trightArrow: '&#x00BB;'\n\t\t},\n showWeekDays: true\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\t\ttoday: \"Today\",\n\t\t\tclear: \"Clear\",\n\t\t\ttitleFormat: \"MM yyyy\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tviewModes: [\n\t\t\t{\n\t\t\t\tnames: ['days', 'month'],\n\t\t\t\tclsName: 'days',\n\t\t\t\te: 'changeMonth'\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['months', 'year'],\n\t\t\t\tclsName: 'months',\n\t\t\t\te: 'changeYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['years', 'decade'],\n\t\t\t\tclsName: 'years',\n\t\t\t\te: 'changeDecade',\n\t\t\t\tnavStep: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['decades', 'century'],\n\t\t\t\tclsName: 'decades',\n\t\t\t\te: 'changeCentury',\n\t\t\t\tnavStep: 100\n\t\t\t},\n\t\t\t{\n\t\t\t\tnames: ['centuries', 'millennium'],\n\t\t\t\tclsName: 'centuries',\n\t\t\t\te: 'changeMillennium',\n\t\t\t\tnavStep: 1000\n\t\t\t}\n\t\t],\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\u5e74\\u6708\\u65e5\\[-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\tif (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')\n return format;\n // IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language, assumeNearby){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toValue)\n\t\t\t\treturn format.toValue(date, format, language);\n\t\t\tvar fn_map = {\n\t\t\t\t\td: 'moveDay',\n\t\t\t\t\tm: 'moveMonth',\n\t\t\t\t\tw: 'moveWeek',\n\t\t\t\t\ty: 'moveYear'\n\t\t\t\t},\n\t\t\t\tdateAliases = {\n\t\t\t\t\tyesterday: '-1d',\n\t\t\t\t\ttoday: '+0d',\n\t\t\t\t\ttomorrow: '+1d'\n\t\t\t\t},\n\t\t\t\tparts, part, dir, i, fn;\n\t\t\tif (date in dateAliases){\n\t\t\t\tdate = dateAliases[date];\n\t\t\t}\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/i.test(date)){\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/gi);\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = parts[i].match(/([\\-+]\\d+)([dmwy])/i);\n\t\t\t\t\tdir = Number(part[1]);\n\t\t\t\t\tfn = fn_map[part[2].toLowerCase()];\n\t\t\t\t\tdate = Datepicker.prototype[fn](date, dir);\n\t\t\t\t}\n\t\t\t\treturn Datepicker.prototype._zero_utc_time(date);\n\t\t\t}\n\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\n\t\t\tfunction applyNearbyYear(year, threshold){\n\t\t\t\tif (threshold === true)\n\t\t\t\t\tthreshold = 10;\n\n\t\t\t\t// if year is 2 digits or less, than the user most likely is trying to get a recent century\n\t\t\t\tif (year < 100){\n\t\t\t\t\tyear += 2000;\n\t\t\t\t\t// if the new year is more than threshold years in advance, use last century\n\t\t\t\t\tif (year > ((new Date()).getFullYear()+threshold)){\n\t\t\t\t\t\tyear -= 100;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn year;\n\t\t\t}\n\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['yy'] = setters_map['yyyy'];\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCToday();\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m.toLowerCase() === p.toLowerCase();\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\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\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tif (format.toDisplay)\n return format.toDisplay(date, format, language);\n var val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: '<thead>'+\n\t\t\t '<tr>'+\n\t\t\t '<th colspan=\"7\" class=\"datepicker-title\"></th>'+\n\t\t\t '</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th class=\"prev\">'+defaults.templates.leftArrow+'</th>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\n\t\t\t\t\t\t\t\t'<th class=\"next\">'+defaults.templates.rightArrow+'</th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</thead>',\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n\t\tfootTemplate: '<tfoot>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"today\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"clear\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</tfoot>'\n\t};\n\tDPGlobal.template = '<div class=\"datepicker\">'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-decades\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-centuries\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</div>';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\t/* DATEPICKER VERSION\n\t * =================== */\n\t$.fn.datepicker.version = '1.9.0';\n\n\t$.fn.datepicker.deprecated = function(msg){\n\t\tvar console = window.console;\n\t\tif (console && console.warn) {\n\t\t\tconsole.warn('DEPRECATED: ' + msg);\n\t\t}\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\tdatepickerPlugin.call($this, 'show');\n\t\t}\n\t);\n\t$(function(){\n\t\tdatepickerPlugin.call($('[data-provide=\"datepicker-inline\"]'));\n\t});\n\n}));\n","/*!\n * Timepicker Component for Twitter Bootstrap\n *\n * Copyright 2013 Joris de Wit and bootstrap-timepicker contributors\n *\n * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n(function($, window, document) {\n 'use strict';\n\n // TIMEPICKER PUBLIC CLASS DEFINITION\n var Timepicker = function(element, options) {\n this.widget = '';\n this.$element = $(element);\n this.defaultTime = options.defaultTime;\n this.disableFocus = options.disableFocus;\n this.disableMousewheel = options.disableMousewheel;\n this.isOpen = options.isOpen;\n this.minuteStep = options.minuteStep;\n this.modalBackdrop = options.modalBackdrop;\n this.orientation = options.orientation;\n this.secondStep = options.secondStep;\n this.snapToStep = options.snapToStep;\n this.showInputs = options.showInputs;\n this.showMeridian = options.showMeridian;\n this.showSeconds = options.showSeconds;\n this.template = options.template;\n this.appendWidgetTo = options.appendWidgetTo;\n this.showWidgetOnAddonClick = options.showWidgetOnAddonClick;\n this.icons = options.icons;\n this.maxHours = options.maxHours;\n this.explicitMode = options.explicitMode; // If true 123 = 1:23, 12345 = 1:23:45, else invalid.\n\n this.handleDocumentClick = function (e) {\n var self = e.data.scope;\n // This condition was inspired by bootstrap-datepicker.\n // The element the timepicker is invoked on is the input but it has a sibling for addon/button.\n if (!(self.$element.parent().find(e.target).length ||\n self.$widget.is(e.target) ||\n self.$widget.find(e.target).length)) {\n self.hideWidget();\n }\n };\n\n this._init();\n };\n\n Timepicker.prototype = {\n\n constructor: Timepicker,\n _init: function() {\n var self = this;\n\n if (this.showWidgetOnAddonClick && (this.$element.parent().hasClass('input-group') && this.$element.parent().hasClass('bootstrap-timepicker'))) {\n this.$element.parent('.input-group.bootstrap-timepicker').find('.input-group-addon').on({\n 'click.timepicker': $.proxy(this.showWidget, this)\n });\n this.$element.on({\n 'focus.timepicker': $.proxy(this.highlightUnit, this),\n 'click.timepicker': $.proxy(this.highlightUnit, this),\n 'keydown.timepicker': $.proxy(this.elementKeydown, this),\n 'blur.timepicker': $.proxy(this.blurElement, this),\n 'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n });\n } else {\n if (this.template) {\n this.$element.on({\n 'focus.timepicker': $.proxy(this.showWidget, this),\n 'click.timepicker': $.proxy(this.showWidget, this),\n 'blur.timepicker': $.proxy(this.blurElement, this),\n 'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n });\n } else {\n this.$element.on({\n 'focus.timepicker': $.proxy(this.highlightUnit, this),\n 'click.timepicker': $.proxy(this.highlightUnit, this),\n 'keydown.timepicker': $.proxy(this.elementKeydown, this),\n 'blur.timepicker': $.proxy(this.blurElement, this),\n 'mousewheel.timepicker DOMMouseScroll.timepicker': $.proxy(this.mousewheel, this)\n });\n }\n }\n\n if (this.template !== false) {\n this.$widget = $(this.getTemplate()).on('click', $.proxy(this.widgetClick, this));\n } else {\n this.$widget = false;\n }\n\n if (this.showInputs && this.$widget !== false) {\n this.$widget.find('input').each(function() {\n $(this).on({\n 'click.timepicker': function() { $(this).select(); },\n 'keydown.timepicker': $.proxy(self.widgetKeydown, self),\n 'keyup.timepicker': $.proxy(self.widgetKeyup, self)\n });\n });\n }\n\n this.setDefaultTime(this.defaultTime);\n },\n\n blurElement: function() {\n this.highlightedUnit = null;\n this.updateFromElementVal();\n },\n\n clear: function() {\n this.hour = '';\n this.minute = '';\n this.second = '';\n this.meridian = '';\n\n this.$element.val('');\n },\n\n decrementHour: function() {\n if (this.showMeridian) {\n if (this.hour === 1) {\n this.hour = 12;\n } else if (this.hour === 12) {\n this.hour--;\n\n return this.toggleMeridian();\n } else if (this.hour === 0) {\n this.hour = 11;\n\n return this.toggleMeridian();\n } else {\n this.hour--;\n }\n } else {\n if (this.hour <= 0) {\n this.hour = this.maxHours - 1;\n } else {\n this.hour--;\n }\n }\n },\n\n decrementMinute: function(step) {\n var newVal;\n\n if (step) {\n newVal = this.minute - step;\n } else {\n newVal = this.minute - this.minuteStep;\n }\n\n if (newVal < 0) {\n this.decrementHour();\n this.minute = newVal + 60;\n } else {\n this.minute = newVal;\n }\n },\n\n decrementSecond: function() {\n var newVal = this.second - this.secondStep;\n\n if (newVal < 0) {\n this.decrementMinute(true);\n this.second = newVal + 60;\n } else {\n this.second = newVal;\n }\n },\n\n elementKeydown: function(e) {\n switch (e.which) {\n case 9: //tab\n if (e.shiftKey) {\n if (this.highlightedUnit === 'hour') {\n this.hideWidget();\n break;\n }\n this.highlightPrevUnit();\n } else if ((this.showMeridian && this.highlightedUnit === 'meridian') || (this.showSeconds && this.highlightedUnit === 'second') || (!this.showMeridian && !this.showSeconds && this.highlightedUnit ==='minute')) {\n this.hideWidget();\n break;\n } else {\n this.highlightNextUnit();\n }\n e.preventDefault();\n this.updateFromElementVal();\n break;\n case 27: // escape\n this.updateFromElementVal();\n break;\n case 37: // left arrow\n e.preventDefault();\n this.highlightPrevUnit();\n this.updateFromElementVal();\n break;\n case 38: // up arrow\n e.preventDefault();\n switch (this.highlightedUnit) {\n case 'hour':\n this.incrementHour();\n this.highlightHour();\n break;\n case 'minute':\n this.incrementMinute();\n this.highlightMinute();\n break;\n case 'second':\n this.incrementSecond();\n this.highlightSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n this.highlightMeridian();\n break;\n }\n this.update();\n break;\n case 39: // right arrow\n e.preventDefault();\n this.highlightNextUnit();\n this.updateFromElementVal();\n break;\n case 40: // down arrow\n e.preventDefault();\n switch (this.highlightedUnit) {\n case 'hour':\n this.decrementHour();\n this.highlightHour();\n break;\n case 'minute':\n this.decrementMinute();\n this.highlightMinute();\n break;\n case 'second':\n this.decrementSecond();\n this.highlightSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n this.highlightMeridian();\n break;\n }\n\n this.update();\n break;\n }\n },\n\n getCursorPosition: function() {\n var input = this.$element.get(0);\n\n if ('selectionStart' in input) {// Standard-compliant browsers\n\n return input.selectionStart;\n } else if (document.selection) {// IE fix\n input.focus();\n var sel = document.selection.createRange(),\n selLen = document.selection.createRange().text.length;\n\n sel.moveStart('character', - input.value.length);\n\n return sel.text.length - selLen;\n }\n },\n\n getTemplate: function() {\n var template,\n hourTemplate,\n minuteTemplate,\n secondTemplate,\n meridianTemplate,\n templateContent;\n\n if (this.showInputs) {\n hourTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-hour\" maxlength=\"2\"/>';\n minuteTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-minute\" maxlength=\"2\"/>';\n secondTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-second\" maxlength=\"2\"/>';\n meridianTemplate = '<input type=\"text\" class=\"bootstrap-timepicker-meridian\" maxlength=\"2\"/>';\n } else {\n hourTemplate = '<span class=\"bootstrap-timepicker-hour\"></span>';\n minuteTemplate = '<span class=\"bootstrap-timepicker-minute\"></span>';\n secondTemplate = '<span class=\"bootstrap-timepicker-second\"></span>';\n meridianTemplate = '<span class=\"bootstrap-timepicker-meridian\"></span>';\n }\n\n templateContent = '<table>'+\n '<tr>'+\n '<td><a href=\"#\" data-action=\"incrementHour\"><span class=\"'+ this.icons.up +'\"></span></a></td>'+\n '<td class=\"separator\">&nbsp;</td>'+\n '<td><a href=\"#\" data-action=\"incrementMinute\"><span class=\"'+ this.icons.up +'\"></span></a></td>'+\n (this.showSeconds ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td><a href=\"#\" data-action=\"incrementSecond\"><span class=\"'+ this.icons.up +'\"></span></a></td>'\n : '') +\n (this.showMeridian ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td class=\"meridian-column\"><a href=\"#\" data-action=\"toggleMeridian\"><span class=\"'+ this.icons.up +'\"></span></a></td>'\n : '') +\n '</tr>'+\n '<tr>'+\n '<td>'+ hourTemplate +'</td> '+\n '<td class=\"separator\">:</td>'+\n '<td>'+ minuteTemplate +'</td> '+\n (this.showSeconds ?\n '<td class=\"separator\">:</td>'+\n '<td>'+ secondTemplate +'</td>'\n : '') +\n (this.showMeridian ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td>'+ meridianTemplate +'</td>'\n : '') +\n '</tr>'+\n '<tr>'+\n '<td><a href=\"#\" data-action=\"decrementHour\"><span class=\"'+ this.icons.down +'\"></span></a></td>'+\n '<td class=\"separator\"></td>'+\n '<td><a href=\"#\" data-action=\"decrementMinute\"><span class=\"'+ this.icons.down +'\"></span></a></td>'+\n (this.showSeconds ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td><a href=\"#\" data-action=\"decrementSecond\"><span class=\"'+ this.icons.down +'\"></span></a></td>'\n : '') +\n (this.showMeridian ?\n '<td class=\"separator\">&nbsp;</td>'+\n '<td><a href=\"#\" data-action=\"toggleMeridian\"><span class=\"'+ this.icons.down +'\"></span></a></td>'\n : '') +\n '</tr>'+\n '</table>';\n\n switch(this.template) {\n case 'modal':\n template = '<div class=\"bootstrap-timepicker-widget modal hide fade in\" data-backdrop=\"'+ (this.modalBackdrop ? 'true' : 'false') +'\">'+\n '<div class=\"modal-header\">'+\n '<a href=\"#\" class=\"close\" data-dismiss=\"modal\">&times;</a>'+\n '<h3>Pick a Time</h3>'+\n '</div>'+\n '<div class=\"modal-content\">'+\n templateContent +\n '</div>'+\n '<div class=\"modal-footer\">'+\n '<a href=\"#\" class=\"btn btn-primary\" data-dismiss=\"modal\">OK</a>'+\n '</div>'+\n '</div>';\n break;\n case 'dropdown':\n template = '<div class=\"bootstrap-timepicker-widget dropdown-menu\">'+ templateContent +'</div>';\n break;\n }\n\n return template;\n },\n\n getTime: function() {\n if (this.hour === '') {\n return '';\n }\n\n return this.hour + ':' + (this.minute.toString().length === 1 ? '0' + this.minute : this.minute) + (this.showSeconds ? ':' + (this.second.toString().length === 1 ? '0' + this.second : this.second) : '') + (this.showMeridian ? ' ' + this.meridian : '');\n },\n\n hideWidget: function() {\n if (this.isOpen === false) {\n return;\n }\n\n this.$element.trigger({\n 'type': 'hide.timepicker',\n 'time': {\n 'value': this.getTime(),\n 'hours': this.hour,\n 'minutes': this.minute,\n 'seconds': this.second,\n 'meridian': this.meridian\n }\n });\n\n if (this.template === 'modal' && this.$widget.modal) {\n this.$widget.modal('hide');\n } else {\n this.$widget.removeClass('open');\n }\n\n $(document).off('mousedown.timepicker, touchend.timepicker', this.handleDocumentClick);\n\n this.isOpen = false;\n // show/hide approach taken by datepicker\n this.$widget.detach();\n },\n\n highlightUnit: function() {\n this.position = this.getCursorPosition();\n if (this.position >= 0 && this.position <= 2) {\n this.highlightHour();\n } else if (this.position >= 3 && this.position <= 5) {\n this.highlightMinute();\n } else if (this.position >= 6 && this.position <= 8) {\n if (this.showSeconds) {\n this.highlightSecond();\n } else {\n this.highlightMeridian();\n }\n } else if (this.position >= 9 && this.position <= 11) {\n this.highlightMeridian();\n }\n },\n\n highlightNextUnit: function() {\n switch (this.highlightedUnit) {\n case 'hour':\n this.highlightMinute();\n break;\n case 'minute':\n if (this.showSeconds) {\n this.highlightSecond();\n } else if (this.showMeridian){\n this.highlightMeridian();\n } else {\n this.highlightHour();\n }\n break;\n case 'second':\n if (this.showMeridian) {\n this.highlightMeridian();\n } else {\n this.highlightHour();\n }\n break;\n case 'meridian':\n this.highlightHour();\n break;\n }\n },\n\n highlightPrevUnit: function() {\n switch (this.highlightedUnit) {\n case 'hour':\n if(this.showMeridian){\n this.highlightMeridian();\n } else if (this.showSeconds) {\n this.highlightSecond();\n } else {\n this.highlightMinute();\n }\n break;\n case 'minute':\n this.highlightHour();\n break;\n case 'second':\n this.highlightMinute();\n break;\n case 'meridian':\n if (this.showSeconds) {\n this.highlightSecond();\n } else {\n this.highlightMinute();\n }\n break;\n }\n },\n\n highlightHour: function() {\n var $element = this.$element.get(0),\n self = this;\n\n this.highlightedUnit = 'hour';\n\n if ($element.setSelectionRange) {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(0,1);\n } else {\n $element.setSelectionRange(0,2);\n }\n }, 0);\n }\n },\n\n highlightMinute: function() {\n var $element = this.$element.get(0),\n self = this;\n\n this.highlightedUnit = 'minute';\n\n if ($element.setSelectionRange) {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(2,4);\n } else {\n $element.setSelectionRange(3,5);\n }\n }, 0);\n }\n },\n\n highlightSecond: function() {\n var $element = this.$element.get(0),\n self = this;\n\n this.highlightedUnit = 'second';\n\n if ($element.setSelectionRange) {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(5,7);\n } else {\n $element.setSelectionRange(6,8);\n }\n }, 0);\n }\n },\n\n highlightMeridian: function() {\n var $element = this.$element.get(0),\n self = this;\n\n this.highlightedUnit = 'meridian';\n\n if ($element.setSelectionRange) {\n if (this.showSeconds) {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(8,10);\n } else {\n $element.setSelectionRange(9,11);\n }\n }, 0);\n } else {\n setTimeout(function() {\n if (self.hour < 10) {\n $element.setSelectionRange(5,7);\n } else {\n $element.setSelectionRange(6,8);\n }\n }, 0);\n }\n }\n },\n\n incrementHour: function() {\n if (this.showMeridian) {\n if (this.hour === 11) {\n this.hour++;\n return this.toggleMeridian();\n } else if (this.hour === 12) {\n this.hour = 0;\n }\n }\n if (this.hour === this.maxHours - 1) {\n this.hour = 0;\n\n return;\n }\n this.hour++;\n },\n\n incrementMinute: function(step) {\n var newVal;\n\n if (step) {\n newVal = this.minute + step;\n } else {\n newVal = this.minute + this.minuteStep - (this.minute % this.minuteStep);\n }\n\n if (newVal > 59) {\n this.incrementHour();\n this.minute = newVal - 60;\n } else {\n this.minute = newVal;\n }\n },\n\n incrementSecond: function() {\n var newVal = this.second + this.secondStep - (this.second % this.secondStep);\n\n if (newVal > 59) {\n this.incrementMinute(true);\n this.second = newVal - 60;\n } else {\n this.second = newVal;\n }\n },\n\n mousewheel: function(e) {\n if (this.disableMousewheel) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n var delta = e.originalEvent.wheelDelta || -e.originalEvent.detail,\n scrollTo = null;\n\n if (e.type === 'mousewheel') {\n scrollTo = (e.originalEvent.wheelDelta * -1);\n }\n else if (e.type === 'DOMMouseScroll') {\n scrollTo = 40 * e.originalEvent.detail;\n }\n\n if (scrollTo) {\n e.preventDefault();\n $(this).scrollTop(scrollTo + $(this).scrollTop());\n }\n\n switch (this.highlightedUnit) {\n case 'minute':\n if (delta > 0) {\n this.incrementMinute();\n } else {\n this.decrementMinute();\n }\n this.highlightMinute();\n break;\n case 'second':\n if (delta > 0) {\n this.incrementSecond();\n } else {\n this.decrementSecond();\n }\n this.highlightSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n this.highlightMeridian();\n break;\n default:\n if (delta > 0) {\n this.incrementHour();\n } else {\n this.decrementHour();\n }\n this.highlightHour();\n break;\n }\n\n return false;\n },\n\n /**\n * Given a segment value like 43, will round and snap the segment\n * to the nearest \"step\", like 45 if step is 15. Segment will\n * \"overflow\" to 0 if it's larger than 59 or would otherwise\n * round up to 60.\n */\n changeToNearestStep: function (segment, step) {\n if (segment % step === 0) {\n return segment;\n }\n if (Math.round((segment % step) / step)) {\n return (segment + (step - segment % step)) % 60;\n } else {\n return segment - segment % step;\n }\n },\n\n // This method was adapted from bootstrap-datepicker.\n place : function() {\n if (this.isInline) {\n return;\n }\n var widgetWidth = this.$widget.outerWidth(), widgetHeight = this.$widget.outerHeight(), visualPadding = 10, windowWidth =\n $(window).width(), windowHeight = $(window).height(), scrollTop = $(window).scrollTop();\n\n var zIndex = parseInt(this.$element.parents().filter(function() { return $(this).css('z-index') !== 'auto'; }).first().css('z-index'), 10) + 10;\n var offset = this.component ? this.component.parent().offset() : this.$element.offset();\n var height = this.component ? this.component.outerHeight(true) : this.$element.outerHeight(false);\n var width = this.component ? this.component.outerWidth(true) : this.$element.outerWidth(false);\n var left = offset.left, top = offset.top;\n\n this.$widget.removeClass('timepicker-orient-top timepicker-orient-bottom timepicker-orient-right timepicker-orient-left');\n\n if (this.orientation.x !== 'auto') {\n this.$widget.addClass('timepicker-orient-' + this.orientation.x);\n if (this.orientation.x === 'right') {\n left -= widgetWidth - width;\n }\n } else{\n // auto x orientation is best-placement: if it crosses a window edge, fudge it sideways\n // Default to left\n this.$widget.addClass('timepicker-orient-left');\n if (offset.left < 0) {\n left -= offset.left - visualPadding;\n } else if (offset.left + widgetWidth > windowWidth) {\n left = windowWidth - widgetWidth - visualPadding;\n }\n }\n // auto y orientation is best-situation: top or bottom, no fudging, decision based on which shows more of the widget\n var yorient = this.orientation.y, topOverflow, bottomOverflow;\n if (yorient === 'auto') {\n topOverflow = -scrollTop + offset.top - widgetHeight;\n bottomOverflow = scrollTop + windowHeight - (offset.top + height + widgetHeight);\n if (Math.max(topOverflow, bottomOverflow) === bottomOverflow) {\n yorient = 'top';\n } else {\n yorient = 'bottom';\n }\n }\n this.$widget.addClass('timepicker-orient-' + yorient);\n if (yorient === 'top'){\n top += height;\n } else{\n top -= widgetHeight + parseInt(this.$widget.css('padding-top'), 10);\n }\n\n this.$widget.css({\n top : top,\n left : left,\n zIndex : zIndex\n });\n },\n\n remove: function() {\n $('document').off('.timepicker');\n if (this.$widget) {\n this.$widget.remove();\n }\n delete this.$element.data().timepicker;\n },\n\n setDefaultTime: function(defaultTime) {\n if (!this.$element.val()) {\n if (defaultTime === 'current') {\n var dTime = new Date(),\n hours = dTime.getHours(),\n minutes = dTime.getMinutes(),\n seconds = dTime.getSeconds(),\n meridian = 'AM';\n\n if (seconds !== 0) {\n seconds = Math.ceil(dTime.getSeconds() / this.secondStep) * this.secondStep;\n if (seconds === 60) {\n minutes += 1;\n seconds = 0;\n }\n }\n\n if (minutes !== 0) {\n minutes = Math.ceil(dTime.getMinutes() / this.minuteStep) * this.minuteStep;\n if (minutes === 60) {\n hours += 1;\n minutes = 0;\n }\n }\n\n if (this.showMeridian) {\n if (hours === 0) {\n hours = 12;\n } else if (hours >= 12) {\n if (hours > 12) {\n hours = hours - 12;\n }\n meridian = 'PM';\n } else {\n meridian = 'AM';\n }\n }\n\n this.hour = hours;\n this.minute = minutes;\n this.second = seconds;\n this.meridian = meridian;\n\n this.update();\n\n } else if (defaultTime === false) {\n this.hour = 0;\n this.minute = 0;\n this.second = 0;\n this.meridian = 'AM';\n } else {\n this.setTime(defaultTime);\n }\n } else {\n this.updateFromElementVal();\n }\n },\n\n setTime: function(time, ignoreWidget) {\n if (!time) {\n this.clear();\n return;\n }\n\n var timeMode,\n timeArray,\n hour,\n minute,\n second,\n meridian;\n\n if (typeof time === 'object' && time.getMonth){\n // this is a date object\n hour = time.getHours();\n minute = time.getMinutes();\n second = time.getSeconds();\n\n if (this.showMeridian){\n meridian = 'AM';\n if (hour > 12){\n meridian = 'PM';\n hour = hour % 12;\n }\n\n if (hour === 12){\n meridian = 'PM';\n }\n }\n } else {\n timeMode = ((/a/i).test(time) ? 1 : 0) + ((/p/i).test(time) ? 2 : 0); // 0 = none, 1 = AM, 2 = PM, 3 = BOTH.\n if (timeMode > 2) { // If both are present, fail.\n this.clear();\n return;\n }\n\n timeArray = time.replace(/[^0-9\\:]/g, '').split(':');\n\n hour = timeArray[0] ? timeArray[0].toString() : timeArray.toString();\n\n if(this.explicitMode && hour.length > 2 && (hour.length % 2) !== 0 ) {\n this.clear();\n return;\n }\n\n minute = timeArray[1] ? timeArray[1].toString() : '';\n second = timeArray[2] ? timeArray[2].toString() : '';\n\n // adaptive time parsing\n if (hour.length > 4) {\n second = hour.slice(-2);\n hour = hour.slice(0, -2);\n }\n\n if (hour.length > 2) {\n minute = hour.slice(-2);\n hour = hour.slice(0, -2);\n }\n\n if (minute.length > 2) {\n second = minute.slice(-2);\n minute = minute.slice(0, -2);\n }\n\n hour = parseInt(hour, 10);\n minute = parseInt(minute, 10);\n second = parseInt(second, 10);\n\n if (isNaN(hour)) {\n hour = 0;\n }\n if (isNaN(minute)) {\n minute = 0;\n }\n if (isNaN(second)) {\n second = 0;\n }\n\n // Adjust the time based upon unit boundary.\n // NOTE: Negatives will never occur due to time.replace() above.\n if (second > 59) {\n second = 59;\n }\n\n if (minute > 59) {\n minute = 59;\n }\n\n if (hour >= this.maxHours) {\n // No day/date handling.\n hour = this.maxHours - 1;\n }\n\n if (this.showMeridian) {\n if (hour > 12) {\n // Force PM.\n timeMode = 2;\n hour -= 12;\n }\n if (!timeMode) {\n timeMode = 1;\n }\n if (hour === 0) {\n hour = 12; // AM or PM, reset to 12. 0 AM = 12 AM. 0 PM = 12 PM, etc.\n }\n meridian = timeMode === 1 ? 'AM' : 'PM';\n } else if (hour < 12 && timeMode === 2) {\n hour += 12;\n } else {\n if (hour >= this.maxHours) {\n hour = this.maxHours - 1;\n } else if ((hour < 0) || (hour === 12 && timeMode === 1)){\n hour = 0;\n }\n }\n }\n\n this.hour = hour;\n if (this.snapToStep) {\n this.minute = this.changeToNearestStep(minute, this.minuteStep);\n this.second = this.changeToNearestStep(second, this.secondStep);\n } else {\n this.minute = minute;\n this.second = second;\n }\n this.meridian = meridian;\n\n this.update(ignoreWidget);\n },\n\n showWidget: function() {\n if (this.isOpen) {\n return;\n }\n\n if (this.$element.is(':disabled')) {\n return;\n }\n\n // show/hide approach taken by datepicker\n this.$widget.appendTo(this.appendWidgetTo);\n $(document).on('mousedown.timepicker, touchend.timepicker', {scope: this}, this.handleDocumentClick);\n\n this.$element.trigger({\n 'type': 'show.timepicker',\n 'time': {\n 'value': this.getTime(),\n 'hours': this.hour,\n 'minutes': this.minute,\n 'seconds': this.second,\n 'meridian': this.meridian\n }\n });\n\n this.place();\n if (this.disableFocus) {\n this.$element.blur();\n }\n\n // widget shouldn't be empty on open\n if (this.hour === '') {\n if (this.defaultTime) {\n this.setDefaultTime(this.defaultTime);\n } else {\n this.setTime('0:0:0');\n }\n }\n\n if (this.template === 'modal' && this.$widget.modal) {\n this.$widget.modal('show').on('hidden', $.proxy(this.hideWidget, this));\n } else {\n if (this.isOpen === false) {\n this.$widget.addClass('open');\n }\n }\n\n this.isOpen = true;\n },\n\n toggleMeridian: function() {\n this.meridian = this.meridian === 'AM' ? 'PM' : 'AM';\n },\n\n update: function(ignoreWidget) {\n this.updateElement();\n if (!ignoreWidget) {\n this.updateWidget();\n }\n\n this.$element.trigger({\n 'type': 'changeTime.timepicker',\n 'time': {\n 'value': this.getTime(),\n 'hours': this.hour,\n 'minutes': this.minute,\n 'seconds': this.second,\n 'meridian': this.meridian\n }\n });\n },\n\n updateElement: function() {\n this.$element.val(this.getTime()).change();\n },\n\n updateFromElementVal: function() {\n this.setTime(this.$element.val());\n },\n\n updateWidget: function() {\n if (this.$widget === false) {\n return;\n }\n\n var hour = this.hour,\n minute = this.minute.toString().length === 1 ? '0' + this.minute : this.minute,\n second = this.second.toString().length === 1 ? '0' + this.second : this.second;\n\n if (this.showInputs) {\n this.$widget.find('input.bootstrap-timepicker-hour').val(hour);\n this.$widget.find('input.bootstrap-timepicker-minute').val(minute);\n\n if (this.showSeconds) {\n this.$widget.find('input.bootstrap-timepicker-second').val(second);\n }\n if (this.showMeridian) {\n this.$widget.find('input.bootstrap-timepicker-meridian').val(this.meridian);\n }\n } else {\n this.$widget.find('span.bootstrap-timepicker-hour').text(hour);\n this.$widget.find('span.bootstrap-timepicker-minute').text(minute);\n\n if (this.showSeconds) {\n this.$widget.find('span.bootstrap-timepicker-second').text(second);\n }\n if (this.showMeridian) {\n this.$widget.find('span.bootstrap-timepicker-meridian').text(this.meridian);\n }\n }\n },\n\n updateFromWidgetInputs: function() {\n if (this.$widget === false) {\n return;\n }\n\n var t = this.$widget.find('input.bootstrap-timepicker-hour').val() + ':' +\n this.$widget.find('input.bootstrap-timepicker-minute').val() +\n (this.showSeconds ? ':' + this.$widget.find('input.bootstrap-timepicker-second').val() : '') +\n (this.showMeridian ? this.$widget.find('input.bootstrap-timepicker-meridian').val() : '')\n ;\n\n this.setTime(t, true);\n },\n\n widgetClick: function(e) {\n e.stopPropagation();\n e.preventDefault();\n\n var $input = $(e.target),\n action = $input.closest('a').data('action');\n\n if (action) {\n this[action]();\n }\n this.update();\n\n if ($input.is('input')) {\n $input.get(0).setSelectionRange(0,2);\n }\n },\n\n widgetKeydown: function(e) {\n var $input = $(e.target),\n name = $input.attr('class').replace('bootstrap-timepicker-', '');\n\n switch (e.which) {\n case 9: //tab\n if (e.shiftKey) {\n if (name === 'hour') {\n return this.hideWidget();\n }\n } else if ((this.showMeridian && name === 'meridian') || (this.showSeconds && name === 'second') || (!this.showMeridian && !this.showSeconds && name === 'minute')) {\n return this.hideWidget();\n }\n break;\n case 27: // escape\n this.hideWidget();\n break;\n case 38: // up arrow\n e.preventDefault();\n switch (name) {\n case 'hour':\n this.incrementHour();\n break;\n case 'minute':\n this.incrementMinute();\n break;\n case 'second':\n this.incrementSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n break;\n }\n this.setTime(this.getTime());\n $input.get(0).setSelectionRange(0,2);\n break;\n case 40: // down arrow\n e.preventDefault();\n switch (name) {\n case 'hour':\n this.decrementHour();\n break;\n case 'minute':\n this.decrementMinute();\n break;\n case 'second':\n this.decrementSecond();\n break;\n case 'meridian':\n this.toggleMeridian();\n break;\n }\n this.setTime(this.getTime());\n $input.get(0).setSelectionRange(0,2);\n break;\n }\n },\n\n widgetKeyup: function(e) {\n if ((e.which === 65) || (e.which === 77) || (e.which === 80) || (e.which === 46) || (e.which === 8) || (e.which >= 48 && e.which <= 57) || (e.which >= 96 && e.which <= 105)) {\n this.updateFromWidgetInputs();\n }\n }\n };\n\n //TIMEPICKER PLUGIN DEFINITION\n $.fn.timepicker = function(option) {\n var args = Array.apply(null, arguments);\n args.shift();\n return this.each(function() {\n var $this = $(this),\n data = $this.data('timepicker'),\n options = typeof option === 'object' && option;\n\n if (!data) {\n $this.data('timepicker', (data = new Timepicker(this, $.extend({}, $.fn.timepicker.defaults, options, $(this).data()))));\n }\n\n if (typeof option === 'string') {\n data[option].apply(data, args);\n }\n });\n };\n\n $.fn.timepicker.defaults = {\n defaultTime: 'current',\n disableFocus: false,\n disableMousewheel: false,\n isOpen: false,\n minuteStep: 15,\n modalBackdrop: false,\n orientation: { x: 'auto', y: 'auto'},\n secondStep: 15,\n snapToStep: false,\n showSeconds: false,\n showInputs: true,\n showMeridian: true,\n template: 'dropdown',\n appendWidgetTo: 'body',\n showWidgetOnAddonClick: true,\n icons: {\n up: 'glyphicon glyphicon-chevron-up',\n down: 'glyphicon glyphicon-chevron-down'\n },\n maxHours: 24,\n explicitMode: false\n };\n\n $.fn.timepicker.Constructor = Timepicker;\n\n $(document).on(\n 'focus.timepicker.data-api click.timepicker.data-api',\n '[data-provide=\"timepicker\"]',\n function(e){\n var $this = $(this);\n if ($this.data('timepicker')) {\n return;\n }\n e.preventDefault();\n // component click requires us to explicitly show it\n $this.timepicker();\n }\n );\n\n})(jQuery, window, document);\n","/*!\n * Bootstrap alert.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Alert = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'alert';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.alert';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Selector = {\n DISMISS: '[data-dismiss=\"alert\"]'\n };\n var Event = {\n CLOSE: \"close\" + EVENT_KEY,\n CLOSED: \"closed\" + EVENT_KEY,\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n ALERT: 'alert',\n FADE: 'fade',\n SHOW: 'show'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Alert =\n /*#__PURE__*/\n function () {\n function Alert(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Alert.prototype;\n\n // Public\n _proto.close = function close(element) {\n var rootElement = this._element;\n\n if (element) {\n rootElement = this._getRootElement(element);\n }\n\n var customEvent = this._triggerCloseEvent(rootElement);\n\n if (customEvent.isDefaultPrevented()) {\n return;\n }\n\n this._removeElement(rootElement);\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._getRootElement = function _getRootElement(element) {\n var selector = Util.getSelectorFromElement(element);\n var parent = false;\n\n if (selector) {\n parent = document.querySelector(selector);\n }\n\n if (!parent) {\n parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n }\n\n return parent;\n };\n\n _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n var closeEvent = $.Event(Event.CLOSE);\n $(element).trigger(closeEvent);\n return closeEvent;\n };\n\n _proto._removeElement = function _removeElement(element) {\n var _this = this;\n\n $(element).removeClass(ClassName.SHOW);\n\n if (!$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element);\n\n return;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(element);\n $(element).one(Util.TRANSITION_END, function (event) {\n return _this._destroyElement(element, event);\n }).emulateTransitionEnd(transitionDuration);\n };\n\n _proto._destroyElement = function _destroyElement(element) {\n $(element).detach().trigger(Event.CLOSED).remove();\n } // Static\n ;\n\n Alert._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $element = $(this);\n var data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new Alert(this);\n $element.data(DATA_KEY, data);\n }\n\n if (config === 'close') {\n data[config](this);\n }\n });\n };\n\n Alert._handleDismiss = function _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault();\n }\n\n alertInstance.close(this);\n };\n };\n\n _createClass(Alert, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Alert;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface;\n $.fn[NAME].Constructor = Alert;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Alert._jQueryInterface;\n };\n\n return Alert;\n\n}));\n//# sourceMappingURL=alert.js.map\n","/*!\n * Bootstrap button.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = global || self, global.Button = factory(global.jQuery));\n}(this, function ($) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'button';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.button';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ClassName = {\n ACTIVE: 'active',\n BUTTON: 'btn',\n FOCUS: 'focus'\n };\n var Selector = {\n DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n INPUT: 'input:not([type=\"hidden\"])',\n ACTIVE: '.active',\n BUTTON: '.btn'\n };\n var Event = {\n CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Button =\n /*#__PURE__*/\n function () {\n function Button(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Button.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n var triggerChangeEvent = true;\n var addAriaPressed = true;\n var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n if (rootElement) {\n var input = this._element.querySelector(Selector.INPUT);\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {\n triggerChangeEvent = false;\n } else {\n var activeElement = rootElement.querySelector(Selector.ACTIVE);\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE);\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n return;\n }\n\n input.checked = !this._element.classList.contains(ClassName.ACTIVE);\n $(input).trigger('change');\n }\n\n input.focus();\n addAriaPressed = false;\n }\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE);\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Static\n ;\n\n Button._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n if (!data) {\n data = new Button(this);\n $(this).data(DATA_KEY, data);\n }\n\n if (config === 'toggle') {\n data[config]();\n }\n });\n };\n\n _createClass(Button, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Button;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n event.preventDefault();\n var button = event.target;\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON);\n }\n\n Button._jQueryInterface.call($(button), 'toggle');\n }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n var button = $(event.target).closest(Selector.BUTTON)[0];\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface;\n $.fn[NAME].Constructor = Button;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Button._jQueryInterface;\n };\n\n return Button;\n\n}));\n//# sourceMappingURL=button.js.map\n","/*!\n * Bootstrap carousel.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Carousel = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'carousel';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.carousel';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n var SWIPE_THRESHOLD = 40;\n var Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n };\n var DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n };\n var Direction = {\n NEXT: 'next',\n PREV: 'prev',\n LEFT: 'left',\n RIGHT: 'right'\n };\n var Event = {\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 var 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 var 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 var PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Carousel =\n /*#__PURE__*/\n function () {\n function Carousel(element, config) {\n this._items = null;\n this._interval = null;\n this._activeElement = null;\n this._isPaused = false;\n this._isSliding = false;\n this.touchTimeout = null;\n this.touchStartX = 0;\n this.touchDeltaX = 0;\n this._config = this._getConfig(config);\n this._element = element;\n this._indicatorsElement = this._element.querySelector(Selector.INDICATORS);\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n this._addEventListeners();\n } // Getters\n\n\n var _proto = Carousel.prototype;\n\n // Public\n _proto.next = function next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT);\n }\n };\n\n _proto.nextWhenVisible = function nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n this.next();\n }\n };\n\n _proto.prev = function prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV);\n }\n };\n\n _proto.pause = function pause(event) {\n if (!event) {\n this._isPaused = true;\n }\n\n if (this._element.querySelector(Selector.NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element);\n this.cycle(true);\n }\n\n clearInterval(this._interval);\n this._interval = null;\n };\n\n _proto.cycle = function cycle(event) {\n if (!event) {\n this._isPaused = false;\n }\n\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n }\n };\n\n _proto.to = function to(index) {\n var _this = this;\n\n this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeIndex = this._getItemIndex(this._activeElement);\n\n if (index > this._items.length - 1 || index < 0) {\n return;\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, function () {\n return _this.to(index);\n });\n return;\n }\n\n if (activeIndex === index) {\n this.pause();\n this.cycle();\n return;\n }\n\n var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n this._slide(direction, this._items[index]);\n };\n\n _proto.dispose = function dispose() {\n $(this._element).off(EVENT_KEY);\n $.removeData(this._element, DATA_KEY);\n this._items = null;\n this._config = null;\n this._element = null;\n this._interval = null;\n this._isPaused = null;\n this._isSliding = null;\n this._activeElement = null;\n this._indicatorsElement = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._handleSwipe = function _handleSwipe() {\n var absDeltax = Math.abs(this.touchDeltaX);\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return;\n }\n\n var direction = absDeltax / this.touchDeltaX; // swipe left\n\n if (direction > 0) {\n this.prev();\n } // swipe right\n\n\n if (direction < 0) {\n this.next();\n }\n };\n\n _proto._addEventListeners = function _addEventListeners() {\n var _this2 = this;\n\n if (this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN, function (event) {\n return _this2._keydown(event);\n });\n }\n\n if (this._config.pause === 'hover') {\n $(this._element).on(Event.MOUSEENTER, function (event) {\n return _this2.pause(event);\n }).on(Event.MOUSELEAVE, function (event) {\n return _this2.cycle(event);\n });\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners();\n }\n };\n\n _proto._addTouchEventListeners = function _addTouchEventListeners() {\n var _this3 = this;\n\n if (!this._touchSupported) {\n return;\n }\n\n var start = function start(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchStartX = event.originalEvent.clientX;\n } else if (!_this3._pointerEvent) {\n _this3.touchStartX = event.originalEvent.touches[0].clientX;\n }\n };\n\n var move = function move(event) {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n _this3.touchDeltaX = 0;\n } else {\n _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n }\n };\n\n var end = function end(event) {\n if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n }\n\n _this3._handleSwipe();\n\n if (_this3._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n _this3.pause();\n\n if (_this3.touchTimeout) {\n clearTimeout(_this3.touchTimeout);\n }\n\n _this3.touchTimeout = setTimeout(function (event) {\n return _this3.cycle(event);\n }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n }\n };\n\n $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, function (e) {\n return e.preventDefault();\n });\n\n if (this._pointerEvent) {\n $(this._element).on(Event.POINTERDOWN, function (event) {\n return start(event);\n });\n $(this._element).on(Event.POINTERUP, function (event) {\n return end(event);\n });\n\n this._element.classList.add(ClassName.POINTER_EVENT);\n } else {\n $(this._element).on(Event.TOUCHSTART, function (event) {\n return start(event);\n });\n $(this._element).on(Event.TOUCHMOVE, function (event) {\n return move(event);\n });\n $(this._element).on(Event.TOUCHEND, function (event) {\n return end(event);\n });\n }\n };\n\n _proto._keydown = function _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault();\n this.prev();\n break;\n\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault();\n this.next();\n break;\n\n default:\n }\n };\n\n _proto._getItemIndex = function _getItemIndex(element) {\n this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : [];\n return this._items.indexOf(element);\n };\n\n _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n var isNextDirection = direction === Direction.NEXT;\n var isPrevDirection = direction === Direction.PREV;\n\n var activeIndex = this._getItemIndex(activeElement);\n\n var lastItemIndex = this._items.length - 1;\n var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement;\n }\n\n var delta = direction === Direction.PREV ? -1 : 1;\n var itemIndex = (activeIndex + delta) % this._items.length;\n return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n };\n\n _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n var targetIndex = this._getItemIndex(relatedTarget);\n\n var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM));\n\n var slideEvent = $.Event(Event.SLIDE, {\n relatedTarget: relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n });\n $(this._element).trigger(slideEvent);\n return slideEvent;\n };\n\n _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE));\n $(indicators).removeClass(ClassName.ACTIVE);\n\n var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE);\n }\n }\n };\n\n _proto._slide = function _slide(direction, element) {\n var _this4 = this;\n\n var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);\n\n var activeElementIndex = this._getItemIndex(activeElement);\n\n var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n var nextElementIndex = this._getItemIndex(nextElement);\n\n var isCycling = Boolean(this._interval);\n var directionalClassName;\n var orderClassName;\n var eventDirectionName;\n\n if (direction === Direction.NEXT) {\n directionalClassName = 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 var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n if (slideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return;\n }\n\n this._isSliding = true;\n\n if (isCycling) {\n this.pause();\n }\n\n this._setActiveIndicatorElement(nextElement);\n\n var slidEvent = $.Event(Event.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 Util.reflow(nextElement);\n $(activeElement).addClass(directionalClassName);\n $(nextElement).addClass(directionalClassName);\n var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n this._config.interval = nextElementInterval;\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval;\n }\n\n var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n $(activeElement).one(Util.TRANSITION_END, function () {\n $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n $(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n _this4._isSliding = false;\n setTimeout(function () {\n return $(_this4._element).trigger(slidEvent);\n }, 0);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE);\n $(nextElement).addClass(ClassName.ACTIVE);\n this._isSliding = false;\n $(this._element).trigger(slidEvent);\n }\n\n if (isCycling) {\n this.cycle();\n }\n } // Static\n ;\n\n Carousel._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $(this).data());\n\n if (typeof config === 'object') {\n _config = _objectSpread({}, _config, config);\n }\n\n var action = typeof config === 'string' ? config : _config.slide;\n\n if (!data) {\n data = new Carousel(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'number') {\n data.to(config);\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n }\n\n data[action]();\n } else if (_config.interval && _config.ride) {\n data.pause();\n data.cycle();\n }\n });\n };\n\n Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n var selector = Util.getSelectorFromElement(this);\n\n if (!selector) {\n return;\n }\n\n var target = $(selector)[0];\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return;\n }\n\n var config = _objectSpread({}, $(target).data(), $(this).data());\n\n var slideIndex = this.getAttribute('data-slide-to');\n\n if (slideIndex) {\n config.interval = false;\n }\n\n Carousel._jQueryInterface.call($(target), config);\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex);\n }\n\n event.preventDefault();\n };\n\n _createClass(Carousel, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Carousel;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n $(window).on(Event.LOAD_DATA_API, function () {\n var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE));\n\n for (var i = 0, len = carousels.length; i < len; i++) {\n var $carousel = $(carousels[i]);\n\n Carousel._jQueryInterface.call($carousel, $carousel.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface;\n $.fn[NAME].Constructor = Carousel;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Carousel._jQueryInterface;\n };\n\n return Carousel;\n\n}));\n//# sourceMappingURL=carousel.js.map\n","/*!\n * Bootstrap collapse.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Collapse = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'collapse';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.collapse';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n toggle: true,\n parent: ''\n };\n var DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n };\n var 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 var ClassName = {\n SHOW: 'show',\n COLLAPSE: 'collapse',\n COLLAPSING: 'collapsing',\n COLLAPSED: 'collapsed'\n };\n var Dimension = {\n WIDTH: 'width',\n HEIGHT: 'height'\n };\n var Selector = {\n ACTIVES: '.show, .collapsing',\n DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Collapse =\n /*#__PURE__*/\n function () {\n function Collapse(element, config) {\n this._isTransitioning = false;\n this._element = element;\n this._config = this._getConfig(config);\n this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));\n\n for (var i = 0, len = toggleList.length; i < len; i++) {\n var elem = toggleList[i];\n var selector = Util.getSelectorFromElement(elem);\n var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n return foundElem === element;\n });\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector;\n\n this._triggerArray.push(elem);\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null;\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n }\n\n if (this._config.toggle) {\n this.toggle();\n }\n } // Getters\n\n\n var _proto = Collapse.prototype;\n\n // Public\n _proto.toggle = function toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide();\n } else {\n this.show();\n }\n };\n\n _proto.show = function show() {\n var _this = this;\n\n if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var actives;\n var activesData;\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {\n if (typeof _this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === _this._config.parent;\n }\n\n return elem.classList.contains(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\n if (activesData && activesData._isTransitioning) {\n return;\n }\n }\n\n var startEvent = $.Event(Event.SHOW);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n if (!activesData) {\n $(actives).data(DATA_KEY, null);\n }\n }\n\n var dimension = this._getDimension();\n\n $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n this._element.style[dimension] = 0;\n\n if (this._triggerArray.length) {\n $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n _this._element.style[dimension] = '';\n\n _this.setTransitioning(false);\n\n $(_this._element).trigger(Event.SHOWN);\n };\n\n var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n var scrollSize = \"scroll\" + capitalizedDimension;\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n this._element.style[dimension] = this._element[scrollSize] + \"px\";\n };\n\n _proto.hide = function hide() {\n var _this2 = this;\n\n if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {\n return;\n }\n\n var startEvent = $.Event(Event.HIDE);\n $(this._element).trigger(startEvent);\n\n if (startEvent.isDefaultPrevented()) {\n return;\n }\n\n var dimension = this._getDimension();\n\n this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n Util.reflow(this._element);\n $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n var triggerArrayLength = this._triggerArray.length;\n\n if (triggerArrayLength > 0) {\n for (var i = 0; i < triggerArrayLength; i++) {\n var trigger = this._triggerArray[i];\n var selector = Util.getSelectorFromElement(trigger);\n\n if (selector !== null) {\n var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n }\n }\n }\n }\n\n this.setTransitioning(true);\n\n var complete = function complete() {\n _this2.setTransitioning(false);\n\n $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n };\n\n this._element.style[dimension] = '';\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n };\n\n _proto.setTransitioning = function setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning;\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._config = null;\n this._parent = null;\n this._element = null;\n this._triggerArray = null;\n this._isTransitioning = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n config.toggle = Boolean(config.toggle); // Coerce string values\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getDimension = function _getDimension() {\n var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n };\n\n _proto._getParent = function _getParent() {\n var _this3 = this;\n\n var parent;\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent; // It's a jQuery object\n\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0];\n }\n } else {\n parent = document.querySelector(this._config.parent);\n }\n\n var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n var children = [].slice.call(parent.querySelectorAll(selector));\n $(children).each(function (i, element) {\n _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n });\n return parent;\n };\n\n _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n var isOpen = $(element).hasClass(ClassName.SHOW);\n\n if (triggerArray.length) {\n $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n }\n } // Static\n ;\n\n Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n var selector = Util.getSelectorFromElement(element);\n return selector ? document.querySelector(selector) : null;\n };\n\n Collapse._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n\n if (!data) {\n data = new Collapse(this, _config);\n $this.data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Collapse, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Collapse;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\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 var $trigger = $(this);\n var selector = Util.getSelectorFromElement(this);\n var selectors = [].slice.call(document.querySelectorAll(selector));\n $(selectors).each(function () {\n var $target = $(this);\n var data = $target.data(DATA_KEY);\n var config = data ? 'toggle' : $trigger.data();\n\n Collapse._jQueryInterface.call($target, config);\n });\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface;\n $.fn[NAME].Constructor = Collapse;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Collapse._jQueryInterface;\n };\n\n return Collapse;\n\n}));\n//# sourceMappingURL=collapse.js.map\n","/*!\n * Bootstrap modal.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Modal = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'modal';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.modal';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n var Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n };\n var DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n };\n var 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 var 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 var 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 * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Modal =\n /*#__PURE__*/\n function () {\n function Modal(element, config) {\n this._config = this._getConfig(config);\n this._element = element;\n this._dialog = element.querySelector(Selector.DIALOG);\n this._backdrop = null;\n this._isShown = false;\n this._isBodyOverflowing = false;\n this._ignoreBackdropClick = false;\n this._isTransitioning = false;\n this._scrollbarWidth = 0;\n } // Getters\n\n\n var _proto = Modal.prototype;\n\n // Public\n _proto.toggle = function toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n };\n\n _proto.show = function show(relatedTarget) {\n var _this = this;\n\n if (this._isShown || this._isTransitioning) {\n return;\n }\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true;\n }\n\n var showEvent = $.Event(Event.SHOW, {\n relatedTarget: relatedTarget\n });\n $(this._element).trigger(showEvent);\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = true;\n\n this._checkScrollbar();\n\n this._setScrollbar();\n\n this._adjustDialog();\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n return _this.hide(event);\n });\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n if ($(event.target).is(_this._element)) {\n _this._ignoreBackdropClick = true;\n }\n });\n });\n\n this._showBackdrop(function () {\n return _this._showElement(relatedTarget);\n });\n };\n\n _proto.hide = function hide(event) {\n var _this2 = this;\n\n if (event) {\n event.preventDefault();\n }\n\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n\n var hideEvent = $.Event(Event.HIDE);\n $(this._element).trigger(hideEvent);\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n this._isShown = false;\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (transition) {\n this._isTransitioning = true;\n }\n\n this._setEscapeEvent();\n\n this._setResizeEvent();\n\n $(document).off(Event.FOCUSIN);\n $(this._element).removeClass(ClassName.SHOW);\n $(this._element).off(Event.CLICK_DISMISS);\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n $(this._element).one(Util.TRANSITION_END, function (event) {\n return _this2._hideModal(event);\n }).emulateTransitionEnd(transitionDuration);\n } else {\n this._hideModal();\n }\n };\n\n _proto.dispose = function dispose() {\n [window, this._element, this._dialog].forEach(function (htmlElement) {\n return $(htmlElement).off(EVENT_KEY);\n });\n /**\n * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `Event.CLICK_DATA_API` event that should remain\n */\n\n $(document).off(Event.FOCUSIN);\n $.removeData(this._element, DATA_KEY);\n this._config = null;\n this._element = null;\n this._dialog = null;\n this._backdrop = null;\n this._isShown = null;\n this._isBodyOverflowing = null;\n this._ignoreBackdropClick = null;\n this._isTransitioning = null;\n this._scrollbarWidth = null;\n };\n\n _proto.handleUpdate = function handleUpdate() {\n this._adjustDialog();\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, config);\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._showElement = function _showElement(relatedTarget) {\n var _this3 = this;\n\n var transition = $(this._element).hasClass(ClassName.FADE);\n\n if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element);\n }\n\n this._element.style.display = 'block';\n\n this._element.removeAttribute('aria-hidden');\n\n this._element.setAttribute('aria-modal', true);\n\n if ($(this._dialog).hasClass(ClassName.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 var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: relatedTarget\n });\n\n var transitionComplete = function transitionComplete() {\n if (_this3._config.focus) {\n _this3._element.focus();\n }\n\n _this3._isTransitioning = false;\n $(_this3._element).trigger(shownEvent);\n };\n\n if (transition) {\n var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n } else {\n transitionComplete();\n }\n };\n\n _proto._enforceFocus = function _enforceFocus() {\n var _this4 = this;\n\n $(document).off(Event.FOCUSIN) // Guard against infinite focus loop\n .on(Event.FOCUSIN, function (event) {\n if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n _this4._element.focus();\n }\n });\n };\n\n _proto._setEscapeEvent = function _setEscapeEvent() {\n var _this5 = this;\n\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault();\n\n _this5.hide();\n }\n });\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS);\n }\n };\n\n _proto._setResizeEvent = function _setResizeEvent() {\n var _this6 = this;\n\n if (this._isShown) {\n $(window).on(Event.RESIZE, function (event) {\n return _this6.handleUpdate(event);\n });\n } else {\n $(window).off(Event.RESIZE);\n }\n };\n\n _proto._hideModal = function _hideModal() {\n var _this7 = this;\n\n this._element.style.display = 'none';\n\n this._element.setAttribute('aria-hidden', true);\n\n this._element.removeAttribute('aria-modal');\n\n this._isTransitioning = false;\n\n this._showBackdrop(function () {\n $(document.body).removeClass(ClassName.OPEN);\n\n _this7._resetAdjustments();\n\n _this7._resetScrollbar();\n\n $(_this7._element).trigger(Event.HIDDEN);\n });\n };\n\n _proto._removeBackdrop = function _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove();\n this._backdrop = null;\n }\n };\n\n _proto._showBackdrop = function _showBackdrop(callback) {\n var _this8 = this;\n\n var animate = $(this._element).hasClass(ClassName.FADE) ? 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 $(this._element).on(Event.CLICK_DISMISS, function (event) {\n if (_this8._ignoreBackdropClick) {\n _this8._ignoreBackdropClick = false;\n return;\n }\n\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (_this8._config.backdrop === 'static') {\n _this8._element.focus();\n } else {\n _this8.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 var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW);\n\n var callbackRemove = function callbackRemove() {\n _this8._removeBackdrop();\n\n if (callback) {\n callback();\n }\n };\n\n if ($(this._element).hasClass(ClassName.FADE)) {\n var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n } else {\n callbackRemove();\n }\n } else if (callback) {\n callback();\n }\n } // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n ;\n\n _proto._adjustDialog = function _adjustDialog() {\n var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n }\n };\n\n _proto._resetAdjustments = function _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n };\n\n _proto._checkScrollbar = function _checkScrollbar() {\n var rect = document.body.getBoundingClientRect();\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n this._scrollbarWidth = this._getScrollbarWidth();\n };\n\n _proto._setScrollbar = function _setScrollbar() {\n var _this9 = this;\n\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding\n\n $(fixedContent).each(function (index, element) {\n var actualPadding = element.style.paddingRight;\n var calculatedPadding = $(element).css('padding-right');\n $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n }); // Adjust sticky content margin\n\n $(stickyContent).each(function (index, element) {\n var actualMargin = element.style.marginRight;\n var calculatedMargin = $(element).css('margin-right');\n $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n }); // Adjust body padding\n\n var actualPadding = document.body.style.paddingRight;\n var calculatedPadding = $(document.body).css('padding-right');\n $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n }\n\n $(document.body).addClass(ClassName.OPEN);\n };\n\n _proto._resetScrollbar = function _resetScrollbar() {\n // Restore fixed content padding\n var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));\n $(fixedContent).each(function (index, element) {\n var padding = $(element).data('padding-right');\n $(element).removeData('padding-right');\n element.style.paddingRight = padding ? padding : '';\n }); // Restore sticky content\n\n var elements = [].slice.call(document.querySelectorAll(\"\" + Selector.STICKY_CONTENT));\n $(elements).each(function (index, element) {\n var margin = $(element).data('margin-right');\n\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right');\n }\n }); // Restore body padding\n\n var padding = $(document.body).data('padding-right');\n $(document.body).removeData('padding-right');\n document.body.style.paddingRight = padding ? padding : '';\n };\n\n _proto._getScrollbarWidth = function _getScrollbarWidth() {\n // thx d.walsh\n var scrollDiv = document.createElement('div');\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n } // Static\n ;\n\n Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {});\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\n data[config](relatedTarget);\n } else if (_config.show) {\n data.show(relatedTarget);\n }\n });\n };\n\n _createClass(Modal, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return Modal;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n var _this10 = this;\n\n var target;\n var selector = Util.getSelectorFromElement(this);\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault();\n }\n\n var $target = $(target).one(Event.SHOW, function (showEvent) {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return;\n }\n\n $target.one(Event.HIDDEN, function () {\n if ($(_this10).is(':visible')) {\n _this10.focus();\n }\n });\n });\n\n Modal._jQueryInterface.call($(target), config, this);\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface;\n $.fn[NAME].Constructor = Modal;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Modal._jQueryInterface;\n };\n\n return Modal;\n\n}));\n//# sourceMappingURL=modal.js.map\n","/*!\n * Bootstrap popover.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./tooltip.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './tooltip.js'], factory) :\n (global = global || self, global.Popover = factory(global.jQuery, global.Tooltip));\n}(this, function ($, Tooltip) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Tooltip = Tooltip && Tooltip.hasOwnProperty('default') ? Tooltip['default'] : Tooltip;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'popover';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.popover';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-popover';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n\n var Default = _objectSpread({}, Tooltip.Default, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n });\n\n var DefaultType = _objectSpread({}, Tooltip.DefaultType, {\n content: '(string|element|function)'\n });\n\n var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TITLE: '.popover-header',\n CONTENT: '.popover-body'\n };\n var 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 * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Popover =\n /*#__PURE__*/\n function (_Tooltip) {\n _inheritsLoose(Popover, _Tooltip);\n\n function Popover() {\n return _Tooltip.apply(this, arguments) || this;\n }\n\n var _proto = Popover.prototype;\n\n // Overrides\n _proto.isWithContent = function isWithContent() {\n return this.getTitle() || this._getContent();\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n\n var content = this._getContent();\n\n if (typeof content === 'function') {\n content = content.call(this.element);\n }\n\n this.setElementContent($tip.find(Selector.CONTENT), content);\n $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n } // Private\n ;\n\n _proto._getContent = function _getContent() {\n return this.element.getAttribute('data-content') || this.config.content;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''));\n }\n } // Static\n ;\n\n Popover._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' ? config : null;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Popover(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Popover, null, [{\n key: \"VERSION\",\n // Getters\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Popover;\n }(Tooltip);\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Popover._jQueryInterface;\n $.fn[NAME].Constructor = Popover;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Popover._jQueryInterface;\n };\n\n return Popover;\n\n}));\n//# sourceMappingURL=popover.js.map\n","/*!\n * Bootstrap scrollspy.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.ScrollSpy = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'scrollspy';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.scrollspy';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var Default = {\n offset: 10,\n method: 'auto',\n target: ''\n };\n var DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n };\n var Event = {\n ACTIVATE: \"activate\" + EVENT_KEY,\n SCROLL: \"scroll\" + EVENT_KEY,\n LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n };\n var ClassName = {\n DROPDOWN_ITEM: 'dropdown-item',\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active'\n };\n var 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 var OffsetMethod = {\n OFFSET: 'offset',\n POSITION: 'position'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var ScrollSpy =\n /*#__PURE__*/\n function () {\n function ScrollSpy(element, config) {\n var _this = this;\n\n this._element = element;\n this._scrollElement = element.tagName === 'BODY' ? window : element;\n this._config = this._getConfig(config);\n this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n this._offsets = [];\n this._targets = [];\n this._activeTarget = null;\n this._scrollHeight = 0;\n $(this._scrollElement).on(Event.SCROLL, function (event) {\n return _this._process(event);\n });\n this.refresh();\n\n this._process();\n } // Getters\n\n\n var _proto = ScrollSpy.prototype;\n\n // Public\n _proto.refresh = function refresh() {\n var _this2 = this;\n\n var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n this._offsets = [];\n this._targets = [];\n this._scrollHeight = this._getScrollHeight();\n var targets = [].slice.call(document.querySelectorAll(this._selector));\n targets.map(function (element) {\n var target;\n var targetSelector = Util.getSelectorFromElement(element);\n\n if (targetSelector) {\n target = document.querySelector(targetSelector);\n }\n\n if (target) {\n var targetBCR = target.getBoundingClientRect();\n\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n }\n }\n\n return null;\n }).filter(function (item) {\n return item;\n }).sort(function (a, b) {\n return a[0] - b[0];\n }).forEach(function (item) {\n _this2._offsets.push(item[0]);\n\n _this2._targets.push(item[1]);\n });\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n $(this._scrollElement).off(EVENT_KEY);\n this._element = null;\n this._scrollElement = null;\n this._config = null;\n this._selector = null;\n this._offsets = null;\n this._targets = null;\n this._activeTarget = null;\n this._scrollHeight = null;\n } // Private\n ;\n\n _proto._getConfig = function _getConfig(config) {\n config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});\n\n if (typeof config.target !== 'string') {\n var id = $(config.target).attr('id');\n\n if (!id) {\n id = Util.getUID(NAME);\n $(config.target).attr('id', id);\n }\n\n config.target = \"#\" + id;\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType);\n return config;\n };\n\n _proto._getScrollTop = function _getScrollTop() {\n return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n };\n\n _proto._getScrollHeight = function _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n };\n\n _proto._getOffsetHeight = function _getOffsetHeight() {\n return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n };\n\n _proto._process = function _process() {\n var scrollTop = this._getScrollTop() + this._config.offset;\n\n var scrollHeight = this._getScrollHeight();\n\n var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh();\n }\n\n if (scrollTop >= maxScroll) {\n var target = this._targets[this._targets.length - 1];\n\n if (this._activeTarget !== target) {\n this._activate(target);\n }\n\n return;\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null;\n\n this._clear();\n\n return;\n }\n\n var offsetLength = this._offsets.length;\n\n for (var i = offsetLength; i--;) {\n var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n if (isActiveTarget) {\n this._activate(this._targets[i]);\n }\n }\n };\n\n _proto._activate = function _activate(target) {\n this._activeTarget = target;\n\n this._clear();\n\n var queries = this._selector.split(',').map(function (selector) {\n return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n });\n\n var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n if ($link.hasClass(ClassName.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); // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n });\n };\n\n _proto._clear = function _clear() {\n [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n return node.classList.contains(ClassName.ACTIVE);\n }).forEach(function (node) {\n return node.classList.remove(ClassName.ACTIVE);\n });\n } // Static\n ;\n\n ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _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\n data[config]();\n }\n });\n };\n\n _createClass(ScrollSpy, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }]);\n\n return ScrollSpy;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(window).on(Event.LOAD_DATA_API, function () {\n var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));\n var scrollSpysLength = scrollSpys.length;\n\n for (var i = scrollSpysLength; i--;) {\n var $spy = $(scrollSpys[i]);\n\n ScrollSpy._jQueryInterface.call($spy, $spy.data());\n }\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = ScrollSpy._jQueryInterface;\n $.fn[NAME].Constructor = ScrollSpy;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return ScrollSpy._jQueryInterface;\n };\n\n return ScrollSpy;\n\n}));\n//# sourceMappingURL=scrollspy.js.map\n","/*!\n * Bootstrap tab.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :\n (global = global || self, global.Tab = factory(global.jQuery, global.Util));\n}(this, function ($, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'tab';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.tab';\n var EVENT_KEY = \".\" + DATA_KEY;\n var DATA_API_KEY = '.data-api';\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var 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 var ClassName = {\n DROPDOWN_MENU: 'dropdown-menu',\n ACTIVE: 'active',\n DISABLED: 'disabled',\n FADE: 'fade',\n SHOW: 'show'\n };\n var 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 * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tab =\n /*#__PURE__*/\n function () {\n function Tab(element) {\n this._element = element;\n } // Getters\n\n\n var _proto = Tab.prototype;\n\n // Public\n _proto.show = function show() {\n var _this = this;\n\n if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {\n return;\n }\n\n var target;\n var previous;\n var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n var selector = Util.getSelectorFromElement(this._element);\n\n if (listElement) {\n var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n previous = $.makeArray($(listElement).find(itemSelector));\n previous = previous[previous.length - 1];\n }\n\n var hideEvent = $.Event(Event.HIDE, {\n relatedTarget: this._element\n });\n var 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() || hideEvent.isDefaultPrevented()) {\n return;\n }\n\n if (selector) {\n target = document.querySelector(selector);\n }\n\n this._activate(this._element, listElement);\n\n var complete = function complete() {\n var hiddenEvent = $.Event(Event.HIDDEN, {\n relatedTarget: _this._element\n });\n var shownEvent = $.Event(Event.SHOWN, {\n relatedTarget: previous\n });\n $(previous).trigger(hiddenEvent);\n $(_this._element).trigger(shownEvent);\n };\n\n if (target) {\n this._activate(target, target.parentNode, complete);\n } else {\n complete();\n }\n };\n\n _proto.dispose = function dispose() {\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n } // Private\n ;\n\n _proto._activate = function _activate(element, container, callback) {\n var _this2 = this;\n\n var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector.ACTIVE_UL) : $(container).children(Selector.ACTIVE);\n var active = activeElements[0];\n var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);\n\n var complete = function complete() {\n return _this2._transitionComplete(element, active, callback);\n };\n\n if (active && isTransitioning) {\n var transitionDuration = Util.getTransitionDurationFromElement(active);\n $(active).removeClass(ClassName.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n };\n\n _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(ClassName.ACTIVE);\n var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[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\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 var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];\n\n if (dropdownElement) {\n var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));\n $(dropdownToggleList).addClass(ClassName.ACTIVE);\n }\n\n element.setAttribute('aria-expanded', true);\n }\n\n if (callback) {\n callback();\n }\n } // Static\n ;\n\n Tab._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data(DATA_KEY);\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\n data[config]();\n }\n });\n };\n\n _createClass(Tab, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }]);\n\n return Tab;\n }();\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault();\n\n Tab._jQueryInterface.call($(this), 'show');\n });\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tab._jQueryInterface;\n $.fn[NAME].Constructor = Tab;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tab._jQueryInterface;\n };\n\n return Tab;\n\n}));\n//# sourceMappingURL=tab.js.map\n","/*!\n * Bootstrap tooltip.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :\n typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :\n (global = global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util));\n}(this, function ($, Popper, Util) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\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 var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n };\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase();\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n }\n\n return true;\n }\n\n var regExp = allowedAttributeList.filter(function (attrRegex) {\n return attrRegex instanceof RegExp;\n }); // Check if a regular expression validates the attribute.\n\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true;\n }\n }\n\n return false;\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml;\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml);\n }\n\n var domParser = new window.DOMParser();\n var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n var whitelistKeys = Object.keys(whiteList);\n var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n var _loop = function _loop(i, len) {\n var el = elements[i];\n var elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el);\n return \"continue\";\n }\n\n var attributeList = [].slice.call(el.attributes);\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n attributeList.forEach(function (attr) {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n });\n };\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var _ret = _loop(i, len);\n\n if (_ret === \"continue\") continue;\n }\n\n return createdDocument.body.innerHTML;\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n var NAME = 'tooltip';\n var VERSION = '4.3.1';\n var DATA_KEY = 'bs.tooltip';\n var EVENT_KEY = \".\" + DATA_KEY;\n var JQUERY_NO_CONFLICT = $.fn[NAME];\n var CLASS_PREFIX = 'bs-tooltip';\n var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n var DefaultType = {\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 var AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n };\n var Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist\n };\n var HoverState = {\n SHOW: 'show',\n OUT: 'out'\n };\n var 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 var ClassName = {\n FADE: 'fade',\n SHOW: 'show'\n };\n var Selector = {\n TOOLTIP: '.tooltip',\n TOOLTIP_INNER: '.tooltip-inner',\n ARROW: '.arrow'\n };\n var Trigger = {\n HOVER: 'hover',\n FOCUS: 'focus',\n CLICK: 'click',\n MANUAL: 'manual'\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n };\n\n var Tooltip =\n /*#__PURE__*/\n function () {\n function Tooltip(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 } // private\n\n\n this._isEnabled = true;\n this._timeout = 0;\n this._hoverState = '';\n this._activeTrigger = {};\n this._popper = null; // Protected\n\n this.element = element;\n this.config = this._getConfig(config);\n this.tip = null;\n\n this._setListeners();\n } // Getters\n\n\n var _proto = Tooltip.prototype;\n\n // Public\n _proto.enable = function enable() {\n this._isEnabled = true;\n };\n\n _proto.disable = function disable() {\n this._isEnabled = false;\n };\n\n _proto.toggleEnabled = function toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n };\n\n _proto.toggle = function toggle(event) {\n if (!this._isEnabled) {\n return;\n }\n\n if (event) {\n var dataKey = this.constructor.DATA_KEY;\n var context = $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n context._activeTrigger.click = !context._activeTrigger.click;\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context);\n } else {\n context._leave(null, context);\n }\n } else {\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this);\n\n return;\n }\n\n this._enter(null, this);\n }\n };\n\n _proto.dispose = function dispose() {\n clearTimeout(this._timeout);\n $.removeData(this.element, this.constructor.DATA_KEY);\n $(this.element).off(this.constructor.EVENT_KEY);\n $(this.element).closest('.modal').off('hide.bs.modal');\n\n if (this.tip) {\n $(this.tip).remove();\n }\n\n this._isEnabled = null;\n this._timeout = null;\n this._hoverState = null;\n this._activeTrigger = null;\n\n if (this._popper !== 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 _proto.show = function show() {\n var _this = this;\n\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements');\n }\n\n var showEvent = $.Event(this.constructor.Event.SHOW);\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent);\n var shadowRoot = Util.findShadowRoot(this.element);\n var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return;\n }\n\n var tip = this.getTipElement();\n var tipId = Util.getUID(this.constructor.NAME);\n tip.setAttribute('id', tipId);\n this.element.setAttribute('aria-describedby', tipId);\n this.setContent();\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE);\n }\n\n var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n var attachment = this._getAttachment(placement);\n\n this.addAttachmentClass(attachment);\n\n var container = this._getContainer();\n\n $(tip).data(this.constructor.DATA_KEY, this);\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container);\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED);\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: function onCreate(data) {\n if (data.originalPlacement !== data.placement) {\n _this._handlePopperPlacementChange(data);\n }\n },\n onUpdate: function onUpdate(data) {\n return _this._handlePopperPlacementChange(data);\n }\n });\n $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop);\n }\n\n var complete = function complete() {\n if (_this.config.animation) {\n _this._fixTransition();\n }\n\n var prevHoverState = _this._hoverState;\n _this._hoverState = null;\n $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n if (prevHoverState === HoverState.OUT) {\n _this._leave(null, _this);\n }\n };\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n }\n };\n\n _proto.hide = function hide(callback) {\n var _this2 = this;\n\n var tip = this.getTipElement();\n var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n var complete = function complete() {\n if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip);\n }\n\n _this2._cleanTipClass();\n\n _this2.element.removeAttribute('aria-describedby');\n\n $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n if (_this2._popper !== null) {\n _this2._popper.destroy();\n }\n\n if (callback) {\n callback();\n }\n };\n\n $(this.element).trigger(hideEvent);\n\n if (hideEvent.isDefaultPrevented()) {\n return;\n }\n\n $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop);\n }\n\n this._activeTrigger[Trigger.CLICK] = false;\n this._activeTrigger[Trigger.FOCUS] = false;\n this._activeTrigger[Trigger.HOVER] = false;\n\n if ($(this.tip).hasClass(ClassName.FADE)) {\n var transitionDuration = Util.getTransitionDurationFromElement(tip);\n $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n } else {\n complete();\n }\n\n this._hoverState = '';\n };\n\n _proto.update = function update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate();\n }\n } // Protected\n ;\n\n _proto.isWithContent = function isWithContent() {\n return Boolean(this.getTitle());\n };\n\n _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n };\n\n _proto.getTipElement = function getTipElement() {\n this.tip = this.tip || $(this.config.template)[0];\n return this.tip;\n };\n\n _proto.setContent = function setContent() {\n var tip = this.getTipElement();\n this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());\n $(tip).removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n };\n\n _proto.setElementContent = function setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content);\n }\n } else {\n $element.text($(content).text());\n }\n\n return;\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n }\n\n $element.html(content);\n } else {\n $element.text(content);\n }\n };\n\n _proto.getTitle = function getTitle() {\n var title = this.element.getAttribute('data-original-title');\n\n if (!title) {\n title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n }\n\n return title;\n } // Private\n ;\n\n _proto._getOffset = function _getOffset() {\n var _this3 = this;\n\n var offset = {};\n\n if (typeof this.config.offset === 'function') {\n offset.fn = function (data) {\n data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n return data;\n };\n } else {\n offset.offset = this.config.offset;\n }\n\n return offset;\n };\n\n _proto._getContainer = function _getContainer() {\n if (this.config.container === false) {\n return document.body;\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container);\n }\n\n return $(document).find(this.config.container);\n };\n\n _proto._getAttachment = function _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()];\n };\n\n _proto._setListeners = function _setListeners() {\n var _this4 = this;\n\n var triggers = this.config.trigger.split(' ');\n triggers.forEach(function (trigger) {\n if (trigger === 'click') {\n $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n return _this4.toggle(event);\n });\n } else if (trigger !== Trigger.MANUAL) {\n var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n return _this4._enter(event);\n }).on(eventOut, _this4.config.selector, function (event) {\n return _this4._leave(event);\n });\n }\n });\n $(this.element).closest('.modal').on('hide.bs.modal', function () {\n if (_this4.element) {\n _this4.hide();\n }\n });\n\n if (this.config.selector) {\n this.config = _objectSpread({}, this.config, {\n trigger: 'manual',\n selector: ''\n });\n } else {\n this._fixTitle();\n }\n };\n\n _proto._fixTitle = function _fixTitle() {\n var titleType = typeof this.element.getAttribute('data-original-title');\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n this.element.setAttribute('title', '');\n }\n };\n\n _proto._enter = function _enter(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW;\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.SHOW;\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.SHOW) {\n context.show();\n }\n }, context.config.delay.show);\n };\n\n _proto._leave = function _leave(event, context) {\n var dataKey = this.constructor.DATA_KEY;\n context = context || $(event.currentTarget).data(dataKey);\n\n if (!context) {\n context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n $(event.currentTarget).data(dataKey, context);\n }\n\n if (event) {\n context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n }\n\n if (context._isWithActiveTrigger()) {\n return;\n }\n\n clearTimeout(context._timeout);\n context._hoverState = HoverState.OUT;\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide();\n return;\n }\n\n context._timeout = setTimeout(function () {\n if (context._hoverState === HoverState.OUT) {\n context.hide();\n }\n }, context.config.delay.hide);\n };\n\n _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true;\n }\n }\n\n return false;\n };\n\n _proto._getConfig = function _getConfig(config) {\n var dataAttributes = $(this.element).data();\n Object.keys(dataAttributes).forEach(function (dataAttr) {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr];\n }\n });\n config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n\n Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n }\n\n return config;\n };\n\n _proto._getDelegateConfig = function _getDelegateConfig() {\n var config = {};\n\n if (this.config) {\n for (var key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key];\n }\n }\n }\n\n return config;\n };\n\n _proto._cleanTipClass = function _cleanTipClass() {\n var $tip = $(this.getTipElement());\n var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''));\n }\n };\n\n _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n var popperInstance = popperData.instance;\n this.tip = popperInstance.popper;\n\n this._cleanTipClass();\n\n this.addAttachmentClass(this._getAttachment(popperData.placement));\n };\n\n _proto._fixTransition = function _fixTransition() {\n var tip = this.getTipElement();\n var initConfigAnimation = this.config.animation;\n\n if (tip.getAttribute('x-placement') !== null) {\n return;\n }\n\n $(tip).removeClass(ClassName.FADE);\n this.config.animation = false;\n this.hide();\n this.show();\n this.config.animation = initConfigAnimation;\n } // Static\n ;\n\n Tooltip._jQueryInterface = function _jQueryInterface(config) {\n return this.each(function () {\n var data = $(this).data(DATA_KEY);\n\n var _config = typeof config === 'object' && config;\n\n if (!data && /dispose|hide/.test(config)) {\n return;\n }\n\n if (!data) {\n data = new Tooltip(this, _config);\n $(this).data(DATA_KEY, data);\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n }\n\n data[config]();\n }\n });\n };\n\n _createClass(Tooltip, null, [{\n key: \"VERSION\",\n get: function get() {\n return VERSION;\n }\n }, {\n key: \"Default\",\n get: function get() {\n return Default;\n }\n }, {\n key: \"NAME\",\n get: function get() {\n return NAME;\n }\n }, {\n key: \"DATA_KEY\",\n get: function get() {\n return DATA_KEY;\n }\n }, {\n key: \"Event\",\n get: function get() {\n return Event;\n }\n }, {\n key: \"EVENT_KEY\",\n get: function get() {\n return EVENT_KEY;\n }\n }, {\n key: \"DefaultType\",\n get: function get() {\n return DefaultType;\n }\n }]);\n\n return Tooltip;\n }();\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n\n $.fn[NAME] = Tooltip._jQueryInterface;\n $.fn[NAME].Constructor = Tooltip;\n\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return Tooltip._jQueryInterface;\n };\n\n return Tooltip;\n\n}));\n//# sourceMappingURL=tooltip.js.map\n","/*!\n * Bootstrap util.js v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :\n typeof define === 'function' && define.amd ? define(['jquery'], factory) :\n (global = global || self, global.Util = factory(global.jQuery));\n}(this, function ($) { 'use strict';\n\n $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\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 /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n var TRANSITION_END = 'transitionend';\n var MAX_UID = 1000000;\n var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle: function handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n }\n\n return undefined; // eslint-disable-line no-undefined\n }\n };\n }\n\n function transitionEndEmulator(duration) {\n var _this = this;\n\n var called = false;\n $(this).one(Util.TRANSITION_END, function () {\n called = true;\n });\n setTimeout(function () {\n if (!called) {\n Util.triggerTransitionEnd(_this);\n }\n }, duration);\n return this;\n }\n\n function setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator;\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n }\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\n var Util = {\n TRANSITION_END: 'bsTransitionEnd',\n getUID: function getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix));\n\n return prefix;\n },\n getSelectorFromElement: function getSelectorFromElement(element) {\n var selector = element.getAttribute('data-target');\n\n if (!selector || selector === '#') {\n var hrefAttr = element.getAttribute('href');\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n }\n\n try {\n return document.querySelector(selector) ? selector : null;\n } catch (err) {\n return null;\n }\n },\n getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n if (!element) {\n return 0;\n } // Get transition-duration of the element\n\n\n var transitionDuration = $(element).css('transition-duration');\n var transitionDelay = $(element).css('transition-delay');\n var floatTransitionDuration = parseFloat(transitionDuration);\n var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n } // If multiple durations are defined, take the first\n\n\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n },\n reflow: function reflow(element) {\n return element.offsetHeight;\n },\n triggerTransitionEnd: function triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END);\n },\n // TODO: Remove in v5\n supportsTransitionEnd: function supportsTransitionEnd() {\n return Boolean(TRANSITION_END);\n },\n isElement: function isElement(obj) {\n return (obj[0] || obj).nodeType;\n },\n typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n for (var property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n var expectedTypes = configTypes[property];\n var value = config[property];\n var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n }\n }\n }\n },\n findShadowRoot: function findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null;\n } // Can find the shadow root otherwise it'll return the document\n\n\n if (typeof element.getRootNode === 'function') {\n var root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n\n if (element instanceof ShadowRoot) {\n return element;\n } // when we don't find a shadow root\n\n\n if (!element.parentNode) {\n return null;\n }\n\n return Util.findShadowRoot(element.parentNode);\n }\n };\n setTransitionEndSupport();\n\n return Util;\n\n}));\n//# sourceMappingURL=util.js.map\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = \"./node_modules/font-awesome sync \\\\.(otf|eot|svg|ttf|woff|woff2)$\";","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","(function(factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery', 'hammerjs'], factory);\r\n } else if (typeof exports === 'object') {\r\n factory(require('jquery'), require('hammerjs'));\r\n } else {\r\n factory(jQuery, Hammer);\r\n }\r\n}(function($, Hammer) {\r\n function hammerify(el, options) {\r\n var $el = $(el);\r\n if(!$el.data(\"hammer\")) {\r\n $el.data(\"hammer\", new Hammer($el[0], options));\r\n }\r\n }\r\n\r\n $.fn.hammer = function(options) {\r\n return this.each(function() {\r\n hammerify(this, options);\r\n });\r\n };\r\n\r\n // extend the emit method to also trigger jQuery events\r\n Hammer.Manager.prototype.emit = (function(originalEmit) {\r\n return function(type, data) {\r\n originalEmit.call(this, type, data);\r\n $(this.element).trigger({\r\n type: type,\r\n gesture: data\r\n });\r\n };\r\n })(Hammer.Manager.prototype.emit);\r\n}));\r\n","/*!\n * hoverIntent v1.10.1 // 2019.10.05 // jQuery v1.7.0+\n * http://briancherne.github.io/jquery-hoverIntent/\n *\n * You may use hoverIntent under the terms of the MIT license. Basically that\n * means you are free to use hoverIntent as long as this header is left intact.\n * Copyright 2007-2019 Brian Cherne\n */\n\n/**\n * hoverIntent is similar to jQuery's built-in \"hover\" method except that\n * instead of firing the handlerIn function immediately, hoverIntent checks\n * to see if the user's mouse has slowed down (beneath the sensitivity\n * threshold) before firing the event. The handlerOut function is only\n * called after a matching handlerIn.\n *\n * // basic usage ... just like .hover()\n * .hoverIntent( handlerIn, handlerOut )\n * .hoverIntent( handlerInOut )\n *\n * // basic usage ... with event delegation!\n * .hoverIntent( handlerIn, handlerOut, selector )\n * .hoverIntent( handlerInOut, selector )\n *\n * // using a basic configuration object\n * .hoverIntent( config )\n *\n * @param handlerIn function OR configuration object\n * @param handlerOut function OR selector for delegation OR undefined\n * @param selector selector OR undefined\n * @author Brian Cherne <brian(at)cherne(dot)net>\n */\n\n;(function(factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = factory(require('jquery'));\n } else if (jQuery && !jQuery.fn.hoverIntent) {\n factory(jQuery);\n }\n})(function($) {\n 'use strict';\n\n // default configuration values\n var _cfg = {\n interval: 100,\n sensitivity: 6,\n timeout: 0\n };\n\n // counter used to generate an ID for each instance\n var INSTANCE_COUNT = 0;\n\n // current X and Y position of mouse, updated during mousemove tracking (shared across instances)\n var cX, cY;\n\n // saves the current pointer position coordinates based on the given mousemove event\n var track = function(ev) {\n cX = ev.pageX;\n cY = ev.pageY;\n };\n\n // compares current and previous mouse positions\n var compare = function(ev,$el,s,cfg) {\n // compare mouse positions to see if pointer has slowed enough to trigger `over` function\n if ( Math.sqrt( (s.pX-cX)*(s.pX-cX) + (s.pY-cY)*(s.pY-cY) ) < cfg.sensitivity ) {\n $el.off(s.event,track);\n delete s.timeoutId;\n // set hoverIntent state as active for this element (permits `out` handler to trigger)\n s.isActive = true;\n // overwrite old mouseenter event coordinates with most recent pointer position\n ev.pageX = cX; ev.pageY = cY;\n // clear coordinate data from state object\n delete s.pX; delete s.pY;\n return cfg.over.apply($el[0],[ev]);\n } else {\n // set previous coordinates for next comparison\n s.pX = cX; s.pY = cY;\n // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)\n s.timeoutId = setTimeout( function(){compare(ev, $el, s, cfg);} , cfg.interval );\n }\n };\n\n // triggers given `out` function at configured `timeout` after a mouseleave and clears state\n var delay = function(ev,$el,s,out) {\n var data = $el.data('hoverIntent');\n if (data) {\n delete data[s.id];\n }\n return out.apply($el[0],[ev]);\n };\n\n $.fn.hoverIntent = function(handlerIn,handlerOut,selector) {\n // instance ID, used as a key to store and retrieve state information on an element\n var instanceId = INSTANCE_COUNT++;\n\n // extend the default configuration and parse parameters\n var cfg = $.extend({}, _cfg);\n if ( $.isPlainObject(handlerIn) ) {\n cfg = $.extend(cfg, handlerIn);\n if ( !$.isFunction(cfg.out) ) {\n cfg.out = cfg.over;\n }\n } else if ( $.isFunction(handlerOut) ) {\n cfg = $.extend(cfg, { over: handlerIn, out: handlerOut, selector: selector } );\n } else {\n cfg = $.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut } );\n }\n\n // A private function for handling mouse 'hovering'\n var handleHover = function(e) {\n // cloned event to pass to handlers (copy required for event object to be passed in IE)\n var ev = $.extend({},e);\n\n // the current target of the mouse event, wrapped in a jQuery object\n var $el = $(this);\n\n // read hoverIntent data from element (or initialize if not present)\n var hoverIntentData = $el.data('hoverIntent');\n if (!hoverIntentData) { $el.data('hoverIntent', (hoverIntentData = {})); }\n\n // read per-instance state from element (or initialize if not present)\n var state = hoverIntentData[instanceId];\n if (!state) { hoverIntentData[instanceId] = state = { id: instanceId }; }\n\n // state properties:\n // id = instance ID, used to clean up data\n // timeoutId = timeout ID, reused for tracking mouse position and delaying \"out\" handler\n // isActive = plugin state, true after `over` is called just until `out` is called\n // pX, pY = previously-measured pointer coordinates, updated at each polling interval\n // event = string representing the namespaced event used for mouse tracking\n\n // clear any existing timeout\n if (state.timeoutId) { state.timeoutId = clearTimeout(state.timeoutId); }\n\n // namespaced event used to register and unregister mousemove tracking\n var mousemove = state.event = 'mousemove.hoverIntent.hoverIntent'+instanceId;\n\n // handle the event, based on its type\n if (e.type === 'mouseenter') {\n // do nothing if already active\n if (state.isActive) { return; }\n // set \"previous\" X and Y position based on initial entry point\n state.pX = ev.pageX; state.pY = ev.pageY;\n // update \"current\" X and Y position based on mousemove\n $el.off(mousemove,track).on(mousemove,track);\n // start polling interval (self-calling timeout) to compare mouse coordinates over time\n state.timeoutId = setTimeout( function(){compare(ev,$el,state,cfg);} , cfg.interval );\n } else { // \"mouseleave\"\n // do nothing if not already active\n if (!state.isActive) { return; }\n // unbind expensive mousemove event\n $el.off(mousemove,track);\n // if hoverIntent state is true, then call the mouseOut function after the specified delay\n state.timeoutId = setTimeout( function(){delay(ev,$el,state,cfg.out);} , cfg.timeout );\n }\n };\n\n // listen for mouseenter and mouseleave\n return this.on({'mouseenter.hoverIntent':handleHover,'mouseleave.hoverIntent':handleHover}, cfg.selector);\n };\n});\n","/*!\n* jquery.inputmask.bundle.js\n* https://github.com/RobinHerbots/jquery.inputmask\n* Copyright (c) 2010 - 2016 Robin Herbots\n* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)\n* Version: 3.3.4\n*/\n!function($) {\n function Inputmask(alias, options) {\n return this instanceof Inputmask ? ($.isPlainObject(alias) ? options = alias : (options = options || {}, \n options.alias = alias), this.el = void 0, this.opts = $.extend(!0, {}, this.defaults, options), \n this.maskset = void 0, this.noMasksCache = options && void 0 !== options.definitions, \n this.userOptions = options || {}, this.events = {}, this.dataAttribute = \"data-inputmask\", \n this.isRTL = this.opts.numericInput, void resolveAlias(this.opts.alias, options, this.opts)) : new Inputmask(alias, options);\n }\n function resolveAlias(aliasStr, options, opts) {\n var aliasDefinition = opts.aliases[aliasStr];\n return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), \n $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), \n !1);\n }\n function generateMaskSet(opts, nocache) {\n function generateMask(mask, metadata, opts) {\n if (null !== mask && \"\" !== mask) {\n if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = \"\"), \n opts.repeat > 0 || \"*\" === opts.repeat || \"+\" === opts.repeat) {\n var repeatStart = \"*\" === opts.repeat ? 0 : \"+\" === opts.repeat ? 1 : opts.repeat;\n mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + \",\" + opts.repeat + opts.quantifiermarker.end;\n }\n var masksetDefinition;\n return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {\n mask: mask,\n maskToken: Inputmask.prototype.analyseMask(mask, opts),\n validPositions: {},\n _buffer: void 0,\n buffer: void 0,\n tests: {},\n metadata: metadata,\n maskLength: void 0\n }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask] = masksetDefinition, \n masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split(\"\").reverse().join(\"\") : mask]), \n masksetDefinition;\n }\n }\n var ms;\n if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {\n if (opts.mask.length > 1) {\n opts.keepStatic = null === opts.keepStatic || opts.keepStatic;\n var altMask = opts.groupmarker.start;\n return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {\n altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start), \n altMask += void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask;\n }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts);\n }\n opts.mask = opts.mask.pop();\n }\n return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(opts.mask, opts.mask, opts) : generateMask(opts.mask.mask, opts.mask, opts)), \n ms;\n }\n function maskScope(actionObj, maskset, opts) {\n function getMaskTemplate(baseOnInput, minimalPos, includeMode) {\n minimalPos = minimalPos || 0;\n var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();\n maxLength = void 0 !== el ? el.maxLength : void 0, maxLength === -1 && (maxLength = void 0);\n do baseOnInput === !0 && getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(includeMode === !0 ? testPos.input : includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || \"number\" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))), \n pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || \"\" !== test.def) || minimalPos > pos);\n return \"\" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1, \n maskTemplate;\n }\n function getMaskSet() {\n return maskset;\n }\n function resetMaskSet(soft) {\n var maskset = getMaskSet();\n maskset.buffer = void 0, soft !== !0 && (maskset._buffer = void 0, maskset.validPositions = {}, \n maskset.p = 0);\n }\n function getLastValidPosition(closestTo, strict, validPositions) {\n var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;\n void 0 === closestTo && (closestTo = -1);\n for (var posNdx in valids) {\n var psNdx = parseInt(posNdx);\n valids[psNdx] && (strict || null !== valids[psNdx].match.fn) && (psNdx <= closestTo && (before = psNdx), \n psNdx >= closestTo && (after = psNdx));\n }\n return before !== -1 && closestTo - before > 1 || after < closestTo ? before : after;\n }\n function stripValidPositions(start, end, nocheck, strict) {\n function IsEnclosedStatic(pos) {\n var posMatch = getMaskSet().validPositions[pos];\n if (void 0 !== posMatch && null === posMatch.match.fn) {\n var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];\n return void 0 !== prevMatch && void 0 !== nextMatch;\n }\n return !1;\n }\n var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1;\n for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck !== !0 && (!getMaskSet().validPositions[i].match.optionality && IsEnclosedStatic(i) || opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) === !1) || delete getMaskSet().validPositions[i]);\n for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {\n for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;\n if (i < startPos && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i)) i++; else {\n var t = getTestTemplate(i);\n needsValidation === !1 && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]), \n getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i], \n i++) : positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], \n i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++;\n }\n }\n resetMaskSet(!0);\n }\n function determineTestTemplate(tests, guessNextBest) {\n for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(\",\") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], \n !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAltArr))) || guessNextBest === !0 && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ;\n return testPos;\n }\n function getTestTemplate(pos, ndxIntlzr, tstPs) {\n return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));\n }\n function getTest(pos) {\n return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0];\n }\n function positionCanMatchDefinition(pos, def) {\n for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {\n valid = !0;\n break;\n }\n return valid;\n }\n function getTests(pos, ndxIntlzr, tstPs) {\n function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {\n function handleMatch(match, loopNdx, quantifierRecurse) {\n function isFirstMatch(latestMatch, tokenGroup) {\n var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);\n return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {\n if (match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1;\n }), firstMatch;\n }\n function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {\n var bestMatch, indexPos;\n return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {\n var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation, ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;\n (void 0 === indexPos || ndxPos < indexPos) && ndxPos !== -1 && (bestMatch = lmnt, \n indexPos = ndxPos);\n }), bestMatch ? bestMatch.locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1) : void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0;\n }\n function staticCanMatchDefinition(source, target) {\n return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1);\n }\n if (testPos > 1e4) 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 if (testPos === pos && void 0 === match.matches) return matches.push({\n match: match,\n locator: loopNdx.reverse(),\n cd: cacheDependency\n }), !0;\n if (void 0 !== match.matches) {\n if (match.isGroup && quantifierRecurse !== match) {\n if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;\n } else if (match.isOptional) {\n var optionalToken = match;\n if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {\n if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;\n insertStop = !0, testPos = pos;\n }\n } else if (match.isAlternator) {\n var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;\n if (altIndex === -1 || \"string\" == typeof altIndex) {\n var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];\n if (\"string\" == typeof altIndex) altIndexArr = altIndex.split(\",\"); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);\n for (var ndx = 0; ndx < altIndexArr.length; ndx++) {\n if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(), \n match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, \n match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {\n var ntndx = $.inArray(match, maskToken.matches) + 1;\n maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), \n match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {\n lmnt.alternation = loopNdx.length - 1;\n })));\n }\n maltMatches = matches.slice(), testPos = currentPos, matches = [];\n for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {\n var altMatch = maltMatches[ndx1], hasMatch = !1;\n altMatch.alternation = altMatch.alternation || loopNdxCnt;\n for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {\n var altMatch2 = malternateMatches[ndx2];\n if ((\"string\" != typeof altIndex || $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1) && (altMatch.match.def === altMatch2.match.def || staticCanMatchDefinition(altMatch, altMatch2))) {\n hasMatch = altMatch.match.nativeDef === altMatch2.match.nativeDef, altMatch.alternation == altMatch2.alternation && altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + \",\" + altMatch.locator[altMatch.alternation], \n altMatch2.alternation = altMatch.alternation, null == altMatch.match.fn && (altMatch2.na = altMatch2.na || altMatch.locator[altMatch.alternation].toString(), \n altMatch2.na.indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.na = altMatch2.na + \",\" + altMatch.locator[altMatch.alternation])));\n break;\n }\n }\n hasMatch || malternateMatches.push(altMatch);\n }\n }\n \"string\" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {\n if (isFinite(ndx)) {\n var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(\",\");\n lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;\n for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = $.inArray(altLocArr[alndx], altIndexArr) !== -1, \n mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += \",\", \n lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), \n lmnt.alternation = alternation);\n if (void 0 !== lmnt.locator[alternation]) return lmnt;\n }\n })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0, \n ndxInitializer = ndxInitializerClone.slice();\n } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);\n if (match) return !0;\n } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, 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 if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {\n if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, \n isFirstMatch(latestMatch, tokenGroup)) {\n if (qndx > qt.quantifier.min - 1) {\n insertStop = !0, testPos = pos;\n break;\n }\n return !0;\n }\n return !0;\n }\n } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;\n } else testPos++;\n }\n for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {\n var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);\n if (match && testPos === pos) return match;\n if (testPos > pos) break;\n }\n }\n function mergeLocators(tests) {\n var locator = [];\n return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (void 0 === tests[0].alternation ? (locator = determineTestTemplate(tests.slice()).locator.slice(), \n 0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) {\n if (\"\" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1 && (locator[i] += \",\" + tst.locator[i]);\n })), locator;\n }\n function filterTests(tests) {\n return opts.keepStatic && pos > 0 && tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0) && tests[0].match.optionality !== !0 && tests[0].match.optionalQuantifier !== !0 && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def) ? [ determineTestTemplate(tests) ] : tests;\n }\n var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join(\"\") : \"\";\n if (pos > -1) {\n if (void 0 === ndxIntlzr) {\n for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--;\n void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(\"\"), \n testPos = previousPos);\n }\n if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]);\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) break;\n }\n }\n return (0 === matches.length || insertStop) && matches.push({\n match: {\n fn: null,\n cardinality: 0,\n optionality: !0,\n casing: null,\n def: \"\",\n placeholder: \"\"\n },\n locator: [],\n cd: cacheDependency\n }), void 0 !== ndxIntlzr && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches), \n filterTests(getMaskSet().tests[pos]));\n }\n function getBufferTemplate() {\n return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1), \n void 0 === getMaskSet().buffer && getMaskSet()._buffer.slice()), getMaskSet()._buffer;\n }\n function getBuffer(noCache) {\n return void 0 !== getMaskSet().buffer && noCache !== !0 || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), \n getMaskSet().buffer;\n }\n function refreshFromBuffer(start, end, buffer) {\n var i;\n if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i];\n for (i = start; i < end; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);\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 elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();\n }\n return elem;\n }\n function checkAlternationMatch(altArr1, altArr2) {\n for (var altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, alndx = 0; alndx < altArr1.length; alndx++) if ($.inArray(altArr1[alndx], altArrC) !== -1) {\n isMatch = !0;\n break;\n }\n return isMatch;\n }\n function isValid(pos, c, strict, fromSetValid, fromAlternate) {\n function isSelection(posObj) {\n var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode;\n return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? \"full\" : selection;\n }\n function _isValid(position, c, strict) {\n var rslt = !1;\n return $.each(getTests(position), function(ndx, tst) {\n for (var test = tst.match, loopend = c ? 1 : 0, chrs = \"\", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));\n if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && \"\" !== test.def && {\n c: test.placeholder || test.def,\n pos: position\n }, rslt !== !1) {\n var elem = void 0 !== rslt.c ? rslt.c : c;\n elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? test.placeholder || test.def : elem;\n var validatedPos = position, possibleModifiedBuffer = getBuffer();\n if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), \n $.each(rslt.remove.sort(function(a, b) {\n return b - a;\n }), function(ndx, lmnt) {\n stripValidPositions(lmnt, lmnt + 1, !0);\n })), void 0 !== rslt.insert && ($.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, !0, fromSetValid);\n })), rslt.refreshFromBuffer) {\n var refresh = rslt.refreshFromBuffer;\n if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), \n void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), \n !1;\n if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), \n !1;\n } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, \n refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), \n !1;\n return (rslt === !0 || void 0 !== rslt.pos || void 0 !== rslt.c) && (ndx > 0 && resetMaskSet(!0), \n setValidPosition(validatedPos, $.extend({}, tst, {\n input: casing(elem, test, validatedPos)\n }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);\n }\n }), rslt;\n }\n function alternate(pos, c, strict) {\n var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition();\n for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if (altPos = getMaskSet().validPositions[lAltPos], \n altPos && void 0 !== altPos.alternation) {\n if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation, \n prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break;\n prevAltPos = altPos;\n }\n if (void 0 !== alternation) {\n decisionPos = parseInt(lastAlt);\n var decisionTaker = void 0 !== prevAltPos.locator[prevAltPos.alternation || alternation] ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0];\n decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(\",\")[0]);\n var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1];\n $.each(getTests(decisionPos, prevPos ? prevPos.locator : void 0, decisionPos - 1), function(ndx, test) {\n altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(\",\") : [];\n for (var mndx = 0; mndx < altNdxs.length; mndx++) {\n var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1;\n if (decisionTaker < altNdxs[mndx] && (void 0 === test.na || $.inArray(altNdxs[mndx], test.na.split(\",\")) === -1)) {\n getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test);\n var possibilities = getMaskSet().validPositions[decisionPos].locator;\n for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]), \n null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0, \n possibilityPos.generatedInput !== !0 && validInputs.push(possibilityPos.input)), \n staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def), \n getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input, \n i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], \n validPos && validPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++, \n delete getMaskSet().validPositions[i];\n for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(), \n resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) {\n var input = validInputs.shift();\n if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid, !0))) break;\n }\n if (isValidRslt) {\n getMaskSet().validPositions[decisionPos].locator = possibilities;\n var targetLvp = getLastValidPosition(pos) + 1;\n for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], \n (void 0 === validPos || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++;\n pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0);\n }\n if (isValidRslt) return !1;\n resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);\n }\n }\n });\n }\n return isValidRslt;\n }\n function trackbackAlternations(originalPos, newPos) {\n var vp = getMaskSet().validPositions[newPos];\n if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) {\n var tests = getTests(ps), bestMatch = tests[0], equality = -1;\n $.each(tests, function(ndx, tst) {\n for (var i = 0; i < tll && (void 0 !== tst.locator[i] && checkAlternationMatch(tst.locator[i].toString().split(\",\"), targetLocator[i].toString().split(\",\"))); i++) equality < i && (equality = i, \n bestMatch = tst);\n }), setValidPosition(ps, $.extend({}, bestMatch, {\n input: bestMatch.match.placeholder || bestMatch.match.def\n }), !0);\n }\n }\n function setValidPosition(pos, validTest, fromSetValid, isSelection) {\n if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {\n var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(void 0, !0);\n for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i];\n getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);\n var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength;\n for (i = j = pos; i <= lvp; i++) {\n var t = positionsClone[i];\n if (void 0 !== t) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) {\n if (posMatch++, needsValidation === !1 && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]), \n getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch), \n j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) {\n var result = isValid(posMatch, t.input, !0, !0);\n valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, \n needsValidation = !0;\n } else valid = t.generatedInput === !0;\n if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength), \n valid) break;\n }\n if (!valid) break;\n }\n if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), \n resetMaskSet(!0), !1;\n } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);\n return resetMaskSet(!0), !0;\n }\n function fillMissingNonMask(maskPos) {\n for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;\n var testTemplate, testsFromPos;\n for (pndx++; pndx < maskPos; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice(), \n \"\" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop(), testTemplate = determineTestTemplate(testsFromPos), \n testTemplate && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && (result = _isValid(pndx, testTemplate.match.placeholder || (null == testTemplate.match.fn ? testTemplate.match.def : \"\" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0), \n result !== !1 && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0)));\n }\n strict = strict === !0;\n var maskPos = pos;\n void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);\n var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);\n if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), \n maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (result = _isValid(maskPos, c, strict), \n (!strict || fromSetValid === !0) && result === !1)) {\n var currentPosValid = getMaskSet().validPositions[maskPos];\n if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {\n if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) {\n var testsFromPos = getTests(maskPos).slice();\n \"\" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop();\n var staticChar = determineTestTemplate(testsFromPos, !0);\n staticChar && null === staticChar.match.fn && (staticChar = staticChar.match.placeholder || staticChar.match.def, \n _isValid(maskPos, staticChar, strict), getMaskSet().validPositions[maskPos].generatedInput = !0);\n for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (result = _isValid(nPos, c, strict), \n result !== !1) {\n trackbackAlternations(maskPos, void 0 !== result.pos ? result.pos : nPos), maskPos = nPos;\n break;\n }\n }\n } else result = {\n caret: seekNext(maskPos)\n };\n }\n return result === !1 && opts.keepStatic && !strict && fromAlternate !== !0 && (result = alternate(maskPos, c, strict)), \n result === !0 && (result = {\n pos: maskPos\n }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = !!opts.postValidation(getBuffer(!0), result, opts) && result), \n void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), \n getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;\n }\n function isMask(pos, strict) {\n var test;\n if (strict ? (test = getTestTemplate(pos).match, \"\" === test.def && (test = getTest(pos).match)) : test = getTest(pos).match, \n null != test.fn) return test.fn;\n if (strict !== !0 && pos > -1) {\n var tests = getTests(pos);\n return tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0);\n }\n return !1;\n }\n function seekNext(pos, newBlock) {\n var maskL = getMaskSet().maskLength;\n if (pos >= maskL) return maskL;\n for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).match.newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position)); ) ;\n return position;\n }\n function seekPrevious(pos, newBlock) {\n var tests, position = pos;\n if (position <= 0) return 0;\n for (;--position > 0 && (newBlock === !0 && getTest(position).match.newBlockMarker !== !0 || newBlock !== !0 && !isMask(position) && (tests = getTests(position), \n tests.length < 2 || 2 === tests.length && \"\" === tests[1].match.def)); ) ;\n return position;\n }\n function getBufferElement(position) {\n return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;\n }\n function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {\n if (event && $.isFunction(opts.onBeforeWrite)) {\n var result = opts.onBeforeWrite(event, buffer, caretPos, opts);\n if (result) {\n if (result.refreshFromBuffer) {\n var refresh = result.refreshFromBuffer;\n refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), \n buffer = getBuffer(!0);\n }\n void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);\n }\n }\n input.inputmask._valueSet(buffer.join(\"\")), void 0 === caretPos || void 0 !== event && \"blur\" === event.type ? renderColorMask(input, buffer, caretPos) : caret(input, caretPos), \n triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger(\"input\"));\n }\n function getPlaceholder(pos, test) {\n if (test = test || getTest(pos).match, void 0 !== test.placeholder) return test.placeholder;\n if (null === test.fn) {\n if (pos > -1 && void 0 === getMaskSet().validPositions[pos]) {\n var prevTest, tests = getTests(pos), staticAlternations = [];\n if (tests.length > 1 + (\"\" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations.push(tests[i]), \n null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length);\n }\n return test.def;\n }\n return opts.placeholder.charAt(pos % opts.placeholder.length);\n }\n function checkVal(input, writeOut, strict, nptvl, initiatingEvent, stickyCaret) {\n function isTemplateMatch() {\n var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join(\"\").indexOf(charCodes);\n if (charCodeNdx !== -1 && !isMask(initialNdx)) {\n isMatch = !0;\n for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (\" \" !== bufferTemplateArr[i]) {\n isMatch = !1;\n break;\n }\n }\n return isMatch;\n }\n var inputValue = nptvl.slice(), charCodes = \"\", initialNdx = 0, result = void 0;\n if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {\n var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(\"\"), matches = inputValue.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(staticInput), \"g\"));\n matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), \n initialNdx = seekNext(initialNdx));\n } else initialNdx = seekNext(initialNdx);\n if ($.each(inputValue, function(ndx, charCode) {\n if (void 0 !== charCode) {\n var keypress = new $.Event(\"keypress\");\n keypress.which = charCode.charCodeAt(0), charCodes += charCode;\n var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);\n if (!isTemplateMatch() || strict || opts.autoUnmask) {\n var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;\n result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos), \n initialNdx = pos + 1, charCodes = \"\";\n } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);\n if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts), \n result && result.refreshFromBuffer)) {\n var refresh = result.refreshFromBuffer;\n refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), \n resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);\n }\n }\n }), writeOut) {\n var caretPos = void 0, lvp = getLastValidPosition();\n document.activeElement === input && (initiatingEvent || result) && (caretPos = caret(input).begin, \n initiatingEvent && result === !1 && (caretPos = seekNext(getLastValidPosition(caretPos))), \n result && stickyCaret !== !0 && (caretPos < lvp + 1 || lvp === -1) && (caretPos = opts.numericInput && void 0 === result.caret ? seekPrevious(result.forwardPosition) : result.forwardPosition)), \n writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event(\"checkval\"));\n }\n }\n function unmaskedvalue(input) {\n if (input && void 0 === input.inputmask) return input.value;\n var umValue = [], vps = getMaskSet().validPositions;\n for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);\n var unmaskedValue = 0 === umValue.length ? \"\" : (isRTL ? umValue.reverse() : umValue).join(\"\");\n if ($.isFunction(opts.onUnMask)) {\n var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(\"\");\n unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue;\n }\n return unmaskedValue;\n }\n function caret(input, begin, end, notranslate) {\n function translatePosition(pos) {\n if (notranslate !== !0 && isRTL && \"number\" == typeof pos && (!opts.greedy || \"\" !== opts.placeholder)) {\n var bffrLght = getBuffer().join(\"\").length;\n pos = bffrLght - pos;\n }\n return pos;\n }\n var range;\n if (\"number\" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, \n end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), \n range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset, \n end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), \n begin = 0 - range.duplicate().moveStart(\"character\", -input.inputmask._valueGet().length), \n end = begin + range.text.length), {\n begin: translatePosition(begin),\n end: translatePosition(end)\n };\n begin = translatePosition(begin), end = translatePosition(end), end = \"number\" == typeof end ? end : begin;\n var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;\n if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, \n input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {\n if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {\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(!0);\n var sel = window.getSelection();\n sel.removeAllRanges(), sel.addRange(range);\n } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), \n range.moveEnd(\"character\", end), range.moveStart(\"character\", begin), range.select());\n renderColorMask(input, void 0, {\n begin: begin,\n end: end\n });\n }\n function determineLastRequiredPosition(returnDefinition) {\n var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;\n for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);\n var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;\n for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(\",\"), lvTestAlt.toString().split(\",\")) && \"\" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;\n return returnDefinition ? {\n l: bl,\n def: positions[bl] ? positions[bl].match : void 0\n } : bl;\n }\n function clearOptionalTail(buffer) {\n for (var rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;\n return buffer.splice(rl, lmib + 1 - rl), buffer;\n }\n function isComplete(buffer) {\n if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);\n if (\"*\" !== opts.repeat) {\n var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);\n if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {\n complete = !0;\n for (var i = 0; i <= aml; i++) {\n var test = getTestTemplate(i).match;\n if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {\n complete = !1;\n break;\n }\n }\n }\n return complete;\n }\n }\n function handleRemove(input, k, pos, strict) {\n function generalize() {\n if (opts.keepStatic) {\n for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) {\n var altPos = getMaskSet().validPositions[lastAlt];\n if (altPos) {\n if (altPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input), \n delete getMaskSet().validPositions[lastAlt], void 0 !== altPos.alternation && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break;\n prevAltPos = altPos;\n }\n }\n if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) {\n var keypress = new $.Event(\"keypress\");\n keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);\n } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);\n }\n }\n if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), \n isRTL)) {\n var pend = pos.end;\n pos.end = pos.begin, pos.begin = pend;\n }\n k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), \n void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) ? pos.end + 1 : seekNext(pos.end) + 1, \n void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), \n stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();\n var lvp = getLastValidPosition(pos.begin, !0);\n lvp < pos.begin ? getMaskSet().p = seekNext(lvp) : strict !== !0 && (getMaskSet().p = pos.begin);\n }\n function initializeColorMask(input) {\n function findCaretPos(clientx) {\n var caretPos, e = document.createElement(\"span\");\n for (var style in computedStyle) isNaN(style) && style.indexOf(\"font\") !== -1 && (e.style[style] = computedStyle[style]);\n e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing, \n e.style.position = \"absolute\", e.style.height = \"auto\", e.style.width = \"auto\", \n e.style.visibility = \"hidden\", e.style.whiteSpace = \"nowrap\", document.body.appendChild(e);\n var itl, inputText = input.inputmask._valueGet(), previousWidth = 0;\n for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {\n if (e.innerHTML += inputText.charAt(caretPos) || \"_\", e.offsetWidth >= clientx) {\n var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx;\n e.innerHTML = inputText.charAt(caretPos), offset1 -= e.offsetWidth / 3, caretPos = offset1 < offset2 ? caretPos - 1 : caretPos;\n break;\n }\n previousWidth = e.offsetWidth;\n }\n return document.body.removeChild(e), caretPos;\n }\n function position() {\n colorMask.style.position = \"absolute\", colorMask.style.top = offset.top + \"px\", \n colorMask.style.left = offset.left + \"px\", colorMask.style.width = parseInt(input.offsetWidth) - parseInt(computedStyle.paddingLeft) - parseInt(computedStyle.paddingRight) - parseInt(computedStyle.borderLeftWidth) - parseInt(computedStyle.borderRightWidth) + \"px\", \n colorMask.style.height = parseInt(input.offsetHeight) - parseInt(computedStyle.paddingTop) - parseInt(computedStyle.paddingBottom) - parseInt(computedStyle.borderTopWidth) - parseInt(computedStyle.borderBottomWidth) + \"px\", \n colorMask.style.lineHeight = colorMask.style.height, colorMask.style.zIndex = isNaN(computedStyle.zIndex) ? -1 : computedStyle.zIndex - 1, \n colorMask.style.webkitAppearance = \"textfield\", colorMask.style.mozAppearance = \"textfield\", \n colorMask.style.Appearance = \"textfield\";\n }\n var offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null);\n input.parentNode;\n colorMask = document.createElement(\"div\"), document.body.appendChild(colorMask);\n for (var style in computedStyle) isNaN(style) && \"cssText\" !== style && style.indexOf(\"webkit\") == -1 && (colorMask.style[style] = computedStyle[style]);\n input.style.backgroundColor = \"transparent\", input.style.color = \"transparent\", \n input.style.webkitAppearance = \"caret\", input.style.mozAppearance = \"caret\", input.style.Appearance = \"caret\", \n position(), $(window).on(\"resize\", function(e) {\n offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null), \n position();\n }), $(input).on(\"click\", function(e) {\n return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(this, [ e ]);\n }), $(input).on(\"keydown\", function(e) {\n e.shiftKey || opts.insertMode === !1 || setTimeout(function() {\n renderColorMask(input);\n }, 0);\n });\n }\n function renderColorMask(input, buffer, caretPos) {\n function handleStatic() {\n static || null !== test.fn && void 0 !== testPos.input ? static && null !== test.fn && void 0 !== testPos.input && (static = !1, \n maskTemplate += \"</span>\") : (static = !0, maskTemplate += \"<span class='im-static''>\");\n }\n if (void 0 !== colorMask) {\n buffer = buffer || getBuffer(), void 0 === caretPos ? caretPos = caret(input) : void 0 === caretPos.begin && (caretPos = {\n begin: caretPos,\n end: caretPos\n });\n var maskTemplate = \"\", static = !1;\n if (\"\" != buffer) {\n var ndxIntlzr, test, testPos, pos = 0, lvp = getLastValidPosition();\n do pos === caretPos.begin && document.activeElement === input && (maskTemplate += \"<span class='im-caret' style='border-right-width: 1px;border-right-style: solid;'></span>\"), \n getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += testPos.input) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), \n test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || \"number\" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(), \n maskTemplate += getPlaceholder(pos, test))), pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || \"\" !== test.def) || lvp > pos);\n }\n colorMask.innerHTML = maskTemplate;\n }\n }\n function mask(elem) {\n function isElementTypeSupported(input, opts) {\n function patchValueProperty(npt) {\n function patchValhook(type) {\n if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) {\n var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {\n return elem.value;\n }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {\n return elem.value = value, elem;\n };\n $.valHooks[type] = {\n get: function(elem) {\n if (elem.inputmask) {\n if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();\n var result = valhookGet(elem);\n return getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== !0 ? result : \"\";\n }\n return valhookGet(elem);\n },\n set: function(elem, value) {\n var result, $elem = $(elem);\n return result = valhookSet(elem, value), elem.inputmask && $elem.trigger(\"setvalue\"), \n result;\n },\n inputmaskpatch: !0\n };\n }\n }\n function getter() {\n return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : getLastValidPosition() !== -1 || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join(\"\") : valueGet.call(this) : \"\" : valueGet.call(this);\n }\n function setter(value) {\n valueSet.call(this, value), this.inputmask && $(this).trigger(\"setvalue\");\n }\n function installNativeValueSetFallback(npt) {\n EventRuler.on(npt, \"mouseenter\", function(event) {\n var $input = $(this), input = this, value = input.inputmask._valueGet();\n value !== getBuffer().join(\"\") && $input.trigger(\"setvalue\");\n });\n }\n var valueGet, valueSet;\n if (!npt.inputmask.__valueGet) {\n if (opts.noValuePatching !== !0) {\n if (Object.getOwnPropertyDescriptor) {\n \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" == typeof \"test\".__proto__ ? function(object) {\n return object.__proto__;\n } : function(object) {\n return object.constructor.prototype;\n });\n var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), \"value\") : void 0;\n valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, \n valueSet = valueProperty.set, Object.defineProperty(npt, \"value\", {\n get: getter,\n set: setter,\n configurable: !0\n })) : \"INPUT\" !== npt.tagName && (valueGet = function() {\n return this.textContent;\n }, valueSet = function(value) {\n this.textContent = value;\n }, Object.defineProperty(npt, \"value\", {\n get: getter,\n set: setter,\n configurable: !0\n }));\n } else document.__lookupGetter__ && npt.__lookupGetter__(\"value\") && (valueGet = npt.__lookupGetter__(\"value\"), \n valueSet = npt.__lookupSetter__(\"value\"), npt.__defineGetter__(\"value\", getter), \n npt.__defineSetter__(\"value\", setter));\n npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;\n }\n npt.inputmask._valueGet = function(overruleRTL) {\n return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split(\"\").reverse().join(\"\") : valueGet.call(this.el);\n }, npt.inputmask._valueSet = function(value, overruleRTL) {\n valueSet.call(this.el, null === value || void 0 === value ? \"\" : overruleRTL !== !0 && isRTL ? value.split(\"\").reverse().join(\"\") : value);\n }, void 0 === valueGet && (valueGet = function() {\n return this.value;\n }, valueSet = function(value) {\n this.value = value;\n }, patchValhook(npt.type), installNativeValueSetFallback(npt));\n }\n }\n var elementType = input.getAttribute(\"type\"), isSupported = \"INPUT\" === input.tagName && $.inArray(elementType, opts.supportsInputType) !== -1 || input.isContentEditable || \"TEXTAREA\" === input.tagName;\n if (!isSupported) if (\"INPUT\" === input.tagName) {\n var el = document.createElement(\"input\");\n el.setAttribute(\"type\", elementType), isSupported = \"text\" === el.type, el = null;\n } else isSupported = \"partial\";\n return isSupported !== !1 && patchValueProperty(input), isSupported;\n }\n var isSupported = isElementTypeSupported(elem, opts);\n if (isSupported !== !1 && (el = elem, $el = $(el), (\"rtl\" === el.dir || opts.rightAlign) && (el.style.textAlign = \"right\"), \n (\"rtl\" === el.dir || opts.numericInput) && (el.dir = \"ltr\", el.removeAttribute(\"dir\"), \n el.inputmask.isRTL = !0, isRTL = !0), opts.colorMask === !0 && initializeColorMask(el), \n android && (el.hasOwnProperty(\"inputmode\") && (el.inputmode = opts.inputmode, el.setAttribute(\"inputmode\", opts.inputmode)), \n \"rtfm\" === opts.androidHack && (opts.colorMask !== !0 && initializeColorMask(el), \n el.type = \"password\")), EventRuler.off(el), isSupported === !0 && (EventRuler.on(el, \"submit\", EventHandlers.submitEvent), \n EventRuler.on(el, \"reset\", EventHandlers.resetEvent), EventRuler.on(el, \"mouseenter\", EventHandlers.mouseenterEvent), \n EventRuler.on(el, \"blur\", EventHandlers.blurEvent), EventRuler.on(el, \"focus\", EventHandlers.focusEvent), \n EventRuler.on(el, \"mouseleave\", EventHandlers.mouseleaveEvent), opts.colorMask !== !0 && EventRuler.on(el, \"click\", EventHandlers.clickEvent), \n EventRuler.on(el, \"dblclick\", EventHandlers.dblclickEvent), EventRuler.on(el, \"paste\", EventHandlers.pasteEvent), \n EventRuler.on(el, \"dragdrop\", EventHandlers.pasteEvent), EventRuler.on(el, \"drop\", EventHandlers.pasteEvent), \n EventRuler.on(el, \"cut\", EventHandlers.cutEvent), EventRuler.on(el, \"complete\", opts.oncomplete), \n EventRuler.on(el, \"incomplete\", opts.onincomplete), EventRuler.on(el, \"cleared\", opts.oncleared), \n opts.inputEventOnly !== !0 && (EventRuler.on(el, \"keydown\", EventHandlers.keydownEvent), \n EventRuler.on(el, \"keypress\", EventHandlers.keypressEvent)), EventRuler.on(el, \"compositionstart\", $.noop), \n EventRuler.on(el, \"compositionupdate\", $.noop), EventRuler.on(el, \"compositionend\", $.noop), \n EventRuler.on(el, \"keyup\", $.noop), EventRuler.on(el, \"input\", EventHandlers.inputFallBackEvent)), \n EventRuler.on(el, \"setvalue\", EventHandlers.setValueEvent), getBufferTemplate(), \n \"\" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el)) {\n var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();\n checkVal(el, !0, !1, initialValue.split(\"\"));\n var buffer = getBuffer().slice();\n undoValue = buffer.join(\"\"), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), \n opts.clearMaskOnLostFocus && document.activeElement !== el && (getLastValidPosition() === -1 ? buffer = [] : clearOptionalTail(buffer)), \n writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));\n }\n }\n maskset = maskset || this.maskset, opts = opts || this.opts;\n var undoValue, $el, maxLength, colorMask, valueBuffer, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = {\n on: function(input, eventName, eventHandler) {\n var ev = function(e) {\n if (void 0 === this.inputmask && \"FORM\" !== this.nodeName) {\n var imOpts = $.data(this, \"_inputmask_opts\");\n imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);\n } else {\n if (\"setvalue\" === e.type || !(this.disabled || this.readOnly && !(\"keydown\" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {\n switch (e.type) {\n case \"input\":\n if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault();\n break;\n\n case \"keydown\":\n skipKeyPressEvent = !1, skipInputEvent = !1;\n break;\n\n case \"keypress\":\n if (skipKeyPressEvent === !0) return e.preventDefault();\n skipKeyPressEvent = !0;\n break;\n\n case \"click\":\n if (iemobile || iphone) {\n var that = this, args = arguments;\n return setTimeout(function() {\n eventHandler.apply(that, args);\n }, 0), !1;\n }\n }\n var returnVal = eventHandler.apply(this, arguments);\n return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal;\n }\n e.preventDefault();\n }\n };\n input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), \n $.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1 ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);\n },\n off: function(input, event) {\n if (input.inputmask && input.inputmask.events) {\n var events;\n event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, \n $.each(events, function(eventName, evArr) {\n for (;evArr.length > 0; ) {\n var ev = evArr.pop();\n $.inArray(eventName, [ \"submit\", \"reset\" ]) !== -1 ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);\n }\n delete input.inputmask.events[eventName];\n });\n }\n }\n }, EventHandlers = {\n keydownEvent: function(e) {\n function isInputEventSupported(eventName) {\n var el = document.createElement(\"input\"), evName = \"on\" + eventName, isSupported = evName in el;\n return isSupported || (el.setAttribute(evName, \"return;\"), isSupported = \"function\" == typeof el[evName]), \n el = null, isSupported;\n }\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\")) e.preventDefault(), \n handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join(\"\")), \n input.inputmask._valueGet() === getBufferTemplate().join(\"\") ? $input.trigger(\"cleared\") : isComplete(getBuffer()) === !0 && $input.trigger(\"complete\"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {\n e.preventDefault();\n var caretPos = seekNext(getLastValidPosition());\n opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--, \n caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);\n } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), \n caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split(\"\")), \n $input.trigger(\"click\")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)), \n pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), \n pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--), \n pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertMode === !1 && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {\n var caretPos = caret(input);\n caret(input, caretPos.begin);\n }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {\n var caretPos = caret(input);\n caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);\n }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1));\n opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), 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 === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join(\"\") && (undoValue = getBuffer().join(\"\"), \n setTimeout(function() {\n $input.trigger(\"change\");\n }, 0)), !0;\n if (k) {\n 46 === k && e.shiftKey === !1 && \",\" === opts.radixPoint && (k = 44);\n var forwardPosition, pos = checkval ? {\n begin: ndx,\n end: ndx\n } : caret(input), c = String.fromCharCode(k);\n getMaskSet().writeOutBuffer = !0;\n var valResult = isValid(pos, c, strict);\n if (valResult !== !1 && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos), \n getMaskSet().p = forwardPosition), writeOut !== !1) {\n var self = this;\n if (setTimeout(function() {\n opts.onKeyValidation.call(self, k, valResult, opts);\n }, 0), getMaskSet().writeOutBuffer && valResult !== !1) {\n var buffer = getBuffer();\n writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), \n checkval !== !0 && setTimeout(function() {\n isComplete(buffer) === !0 && $input.trigger(\"complete\");\n }, 0);\n }\n }\n if (e.preventDefault(), checkval) return valResult.forwardPosition = forwardPosition, \n valResult;\n }\n },\n pasteEvent: function(e) {\n var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);\n isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);\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 valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join(\"\") && (valueAfterCaret = \"\"), \n isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), \n window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData(\"Text\") + valueAfterCaret; else {\n if (!ev.clipboardData || !ev.clipboardData.getData) return !0;\n inputValue = valueBeforeCaret + ev.clipboardData.getData(\"text/plain\") + valueAfterCaret;\n }\n var pasteValue = inputValue;\n if ($.isFunction(opts.onBeforePaste)) {\n if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault();\n pasteValue || (pasteValue = inputValue);\n }\n return checkVal(input, !1, !1, isRTL ? pasteValue.split(\"\").reverse() : pasteValue.toString().split(\"\")), \n writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join(\"\")), \n isComplete(getBuffer()) === !0 && $input.trigger(\"complete\"), e.preventDefault();\n },\n inputFallBackEvent: function(e) {\n var input = this, inputValue = input.inputmask._valueGet();\n if (getBuffer().join(\"\") !== inputValue) {\n var caretPos = caret(input);\n if (inputValue = inputValue.replace(new RegExp(\"(\" + Inputmask.escapeRegex(getBufferTemplate().join(\"\")) + \")*\"), \"\"), \n iemobile) {\n var inputChar = inputValue.replace(getBuffer().join(\"\"), \"\");\n if (1 === inputChar.length) {\n var keypress = new $.Event(\"keypress\");\n return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), \n !1;\n }\n }\n if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), \n getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) {\n for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBufferTemplate().join(\"\"); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + \"$\"); ) bufferTemplate = bufferTemplate.slice(1);\n inputValue = inputValue.replace(bufferTemplate, \"\"), inputValue = inputValue.split(\"\"), \n checkVal(input, !0, !1, inputValue, e, caretPos.begin < lvp), isComplete(getBuffer()) === !0 && $(input).trigger(\"complete\");\n } else e.keyCode = Inputmask.keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, e);\n e.preventDefault();\n }\n },\n setValueEvent: function(e) {\n var input = this, value = input.inputmask._valueGet();\n checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split(\"\")), \n undoValue = getBuffer().join(\"\"), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join(\"\") && input.inputmask._valueSet(\"\");\n },\n focusEvent: function(e) {\n var input = this, nptValue = input.inputmask._valueGet();\n opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && \"\" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join(\"\") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition()))), \n opts.positionCaretOnTab === !0 && EventHandlers.clickEvent.apply(input, [ e, !0 ]), \n undoValue = getBuffer().join(\"\");\n },\n mouseleaveEvent: function(e) {\n var input = this;\n if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {\n var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();\n nptValue !== input.getAttribute(\"placeholder\") && \"\" !== nptValue && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer), \n writeBuffer(input, buffer));\n }\n },\n clickEvent: function(e, tabbed) {\n function doRadixFocus(clickPos) {\n if (\"\" !== opts.radixPoint) {\n var vps = getMaskSet().validPositions;\n if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {\n if (clickPos < seekNext(-1)) return !0;\n var radixPos = $.inArray(opts.radixPoint, getBuffer());\n if (radixPos !== -1) {\n for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1;\n return !0;\n }\n }\n }\n return !1;\n }\n var input = this;\n setTimeout(function() {\n if (document.activeElement === input) {\n var selectedCaret = caret(input);\n if (tabbed && (selectedCaret.begin = selectedCaret.end), selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) {\n case \"none\":\n break;\n\n case \"radixFocus\":\n if (doRadixFocus(selectedCaret.begin)) {\n var radixPos = $.inArray(opts.radixPoint, getBuffer().join(\"\"));\n caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);\n break;\n }\n\n default:\n var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);\n if (clickPosition < lastPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else {\n var placeholder = getPlaceholder(lastPosition);\n (\"\" !== placeholder && getBuffer()[lastPosition] !== placeholder && getTest(lastPosition).match.optionalQuantifier !== !0 || !isMask(lastPosition) && getTest(lastPosition).match.def === placeholder) && (lastPosition = seekNext(lastPosition)), \n caret(input, lastPosition);\n }\n }\n }\n }, 0);\n },\n dblclickEvent: function(e) {\n var input = this;\n setTimeout(function() {\n caret(input, 0, seekNext(getLastValidPosition()));\n }, 0);\n },\n cutEvent: function(e) {\n var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, 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 document.execCommand && document.execCommand(\"copy\"), handleRemove(input, Inputmask.keyCode.DELETE, pos), \n writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join(\"\")), \n input.inputmask._valueGet() === getBufferTemplate().join(\"\") && $input.trigger(\"cleared\");\n },\n blurEvent: function(e) {\n var $input = $(this), input = this;\n if (input.inputmask) {\n var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();\n undoValue !== buffer.join(\"\") && setTimeout(function() {\n $input.trigger(\"change\"), undoValue = buffer.join(\"\");\n }, 0), \"\" !== nptValue && (opts.clearMaskOnLostFocus && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join(\"\") ? buffer = [] : clearOptionalTail(buffer)), \n isComplete(buffer) === !1 && (setTimeout(function() {\n $input.trigger(\"incomplete\");\n }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), \n writeBuffer(input, buffer, void 0, e));\n }\n },\n mouseenterEvent: function(e) {\n var input = this;\n mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join(\"\") && writeBuffer(input, getBuffer());\n },\n submitEvent: function(e) {\n undoValue !== getBuffer().join(\"\") && $el.trigger(\"change\"), opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join(\"\") && el.inputmask._valueSet(\"\"), \n opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), \n setTimeout(function() {\n writeBuffer(el, getBuffer());\n }, 0));\n },\n resetEvent: function(e) {\n setTimeout(function() {\n $el.trigger(\"setvalue\");\n }, 0);\n }\n };\n if (void 0 !== actionObj) switch (actionObj.action) {\n case \"isComplete\":\n return el = actionObj.el, isComplete(getBuffer());\n\n case \"unmaskedvalue\":\n return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value, \n valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(\"\"), \n checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), \n unmaskedvalue(el);\n\n case \"mask\":\n mask(el);\n break;\n\n case \"format\":\n return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(\"\"), \n checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), \n actionObj.metadata ? {\n value: isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\"),\n metadata: maskScope.call(this, {\n action: \"getmetadata\"\n }, maskset, opts)\n } : isRTL ? getBuffer().slice().reverse().join(\"\") : getBuffer().join(\"\");\n\n case \"isValid\":\n actionObj.value ? (valueBuffer = actionObj.value.split(\"\"), checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join(\"\");\n for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;\n return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join(\"\");\n\n case \"getemptymask\":\n return getBufferTemplate().join(\"\");\n\n case \"remove\":\n if (el) {\n $el = $(el), el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el);\n var valueProperty;\n Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), \"value\"), \n valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, \"value\", {\n get: el.inputmask.__valueGet,\n set: el.inputmask.__valueSet,\n configurable: !0\n })) : document.__lookupGetter__ && el.__lookupGetter__(\"value\") && el.inputmask.__valueGet && (el.__defineGetter__(\"value\", el.inputmask.__valueGet), \n el.__defineSetter__(\"value\", el.inputmask.__valueSet)), el.inputmask = void 0;\n }\n return el;\n\n case \"getmetadata\":\n if ($.isArray(maskset.metadata)) {\n var maskTarget = getMaskTemplate(!0, 0, !1).join(\"\");\n return $.each(maskset.metadata, function(ndx, mtdt) {\n if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1;\n }), maskTarget;\n }\n return maskset.metadata;\n }\n }\n var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile;\n return Inputmask.prototype = {\n defaults: {\n placeholder: \"_\",\n optionalmarker: {\n start: \"[\",\n end: \"]\"\n },\n quantifiermarker: {\n start: \"{\",\n end: \"}\"\n },\n groupmarker: {\n start: \"(\",\n end: \")\"\n },\n alternatormarker: \"|\",\n escapeChar: \"\\\\\",\n mask: null,\n oncomplete: $.noop,\n onincomplete: $.noop,\n oncleared: $.noop,\n repeat: 0,\n greedy: !0,\n autoUnmask: !1,\n removeMaskOnSubmit: !1,\n clearMaskOnLostFocus: !0,\n insertMode: !0,\n clearIncomplete: !1,\n aliases: {},\n alias: null,\n onKeyDown: $.noop,\n onBeforeMask: null,\n onBeforePaste: function(pastedValue, opts) {\n return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;\n },\n onBeforeWrite: null,\n onUnMask: null,\n showMaskOnFocus: !0,\n showMaskOnHover: !0,\n onKeyValidation: $.noop,\n skipOptionalPartCharacter: \" \",\n numericInput: !1,\n rightAlign: !1,\n undoOnEscape: !0,\n radixPoint: \"\",\n radixPointDefinitionSymbol: void 0,\n groupSeparator: \"\",\n keepStatic: null,\n positionCaretOnTab: !0,\n tabThrough: !1,\n supportsInputType: [ \"text\", \"tel\", \"password\" ],\n definitions: {\n \"9\": {\n validator: \"[0-9]\",\n cardinality: 1,\n definitionSymbol: \"*\"\n },\n a: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n definitionSymbol: \"*\"\n },\n \"*\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1\n }\n },\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 ],\n isComplete: null,\n canClearPosition: $.noop,\n postValidation: null,\n staticDefinitionSymbol: void 0,\n jitMasking: !1,\n nullable: !0,\n inputEventOnly: !1,\n noValuePatching: !1,\n positionCaretOnClick: \"lvp\",\n casing: null,\n inputmode: \"verbatim\",\n colorMask: !1,\n androidHack: !1\n },\n masksCache: {},\n mask: function(elems) {\n function importAttributeOptions(npt, opts, userOptions, dataAttribute) {\n function importOption(option, optionData) {\n optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + \"-\" + option), \n null !== optionData && (\"string\" == typeof optionData && (0 === option.indexOf(\"on\") ? optionData = window[optionData] : \"false\" === optionData ? optionData = !1 : \"true\" === optionData && (optionData = !0)), \n userOptions[option] = optionData);\n }\n var option, dataoptions, optionData, p, attrOptions = npt.getAttribute(dataAttribute);\n if (attrOptions && \"\" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp(\"'\", \"g\"), '\"'), \n dataoptions = JSON.parse(\"{\" + attrOptions + \"}\")), dataoptions) {\n optionData = void 0;\n for (p in dataoptions) if (\"alias\" === p.toLowerCase()) {\n optionData = dataoptions[p];\n break;\n }\n }\n importOption(\"alias\", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);\n for (option in opts) {\n if (dataoptions) {\n optionData = void 0;\n for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {\n optionData = dataoptions[p];\n break;\n }\n }\n importOption(option, optionData);\n }\n return $.extend(!0, opts, userOptions), opts;\n }\n var that = this;\n return \"string\" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), \n elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {\n var scopedOpts = $.extend(!0, {}, that.opts);\n importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute);\n var maskset = generateMaskSet(scopedOpts, that.noMasksCache);\n void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask(), \n el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions), \n el.inputmask.el = el, el.inputmask.maskset = maskset, $.data(el, \"_inputmask_opts\", scopedOpts), \n maskScope.call(el.inputmask, {\n action: \"mask\"\n }));\n }), elems && elems[0] ? elems[0].inputmask || this : this;\n },\n option: function(options, noremask) {\n return \"string\" == typeof options ? this.opts[options] : \"object\" == typeof options ? ($.extend(this.userOptions, options), \n this.el && noremask !== !0 && this.mask(this.el), this) : void 0;\n },\n unmaskedvalue: function(value) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n 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 return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"getemptymask\"\n });\n },\n hasMaskedValue: function() {\n return !this.opts.autoUnmask;\n },\n isComplete: function() {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"isComplete\"\n });\n },\n getmetadata: function() {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"getmetadata\"\n });\n },\n isValid: function(value) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"isValid\",\n value: value\n });\n },\n format: function(value, metadata) {\n return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), \n maskScope.call(this, {\n action: \"format\",\n value: value,\n metadata: metadata\n });\n },\n analyseMask: function(mask, opts) {\n function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {\n this.matches = [], this.openGroup = isGroup || !1, this.isGroup = isGroup || !1, \n this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, \n this.quantifier = {\n min: 1,\n max: 1\n };\n }\n function insertTestDefinition(mtoken, element, position) {\n var maskdef = opts.definitions[element];\n position = void 0 !== position ? position : mtoken.matches.length;\n var prevMatch = mtoken.matches[position - 1];\n if (maskdef && !escaped) {\n maskdef.placeholder = $.isFunction(maskdef.placeholder) ? maskdef.placeholder(opts) : maskdef.placeholder;\n for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {\n var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;\n mtoken.matches.splice(position++, 0, {\n fn: validator ? \"string\" == typeof validator ? new RegExp(validator) : new function() {\n this.test = validator;\n }() : new RegExp(\".\"),\n cardinality: cardinality ? cardinality : 1,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),\n casing: maskdef.casing,\n def: maskdef.definitionSymbol || element,\n placeholder: maskdef.placeholder,\n nativeDef: element\n }), prevMatch = mtoken.matches[position - 1];\n }\n mtoken.matches.splice(position++, 0, {\n fn: maskdef.validator ? \"string\" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {\n this.test = maskdef.validator;\n }() : new RegExp(\".\"),\n cardinality: maskdef.cardinality,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),\n casing: maskdef.casing,\n def: maskdef.definitionSymbol || element,\n placeholder: maskdef.placeholder,\n nativeDef: element\n });\n } else mtoken.matches.splice(position++, 0, {\n fn: null,\n cardinality: 0,\n optionality: mtoken.isOptional,\n newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,\n casing: null,\n def: opts.staticDefinitionSymbol || element,\n placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,\n nativeDef: element\n }), escaped = !1;\n }\n function verifyGroupMarker(maskToken) {\n maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {\n var nextToken = maskToken.matches[ndx + 1];\n (void 0 === nextToken || void 0 === nextToken.matches || nextToken.isQuantifier === !1) && token && token.isGroup && (token.isGroup = !1, \n insertTestDefinition(token, opts.groupmarker.start, 0), token.openGroup !== !0 && insertTestDefinition(token, opts.groupmarker.end)), \n verifyGroupMarker(token);\n });\n }\n function defaultCase() {\n if (openenings.length > 0) {\n if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m), \n currentOpeningToken.isAlternator) {\n alternator = openenings.pop();\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\n }\n } else insertTestDefinition(currentToken, m);\n }\n function reverseTokens(maskToken) {\n function reverseStatic(st) {\n return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start), \n st;\n }\n maskToken.matches = maskToken.matches.reverse();\n for (var match in maskToken.matches) {\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), maskToken.matches.splice(intMatch + 1, 0, qt);\n }\n void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);\n }\n return maskToken;\n }\n for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\\{[0-9\\+\\*]+(?:,[0-9\\+\\*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], \n escaped) defaultCase(); else switch (m.charAt(0)) {\n case opts.escapeChar:\n escaped = !0;\n break;\n\n case opts.optionalmarker.end:\n case opts.groupmarker.end:\n if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) if (openenings.length > 0) {\n if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), \n currentOpeningToken.isAlternator) {\n alternator = openenings.pop();\n for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);\n }\n } else currentToken.matches.push(openingToken); else defaultCase();\n break;\n\n case opts.optionalmarker.start:\n openenings.push(new MaskToken((!1), (!0)));\n break;\n\n case opts.groupmarker.start:\n openenings.push(new MaskToken((!0)));\n break;\n\n case opts.quantifiermarker.start:\n var quantifier = new MaskToken((!1), (!1), (!0));\n m = m.replace(/[{}]/g, \"\");\n var mq = m.split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\n if (\"*\" !== mq1 && \"+\" !== mq1 || (mq0 = \"*\" === mq1 ? 0 : 1), quantifier.quantifier = {\n min: mq0,\n max: mq1\n }, openenings.length > 0) {\n var matches = openenings[openenings.length - 1].matches;\n match = matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), groupToken.matches.push(match), \n match = groupToken), matches.push(match), matches.push(quantifier);\n } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), \n groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), \n currentToken.matches.push(quantifier);\n break;\n\n case opts.alternatormarker:\n openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], \n lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), \n lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken((!1), (!1), (!1), (!0)), \n alternator.matches.push(lastMatch), openenings.push(alternator));\n break;\n\n default:\n defaultCase();\n }\n for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken);\n return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)), \n opts.numericInput && reverseTokens(maskTokens[0]), maskTokens;\n }\n }, Inputmask.extendDefaults = function(options) {\n $.extend(!0, Inputmask.prototype.defaults, options);\n }, Inputmask.extendDefinitions = function(definition) {\n $.extend(!0, Inputmask.prototype.defaults.definitions, definition);\n }, Inputmask.extendAliases = function(alias) {\n $.extend(!0, Inputmask.prototype.defaults.aliases, alias);\n }, Inputmask.format = function(value, options, metadata) {\n return Inputmask(options).format(value, metadata);\n }, Inputmask.unmask = function(value, options) {\n return Inputmask(options).unmaskedvalue(value);\n }, Inputmask.isValid = function(value, options) {\n return Inputmask(options).isValid(value);\n }, Inputmask.remove = function(elems) {\n $.each(elems, function(ndx, el) {\n el.inputmask && el.inputmask.remove();\n });\n }, Inputmask.escapeRegex = function(str) {\n var specials = [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ];\n return str.replace(new RegExp(\"(\\\\\" + specials.join(\"|\\\\\") + \")\", \"gim\"), \"\\\\$1\");\n }, Inputmask.keyCode = {\n ALT: 18,\n BACKSPACE: 8,\n BACKSPACE_SAFARI: 127,\n CAPS_LOCK: 20,\n COMMA: 188,\n COMMAND: 91,\n COMMAND_LEFT: 91,\n COMMAND_RIGHT: 93,\n CONTROL: 17,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n INSERT: 45,\n LEFT: 37,\n MENU: 93,\n NUMPAD_ADD: 107,\n NUMPAD_DECIMAL: 110,\n NUMPAD_DIVIDE: 111,\n NUMPAD_ENTER: 108,\n NUMPAD_MULTIPLY: 106,\n NUMPAD_SUBTRACT: 109,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n PERIOD: 190,\n RIGHT: 39,\n SHIFT: 16,\n SPACE: 32,\n TAB: 9,\n UP: 38,\n WINDOWS: 91,\n X: 88\n }, window.Inputmask = Inputmask, Inputmask;\n}(jQuery), function($, Inputmask) {\n return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {\n var nptmask, input = this[0];\n if (void 0 === options && (options = {}), \"string\" == typeof fn) switch (fn) {\n case \"unmaskedvalue\":\n return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();\n\n case \"remove\":\n return this.each(function() {\n this.inputmask && this.inputmask.remove();\n });\n\n case \"getemptymask\":\n return input && input.inputmask ? input.inputmask.getemptymask() : \"\";\n\n case \"hasMaskedValue\":\n return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue();\n\n case \"isComplete\":\n return !input || !input.inputmask || input.inputmask.isComplete();\n\n case \"getmetadata\":\n return input && input.inputmask ? input.inputmask.getmetadata() : void 0;\n\n case \"setvalue\":\n $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler(\"setvalue\");\n break;\n\n case \"option\":\n if (\"string\" != typeof options) return this.each(function() {\n if (void 0 !== this.inputmask) return this.inputmask.option(options);\n });\n if (input && void 0 !== input.inputmask) return input.inputmask.option(options);\n break;\n\n default:\n return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {\n nptmask.mask(this);\n });\n } else {\n if (\"object\" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {\n return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);\n }) : this.each(function() {\n nptmask.mask(this);\n });\n if (void 0 === fn) return this.each(function() {\n nptmask = new Inputmask(options), nptmask.mask(this);\n });\n }\n }), $.fn.inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {}(jQuery, Inputmask), function($, Inputmask) {\n function isLeapYear(year) {\n return isNaN(year) || 29 === new Date(year, 2, 0).getDate();\n }\n return Inputmask.extendAliases({\n \"dd/mm/yyyy\": {\n mask: \"1/2/y\",\n placeholder: \"dd/mm/yyyy\",\n regex: {\n val1pre: new RegExp(\"[0-3]\"),\n val1: new RegExp(\"0[1-9]|[12][0-9]|3[01]\"),\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|[12][0-9]|3[01])\" + escapedSeparator + \"[01])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|[12][0-9])\" + escapedSeparator + \"(0[1-9]|1[012]))|(30\" + escapedSeparator + \"(0[13-9]|1[012]))|(31\" + escapedSeparator + \"(0[13578]|1[02]))\");\n }\n },\n leapday: \"29/02/\",\n separator: \"/\",\n yearrange: {\n minyear: 1900,\n maxyear: 2099\n },\n isInYearRange: function(chrs, minyear, maxyear) {\n if (isNaN(chrs)) return !1;\n var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));\n return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear);\n },\n determinebaseyear: function(minyear, maxyear, hint) {\n var currentyear = new Date().getFullYear();\n if (minyear > currentyear) return minyear;\n if (maxyear < currentyear) {\n for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--;\n var maxxYear = maxYearPrefix + maxYearPostfix;\n return minyear > maxxYear ? minyear : maxxYear;\n }\n if (minyear <= currentyear && currentyear <= maxyear) {\n for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--;\n var currentYearAndHint = currentYearPrefix + hint;\n return currentYearAndHint < minyear ? minyear : currentYearAndHint;\n }\n return currentyear;\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();\n $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n },\n getFrontValue: function(mask, buffer, opts) {\n for (var start = 0, length = 0, i = 0; i < mask.length && \"2\" !== mask.charAt(i); i++) {\n var definition = opts.definitions[mask.charAt(i)];\n definition ? (start += length, length = definition.cardinality) : length++;\n }\n return buffer.join(\"\").substr(start, length);\n },\n postValidation: function(buffer, currentResult, opts) {\n var dayMonthValue, year, bufferStr = buffer.join(\"\");\n return 0 === opts.mask.indexOf(\"y\") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substr(4, 11)) : (year = bufferStr.substr(6, 11), \n dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year));\n },\n definitions: {\n \"1\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.val1.test(chrs);\n return strict || isValid || chrs.charAt(1) !== opts.separator && \"-./\".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val1.test(\"0\" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = \"0\", \n {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n pos: pos,\n c: chrs.charAt(0)\n });\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var pchrs = chrs;\n isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);\n var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);\n if (!strict && !isValid) {\n if (isValid = opts.regex.val1.test(chrs + \"0\")) return maskset.buffer[pos] = chrs, \n maskset.buffer[++pos] = \"0\", {\n pos: pos,\n c: \"0\"\n };\n if (isValid = opts.regex.val1.test(\"0\" + chrs)) return maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n } ]\n },\n \"2\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\n frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = \"01\" + opts.separator);\n var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);\n return strict || isValid || chrs.charAt(1) !== opts.separator && \"-./\".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = \"0\", \n {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n pos: pos,\n c: chrs.charAt(0)\n });\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);\n var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);\n frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = \"01\" + opts.separator);\n var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);\n return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + \"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n y: {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n },\n cardinality: 4,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n if (!strict && !isValid) {\n var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 1);\n if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), \n {\n pos: pos\n };\n if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + \"0\").toString().slice(0, 2), \n isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), \n maskset.buffer[pos++] = yearPrefix.charAt(1), {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n }, {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n if (!strict && !isValid) {\n var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);\n if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), \n {\n pos: pos\n };\n if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), \n isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), \n maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0), \n {\n refreshFromBuffer: {\n start: pos - 3,\n end: pos\n },\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 2\n }, {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);\n },\n cardinality: 3\n } ]\n }\n },\n insertMode: !1,\n autoUnmask: !1\n },\n \"mm/dd/yyyy\": {\n placeholder: \"mm/dd/yyyy\",\n alias: \"dd/mm/yyyy\",\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n leapday: \"02/29/\",\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();\n $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"yyyy/mm/dd\": {\n mask: \"y/1/2\",\n placeholder: \"yyyy/mm/dd\",\n alias: \"mm/dd/yyyy\",\n leapday: \"/02/29\",\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();\n $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"dd.mm.yyyy\": {\n mask: \"1.2.y\",\n placeholder: \"dd.mm.yyyy\",\n leapday: \"29.02.\",\n separator: \".\",\n alias: \"dd/mm/yyyy\"\n },\n \"dd-mm-yyyy\": {\n mask: \"1-2-y\",\n placeholder: \"dd-mm-yyyy\",\n leapday: \"29-02-\",\n separator: \"-\",\n alias: \"dd/mm/yyyy\"\n },\n \"mm.dd.yyyy\": {\n mask: \"1.2.y\",\n placeholder: \"mm.dd.yyyy\",\n leapday: \"02.29.\",\n separator: \".\",\n alias: \"mm/dd/yyyy\"\n },\n \"mm-dd-yyyy\": {\n mask: \"1-2-y\",\n placeholder: \"mm-dd-yyyy\",\n leapday: \"02-29-\",\n separator: \"-\",\n alias: \"mm/dd/yyyy\"\n },\n \"yyyy.mm.dd\": {\n mask: \"y.1.2\",\n placeholder: \"yyyy.mm.dd\",\n leapday: \".02.29\",\n separator: \".\",\n alias: \"yyyy/mm/dd\"\n },\n \"yyyy-mm-dd\": {\n mask: \"y-1-2\",\n placeholder: \"yyyy-mm-dd\",\n leapday: \"-02-29\",\n separator: \"-\",\n alias: \"yyyy/mm/dd\"\n },\n datetime: {\n mask: \"1/2/y h:s\",\n placeholder: \"dd/mm/yyyy hh:mm\",\n alias: \"dd/mm/yyyy\",\n regex: {\n hrspre: new RegExp(\"[012]\"),\n hrs24: new RegExp(\"2[0-4]|1[3-9]\"),\n hrs: new RegExp(\"[01][0-9]|2[0-4]\"),\n ampm: new RegExp(\"^[a|p|A|P][m|M]\"),\n mspre: new RegExp(\"[0-5]\"),\n ms: new RegExp(\"[0-5][0-9]\")\n },\n timeseparator: \":\",\n hourFormat: \"24\",\n definitions: {\n h: {\n validator: function(chrs, maskset, pos, strict, opts) {\n if (\"24\" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = \"0\", \n maskset.buffer[pos] = \"0\", {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos\n },\n c: \"0\"\n };\n var isValid = opts.regex.hrs.test(chrs);\n if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || \"-.:\".indexOf(chrs.charAt(1)) !== -1) && (isValid = opts.regex.hrs.test(\"0\" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = \"0\", \n maskset.buffer[pos] = chrs.charAt(0), pos++, {\n refreshFromBuffer: {\n start: pos - 2,\n end: pos\n },\n pos: pos,\n c: opts.timeseparator\n };\n if (isValid && \"24\" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {\n var tmp = parseInt(chrs, 10);\n return 24 === tmp ? (maskset.buffer[pos + 5] = \"a\", maskset.buffer[pos + 6] = \"m\") : (maskset.buffer[pos + 5] = \"p\", \n maskset.buffer[pos + 6] = \"m\"), tmp -= 12, tmp < 10 ? (maskset.buffer[pos] = tmp.toString(), \n maskset.buffer[pos - 1] = \"0\") : (maskset.buffer[pos] = tmp.toString().charAt(1), \n maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {\n refreshFromBuffer: {\n start: pos - 1,\n end: pos + 6\n },\n c: maskset.buffer[pos]\n };\n }\n return isValid;\n },\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.hrspre.test(chrs);\n return strict || isValid || !(isValid = opts.regex.hrs.test(\"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n s: {\n validator: \"[0-5][0-9]\",\n cardinality: 2,\n prevalidator: [ {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.regex.mspre.test(chrs);\n return strict || isValid || !(isValid = opts.regex.ms.test(\"0\" + chrs)) ? isValid : (maskset.buffer[pos] = \"0\", \n pos++, {\n pos: pos\n });\n },\n cardinality: 1\n } ]\n },\n t: {\n validator: function(chrs, maskset, pos, strict, opts) {\n return opts.regex.ampm.test(chrs + \"m\");\n },\n casing: \"lower\",\n cardinality: 1\n }\n },\n insertMode: !1,\n autoUnmask: !1\n },\n datetime12: {\n mask: \"1/2/y h:s t\\\\m\",\n placeholder: \"dd/mm/yyyy hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"mm/dd/yyyy hh:mm xm\": {\n mask: \"1/2/y h:s t\\\\m\",\n placeholder: \"mm/dd/yyyy hh:mm xm\",\n alias: \"datetime12\",\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[13-9]|1[012])\" + escapedSeparator + \"[0-3])|(02\" + escapedSeparator + \"[0-2])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\" + escapedSeparator + \"30)|((0[13578]|1[02])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n leapday: \"02/29/\",\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();\n $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), \n $input.trigger(\"setvalue\");\n }\n }\n },\n \"hh:mm t\": {\n mask: \"h:s t\\\\m\",\n placeholder: \"hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"h:s t\": {\n mask: \"h:s t\\\\m\",\n placeholder: \"hh:mm xm\",\n alias: \"datetime\",\n hourFormat: \"12\"\n },\n \"hh:mm:ss\": {\n mask: \"h:s:s\",\n placeholder: \"hh:mm:ss\",\n alias: \"datetime\",\n autoUnmask: !1\n },\n \"hh:mm\": {\n mask: \"h:s\",\n placeholder: \"hh:mm\",\n alias: \"datetime\",\n autoUnmask: !1\n },\n date: {\n alias: \"dd/mm/yyyy\"\n },\n \"mm/yyyy\": {\n mask: \"1/y\",\n placeholder: \"mm/yyyy\",\n leapday: \"donotuse\",\n separator: \"/\",\n alias: \"mm/dd/yyyy\"\n },\n shamsi: {\n regex: {\n val2pre: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"[0-3])\");\n },\n val2: function(separator) {\n var escapedSeparator = Inputmask.escapeRegex.call(this, separator);\n return new RegExp(\"((0[1-9]|1[012])\" + escapedSeparator + \"(0[1-9]|[12][0-9]))|((0[1-9]|1[012])\" + escapedSeparator + \"30)|((0[1-6])\" + escapedSeparator + \"31)\");\n },\n val1pre: new RegExp(\"[01]\"),\n val1: new RegExp(\"0[1-9]|1[012]\")\n },\n yearrange: {\n minyear: 1300,\n maxyear: 1499\n },\n mask: \"y/1/2\",\n leapday: \"/12/30\",\n placeholder: \"yyyy/mm/dd\",\n alias: \"mm/dd/yyyy\",\n clearIncomplete: !0\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendDefinitions({\n A: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n casing: \"upper\"\n },\n \"&\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n cardinality: 1,\n casing: \"upper\"\n },\n \"#\": {\n validator: \"[0-9A-Fa-f]\",\n cardinality: 1,\n casing: \"upper\"\n }\n }), Inputmask.extendAliases({\n url: {\n definitions: {\n i: {\n validator: \".\",\n cardinality: 1\n }\n },\n mask: \"(\\\\http://)|(\\\\http\\\\s://)|(ftp://)|(ftp\\\\s://)i{+}\",\n insertMode: !1,\n autoUnmask: !1,\n inputmode: \"url\"\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 return pos - 1 > -1 && \".\" !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, \n chrs = pos - 2 > -1 && \".\" !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : \"0\" + chrs) : chrs = \"00\" + chrs, \n new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\").test(chrs);\n },\n cardinality: 1\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: !1,\n onBeforePaste: function(pastedValue, opts) {\n return pastedValue = pastedValue.toLowerCase(), pastedValue.replace(\"mailto:\", \"\");\n },\n definitions: {\n \"*\": {\n validator: \"[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]\",\n cardinality: 1,\n casing: \"lower\"\n },\n \"-\": {\n validator: \"[0-9A-Za-z-]\",\n cardinality: 1,\n casing: \"lower\"\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 cardinality: 1,\n casing: \"upper\"\n }\n },\n clearIncomplete: !0,\n autoUnmask: !0\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendAliases({\n numeric: {\n mask: function(opts) {\n function autoEscape(txt) {\n for (var escapedTxt = \"\", i = 0; i < txt.length; i++) escapedTxt += 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) ? \"\\\\\" + txt.charAt(i) : txt.charAt(i);\n return escapedTxt;\n }\n if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), \n opts.repeat = 0, opts.groupSeparator === opts.radixPoint && (\".\" === opts.radixPoint ? opts.groupSeparator = \",\" : \",\" === opts.radixPoint ? opts.groupSeparator = \".\" : opts.groupSeparator = \"\"), \n \" \" === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && \"\" !== opts.groupSeparator, \n opts.autoGroup && (\"string\" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), \n isFinite(opts.integerDigits))) {\n var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;\n opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), \n opts.integerDigits < 1 && (opts.integerDigits = \"*\");\n }\n opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), \n \"radixFocus\" === opts.positionCaretOnClick && \"\" === opts.placeholder && opts.integerOptional === !1 && (opts.positionCaretOnClick = \"lvp\"), \n opts.definitions[\";\"] = opts.definitions[\"~\"], opts.definitions[\";\"].definitionSymbol = \"~\", \n opts.numericInput === !0 && (opts.positionCaretOnClick = \"radixFocus\" === opts.positionCaretOnClick ? \"lvp\" : opts.positionCaretOnClick, \n opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1);\n var mask = \"[+]\";\n if (mask += autoEscape(opts.prefix), mask += opts.integerOptional === !0 ? \"~{1,\" + opts.integerDigits + \"}\" : \"~{\" + opts.integerDigits + \"}\", \n void 0 !== opts.digits) {\n opts.decimalProtect && (opts.radixPointDefinitionSymbol = \":\");\n var dq = opts.digits.toString().split(\",\");\n isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{\" + opts.digits + \"}\" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (mask += opts.digitsOptional ? \"[\" + (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{1,\" + opts.digits + \"}]\" : (opts.decimalProtect ? \":\" : opts.radixPoint) + \";{\" + opts.digits + \"}\");\n }\n return mask += autoEscape(opts.suffix), mask += \"[-]\", opts.greedy = !1, null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, \".\"))), \n null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, \".\"))), \n mask;\n },\n placeholder: \"\",\n greedy: !1,\n digits: \"*\",\n digitsOptional: !0,\n radixPoint: \".\",\n positionCaretOnClick: \"radixFocus\",\n groupSize: 3,\n groupSeparator: \"\",\n autoGroup: !1,\n allowPlus: !0,\n allowMinus: !0,\n negationSymbol: {\n front: \"-\",\n back: \"\"\n },\n integerDigits: \"+\",\n integerOptional: !0,\n prefix: \"\",\n suffix: \"\",\n rightAlign: !0,\n decimalProtect: !0,\n min: null,\n max: null,\n step: 1,\n insertMode: !0,\n autoUnmask: !1,\n unmaskAsNumber: !1,\n inputmode: \"numeric\",\n postFormat: function(buffer, pos, opts) {\n opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join(\"\").length - pos - 1));\n var i, l;\n pos = pos >= buffer.length ? buffer.length - 1 : pos < 0 ? 0 : pos;\n var charAtPos = buffer[pos], cbuf = buffer.slice();\n charAtPos === opts.groupSeparator && (cbuf.splice(pos--, 1), charAtPos = cbuf[pos]);\n var isNegative = cbuf.join(\"\").match(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)));\n isNegative = null !== isNegative && 1 === isNegative.length, pos > (isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length && pos < cbuf.length - opts.suffix.length && (cbuf[pos] = \"!\");\n var bufVal = cbuf.join(\"\"), bufValOrigin = cbuf.join();\n if (isNegative && (bufVal = bufVal.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.negationSymbol.front)), \"\"), \n bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\")), \n bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.suffix) + \"$\"), \"\"), \n bufVal = bufVal.replace(new RegExp(\"^\" + Inputmask.escapeRegex(opts.prefix)), \"\"), \n bufVal.length > 0 && opts.autoGroup || bufVal.indexOf(opts.groupSeparator) !== -1) {\n var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);\n bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, \"g\"), \"\");\n var radixSplit = bufVal.split(charAtPos === opts.radixPoint ? \"!\" : opts.radixPoint);\n if (bufVal = \"\" === opts.radixPoint ? bufVal : radixSplit[0], charAtPos !== opts.negationSymbol.front && (bufVal = bufVal.replace(\"!\", \"?\")), \n bufVal.length > opts.groupSize) for (var reg = new RegExp(\"([-+]?[\\\\d?]+)([\\\\d?]{\" + opts.groupSize + \"})\"); reg.test(bufVal) && \"\" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, \"$1\" + opts.groupSeparator + \"$2\"), \n bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);\n bufVal = bufVal.replace(\"?\", \"!\"), \"\" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += (charAtPos === opts.radixPoint ? \"!\" : opts.radixPoint) + radixSplit[1]);\n }\n bufVal = opts.prefix + bufVal + opts.suffix, isNegative && (bufVal = opts.negationSymbol.front + bufVal + opts.negationSymbol.back);\n var needsRefresh = bufValOrigin !== bufVal.split(\"\").join(), newPos = $.inArray(\"!\", bufVal);\n if (newPos === -1 && (newPos = pos), needsRefresh) {\n for (buffer.length = bufVal.length, i = 0, l = bufVal.length; i < l; i++) buffer[i] = bufVal.charAt(i);\n buffer[newPos] = charAtPos;\n }\n return newPos = opts.numericInput && isFinite(pos) ? buffer.join(\"\").length - newPos - 1 : newPos, \n opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join(\"\").length - opts.suffix.length !== newPos && (newPos -= 1)), \n {\n pos: newPos,\n refreshFromBuffer: needsRefresh,\n buffer: buffer,\n isNegative: isNegative\n };\n },\n onBeforeWrite: function(e, buffer, caretPos, opts) {\n var rslt;\n if (e && (\"blur\" === e.type || \"checkval\" === e.type || \"keydown\" === e.type)) {\n var maskedValue = opts.numericInput ? buffer.slice().reverse().join(\"\") : buffer.join(\"\"), processValue = maskedValue.replace(opts.prefix, \"\");\n processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, \".\"));\n var isNegative = processValue.match(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"));\n if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp(\"[-\" + Inputmask.escapeRegex(opts.negationSymbol.front) + \"]\", \"g\"), \"\"), \n processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + \"$\"), \"\"), \n isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), \"g\"), \"\")), \n processValue = processValue === opts.negationSymbol.front ? processValue + \"0\" : processValue, \n \"\" !== processValue && isFinite(processValue)) {\n var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? floatValue * -1 : floatValue;\n if (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min), \n isNegative = opts.min < 0, maskedValue = void 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), \n isNegative = opts.max < 0, maskedValue = void 0), processValue = floatValue.toString().replace(\".\", opts.radixPoint).split(\"\"), \n isFinite(opts.digits)) {\n var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);\n radixPosition === -1 && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);\n for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? rpb !== -1 && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = \"0\";\n processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1];\n }\n if (floatValue.toString() !== processValue && floatValue.toString() + \".\" !== processValue || isNegative) return processValue = (opts.prefix + processValue.join(\"\")).split(\"\"), \n !isNegative || 0 === floatValue && \"blur\" === e.type || (processValue.unshift(opts.negationSymbol.front), \n processValue.push(opts.negationSymbol.back)), opts.numericInput && (processValue = processValue.reverse()), \n rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), \n rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join(\"\") !== buffer.join(\"\")), \n rslt;\n }\n }\n if (opts.autoGroup) return rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), \n rslt.caret = caretPos < (rslt.isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length || caretPos > rslt.buffer.length - (rslt.isNegative ? opts.negationSymbol.back.length : 0) ? rslt.pos : rslt.pos + 1, \n rslt;\n },\n regex: {\n integerPart: function(opts) {\n return 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 signHandler: function(chrs, maskset, pos, strict, opts) {\n if (!strict && opts.allowMinus && \"-\" === chrs || opts.allowPlus && \"+\" === chrs) {\n var matchRslt = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\n if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === (\"-\" === chrs ? \"+\" : opts.negationSymbol.front) ? \"-\" === chrs ? \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: opts.negationSymbol.front,\n remove: 0,\n caret: pos,\n insert: {\n pos: maskset.buffer.length - 1,\n c: opts.negationSymbol.back\n }\n } : {\n pos: 0,\n c: opts.negationSymbol.front,\n remove: 0,\n caret: pos\n } : \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: \"+\",\n remove: [ 0, maskset.buffer.length - 1 ],\n caret: pos\n } : {\n pos: 0,\n c: \"+\",\n remove: 0,\n caret: pos\n } : maskset.buffer[0] === (\"-\" === chrs ? opts.negationSymbol.front : \"+\") ? \"-\" === chrs && \"\" !== opts.negationSymbol.back ? {\n remove: [ 0, maskset.buffer.length - 1 ],\n caret: pos - 1\n } : {\n remove: 0,\n caret: pos - 1\n } : \"-\" === chrs ? \"\" !== opts.negationSymbol.back ? {\n pos: 0,\n c: opts.negationSymbol.front,\n caret: pos + 1,\n insert: {\n pos: maskset.buffer.length,\n c: opts.negationSymbol.back\n }\n } : {\n pos: 0,\n c: opts.negationSymbol.front,\n caret: pos + 1\n } : {\n pos: 0,\n c: chrs,\n caret: pos + 1\n };\n }\n return !1;\n },\n radixHandler: function(chrs, maskset, pos, strict, opts) {\n if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {\n var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join(\"\").match(opts.regex.integerPart(opts));\n if (radixPos !== -1 && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {\n caret: radixPos + 1\n } : {\n pos: integerValue.index,\n c: integerValue[0],\n caret: radixPos + 1\n };\n if (!integerValue || \"0\" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = \"0\", \n {\n pos: (integerValue ? integerValue.index : pos) + 1,\n c: opts.radixPoint\n };\n }\n return !1;\n },\n leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) {\n if (!strict) {\n var buffer = maskset.buffer.slice(\"\");\n if (buffer.splice(0, opts.prefix.length), buffer.splice(buffer.length - opts.suffix.length, opts.suffix.length), \n opts.numericInput === !0) {\n var buffer = buffer.reverse(), bufferChar = buffer[0];\n if (\"0\" === bufferChar && void 0 === maskset.validPositions[pos - 1]) return {\n pos: pos,\n remove: buffer.length - 1\n };\n } else {\n pos -= opts.prefix.length;\n var radixPosition = $.inArray(opts.radixPoint, buffer), matchRslt = buffer.slice(0, radixPosition !== -1 ? radixPosition : void 0).join(\"\").match(opts.regex.integerNPart(opts));\n if (matchRslt && (radixPosition === -1 || pos <= radixPosition)) {\n var decimalPart = radixPosition === -1 ? 0 : parseInt(buffer.slice(radixPosition + 1).join(\"\"));\n if (0 === matchRslt[0].indexOf(\"\" !== opts.placeholder ? opts.placeholder.charAt(0) : \"0\") && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index + opts.prefix.length, 1), \n {\n pos: matchRslt.index + opts.prefix.length,\n remove: matchRslt.index + opts.prefix.length\n };\n if (\"0\" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;\n }\n }\n }\n return !0;\n },\n definitions: {\n \"~\": {\n validator: function(chrs, maskset, pos, strict, opts, isSelection) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), \n !isValid && (isValid = strict ? new RegExp(\"[0-9\" + Inputmask.escapeRegex(opts.groupSeparator) + \"]\").test(chrs) : new RegExp(\"[0-9]\").test(chrs), \n isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection), \n isValid === !0)))) {\n var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);\n isValid = radixPosition !== -1 && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? {\n pos: pos,\n remove: pos\n } : {\n pos: pos\n };\n }\n return isValid;\n },\n cardinality: 1\n },\n \"+\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && \"-\" === chrs || opts.allowPlus && \"+\" === chrs) && (isValid = !(!strict && \"-\" === chrs) || (\"\" !== opts.negationSymbol.back ? {\n pos: pos,\n c: \"-\" === chrs ? opts.negationSymbol.front : \"+\",\n caret: pos + 1,\n insert: {\n pos: maskset.buffer.length,\n c: opts.negationSymbol.back\n }\n } : {\n pos: pos,\n c: \"-\" === chrs ? opts.negationSymbol.front : \"+\",\n caret: pos + 1\n })), isValid;\n },\n cardinality: 1,\n placeholder: \"\"\n },\n \"-\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), \n isValid;\n },\n cardinality: 1,\n placeholder: \"\"\n },\n \":\": {\n validator: function(chrs, maskset, pos, strict, opts) {\n var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);\n if (!isValid) {\n var radix = \"[\" + Inputmask.escapeRegex(opts.radixPoint) + \"]\";\n isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (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 === !0) return unmaskedValue;\n var processValue = maskedValue.replace(opts.prefix, \"\");\n return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n opts.unmaskAsNumber ? (\"\" !== opts.radixPoint && processValue.indexOf(opts.radixPoint) !== -1 && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), \".\")), \n Number(processValue)) : processValue;\n },\n isComplete: function(buffer, opts) {\n var maskedValue = buffer.join(\"\"), bufClone = buffer.slice();\n if (opts.postFormat(bufClone, 0, opts), bufClone.join(\"\") !== maskedValue) return !1;\n var processValue = maskedValue.replace(opts.prefix, \"\");\n return processValue = processValue.replace(opts.suffix, \"\"), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n \",\" === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\")), \n isFinite(processValue);\n },\n onBeforeMask: function(initialValue, opts) {\n if (opts.numericInput === !0 && (initialValue = initialValue.split(\"\").reverse().join(\"\")), \n \"\" !== opts.radixPoint && isFinite(initialValue)) {\n var vs = initialValue.split(\".\"), groupSize = \"\" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0;\n 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize) && (initialValue = initialValue.toString().replace(\".\", opts.radixPoint));\n }\n var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\\./g);\n if (dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\\./g, \"\"), \n initialValue = initialValue.replace(\",\", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, \"\"), \n initialValue = initialValue.replace(\".\", opts.radixPoint)) : initialValue = initialValue.indexOf(\".\") < initialValue.indexOf(\",\") ? initialValue.replace(/\\./g, \"\") : initialValue = initialValue.replace(/,/g, \"\") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), \"g\"), \"\"), \n 0 === opts.digits && (initialValue.indexOf(\".\") !== -1 ? initialValue = initialValue.substring(0, initialValue.indexOf(\".\")) : initialValue.indexOf(\",\") !== -1 && (initialValue = initialValue.substring(0, initialValue.indexOf(\",\")))), \n \"\" !== opts.radixPoint && isFinite(opts.digits) && initialValue.indexOf(opts.radixPoint) !== -1) {\n var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp(\"\\\\d*\"))[0];\n if (parseInt(opts.digits) < decPart.toString().length) {\n var digitsFactor = Math.pow(10, parseInt(opts.digits));\n initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), \".\"), \n initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, \n initialValue = initialValue.toString().replace(\".\", opts.radixPoint);\n }\n }\n return opts.numericInput === !0 && (initialValue = initialValue.split(\"\").reverse().join(\"\")), \n initialValue.toString();\n },\n canClearPosition: function(maskset, position, lvp, strict, opts) {\n var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;\n return canClear;\n },\n onKeyDown: function(e, buffer, caretPos, opts) {\n var $input = $(this);\n if (e.ctrlKey) switch (e.keyCode) {\n case Inputmask.keyCode.UP:\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger(\"setvalue\");\n break;\n\n case Inputmask.keyCode.DOWN:\n $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger(\"setvalue\");\n }\n }\n },\n currency: {\n prefix: \"$ \",\n groupSeparator: \",\",\n alias: \"numeric\",\n placeholder: \"0\",\n autoGroup: !0,\n digits: 2,\n digitsOptional: !1,\n clearMaskOnLostFocus: !1\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 radixPoint: \".\",\n placeholder: \"0\",\n autoGroup: !1,\n min: 0,\n max: 100,\n suffix: \" %\",\n allowPlus: !1,\n allowMinus: !1\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n function maskSort(a, b) {\n var maska = (a.mask || a).replace(/#/g, \"9\").replace(/\\)/, \"9\").replace(/[+()#-]/g, \"\"), maskb = (b.mask || b).replace(/#/g, \"9\").replace(/\\)/, \"9\").replace(/[+()#-]/g, \"\"), maskas = (a.mask || a).split(\"#\")[0], maskbs = (b.mask || b).split(\"#\")[0];\n return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb);\n }\n var analyseMaskBase = Inputmask.prototype.analyseMask;\n return Inputmask.prototype.analyseMask = function(mask, opts) {\n function reduceVariations(masks, previousVariation, previousmaskGroup) {\n previousVariation = previousVariation || \"\", previousmaskGroup = previousmaskGroup || maskGroups, \n \"\" !== previousVariation && (previousmaskGroup[previousVariation] = {});\n for (var variation = \"\", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) mask = masks[i].mask || masks[i], \n variation = mask.substr(0, 1), maskGroup[variation] = maskGroup[variation] || [], \n maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1);\n for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);\n }\n function rebuild(maskGroup) {\n var mask = \"\", submasks = [];\n for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx]));\n return mask += 1 === submasks.length ? submasks[0] : opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end;\n }\n var maskGroups = {};\n opts.phoneCodes && opts.phoneCodes.length > 1e3 && (mask = mask.substr(1, mask.length - 2), \n reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)), \n mask = rebuild(maskGroups));\n var mt = analyseMaskBase.call(this, mask, opts);\n return mt;\n }, Inputmask.extendAliases({\n abstractphone: {\n groupmarker: {\n start: \"<\",\n end: \">\"\n },\n countrycode: \"\",\n phoneCodes: [],\n mask: function(opts) {\n return opts.definitions = {\n \"#\": opts.definitions[9]\n }, opts.phoneCodes.sort(maskSort);\n },\n keepStatic: !0,\n onBeforeMask: function(value, opts) {\n var processedValue = value.replace(/^0{1,2}/, \"\").replace(/[\\s]/g, \"\");\n return (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) && (processedValue = \"+\" + opts.countrycode + processedValue), \n processedValue;\n },\n onUnMask: function(maskedValue, unmaskedValue, opts) {\n return unmaskedValue;\n },\n inputmode: \"tel\"\n }\n }), Inputmask;\n}(jQuery, Inputmask), function($, Inputmask) {\n return Inputmask.extendAliases({\n Regex: {\n mask: \"r\",\n greedy: !1,\n repeat: \"*\",\n regex: null,\n regexTokens: null,\n tokenizer: /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\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,\n quantifierFilter: /[0-9]+[^,]/,\n isComplete: function(buffer, opts) {\n return new RegExp(opts.regex).test(buffer.join(\"\"));\n },\n definitions: {\n r: {\n validator: function(chrs, maskset, pos, strict, opts) {\n function RegexToken(isGroup, isQuantifier) {\n this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, \n this.quantifier = {\n min: 1,\n max: 1\n }, this.repeaterPart = void 0;\n }\n function analyseRegex() {\n var match, m, currentToken = new RegexToken(), opengroups = [];\n for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], \n m.charAt(0)) {\n case \"(\":\n opengroups.push(new RegexToken((!0)));\n break;\n\n case \")\":\n groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);\n break;\n\n case \"{\":\n case \"+\":\n case \"*\":\n var quantifierToken = new RegexToken((!1), (!0));\n m = m.replace(/[{}]/g, \"\");\n var mq = m.split(\",\"), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);\n if (quantifierToken.quantifier = {\n min: mq0,\n max: mq1\n }, opengroups.length > 0) {\n var matches = opengroups[opengroups.length - 1].matches;\n match = matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), groupToken.matches.push(match), \n match = groupToken), matches.push(match), matches.push(quantifierToken);\n } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), \n groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), \n currentToken.matches.push(quantifierToken);\n break;\n\n default:\n opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);\n }\n currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);\n }\n function validateRegexToken(token, fromGroup) {\n var isvalid = !1;\n fromGroup && (regexPart += \"(\", openGroupCount++);\n for (var mndx = 0; mndx < token.matches.length; mndx++) {\n var matchToken = token.matches[mndx];\n if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {\n var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;\n if (isNaN(matchToken.quantifier.max)) {\n for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;\n isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), \n regexPart = regexPartBak + matchToken.quantifier.max;\n } else {\n for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;\n regexPart = regexPartBak + \"{\" + matchToken.quantifier.min + \",\" + matchToken.quantifier.max + \"}\";\n }\n } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {\n var testExp;\n if (\"[\" == matchToken.charAt(0)) {\n testExp = regexPart, testExp += matchToken;\n for (var j = 0; j < openGroupCount; j++) testExp += \")\";\n var exp = new RegExp(\"^(\" + testExp + \")$\");\n isvalid = exp.test(bufferStr);\n } else for (var l = 0, tl = matchToken.length; l < tl; l++) if (\"\\\\\" !== matchToken.charAt(l)) {\n testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\\|$/, \"\");\n for (var j = 0; j < openGroupCount; j++) testExp += \")\";\n var exp = new RegExp(\"^(\" + testExp + \")$\");\n if (isvalid = exp.test(bufferStr)) break;\n }\n regexPart += matchToken;\n }\n if (isvalid) break;\n }\n return fromGroup && (regexPart += \")\", openGroupCount--), isvalid;\n }\n var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = \"\", isValid = !1, openGroupCount = 0;\n null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join(\"\");\n for (var i = 0; i < opts.regexTokens.length; i++) {\n var regexToken = opts.regexTokens[i];\n if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;\n }\n return isValid;\n },\n cardinality: 1\n }\n }\n }\n }), Inputmask;\n}(jQuery, Inputmask);","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.0\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/*!\n * Select2 4.0.12\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node/CommonJS\n module.exports = function (root, jQuery) {\n if (jQuery === undefined) {\n // require('jQuery') returns a factory that requires window to\n // build a jQuery instance, we normalize how we use modules\n // that require this pattern but the window provided is a noop\n // if it's defined (how jquery works)\n if (typeof window !== 'undefined') {\n jQuery = require('jquery');\n }\n else {\n jQuery = require('jquery')(root);\n }\n }\n factory(jQuery);\n return jQuery;\n };\n } else {\n // Browser globals\n factory(jQuery);\n }\n} (function (jQuery) {\n // This is needed so we can catch the AMD loader configuration and use it\n // The inner file should be wrapped (by `banner.start.js`) in a function that\n // returns the AMD loader references.\n var S2 =(function () {\n // Restore the Select2 AMD loader so it can be used\n // Needed mostly in the language files, where the loader is not inserted\n if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n var S2 = jQuery.fn.select2.amd;\n }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // If wanting node ID compatibility, strip .js from end\n // of IDs. Have to do this here, and not in nameToUrl\n // because node allows either .js or non .js to map\n // to same file.\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n // Starts with a '.' so need the baseName\n if (name[0].charAt(0) === '.' && baseParts) {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n name = normalizedBaseParts.concat(name);\n }\n\n //start trimDots\n for (i = 0; i < name.length; i++) {\n part = name[i];\n if (part === '.') {\n name.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n // If at the start, or previous value is still ..,\n // keep them so that when converted to a path it may\n // still work when converted to a path, even though\n // as an ID it is less than ideal. In larger point\n // releases, may be better to just kick out an error.\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join('/');\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n //Creates a parts array for a relName where first part is plugin ID,\n //second part is resource ID. Assumes relName has already been normalized.\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relResourceName));\n } else {\n name = normalize(name, relResourceName);\n }\n } else {\n name = normalize(name, relResourceName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i, relParts,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n relParts = makeRelParts(relName);\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, makeRelParts(callback)).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n var _$ = jQuery || $;\n\n if (_$ == null && console && console.error) {\n console.error(\n 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n 'found. Make sure that you are including jQuery before Select2 on your ' +\n 'web page.'\n );\n }\n\n return _$;\n});\n\nS2.define('select2/utils',[\n 'jquery'\n], function ($) {\n var Utils = {};\n\n Utils.Extend = function (ChildClass, SuperClass) {\n var __hasProp = {}.hasOwnProperty;\n\n function BaseConstructor () {\n this.constructor = ChildClass;\n }\n\n for (var key in SuperClass) {\n if (__hasProp.call(SuperClass, key)) {\n ChildClass[key] = SuperClass[key];\n }\n }\n\n BaseConstructor.prototype = SuperClass.prototype;\n ChildClass.prototype = new BaseConstructor();\n ChildClass.__super__ = SuperClass.prototype;\n\n return ChildClass;\n };\n\n function getMethods (theClass) {\n var proto = theClass.prototype;\n\n var methods = [];\n\n for (var methodName in proto) {\n var m = proto[methodName];\n\n if (typeof m !== 'function') {\n continue;\n }\n\n if (methodName === 'constructor') {\n continue;\n }\n\n methods.push(methodName);\n }\n\n return methods;\n }\n\n Utils.Decorate = function (SuperClass, DecoratorClass) {\n var decoratedMethods = getMethods(DecoratorClass);\n var superMethods = getMethods(SuperClass);\n\n function DecoratedClass () {\n var unshift = Array.prototype.unshift;\n\n var argCount = DecoratorClass.prototype.constructor.length;\n\n var calledConstructor = SuperClass.prototype.constructor;\n\n if (argCount > 0) {\n unshift.call(arguments, SuperClass.prototype.constructor);\n\n calledConstructor = DecoratorClass.prototype.constructor;\n }\n\n calledConstructor.apply(this, arguments);\n }\n\n DecoratorClass.displayName = SuperClass.displayName;\n\n function ctr () {\n this.constructor = DecoratedClass;\n }\n\n DecoratedClass.prototype = new ctr();\n\n for (var m = 0; m < superMethods.length; m++) {\n var superMethod = superMethods[m];\n\n DecoratedClass.prototype[superMethod] =\n SuperClass.prototype[superMethod];\n }\n\n var calledMethod = function (methodName) {\n // Stub out the original method if it's not decorating an actual method\n var originalMethod = function () {};\n\n if (methodName in DecoratedClass.prototype) {\n originalMethod = DecoratedClass.prototype[methodName];\n }\n\n var decoratedMethod = DecoratorClass.prototype[methodName];\n\n return function () {\n var unshift = Array.prototype.unshift;\n\n unshift.call(arguments, originalMethod);\n\n return decoratedMethod.apply(this, arguments);\n };\n };\n\n for (var d = 0; d < decoratedMethods.length; d++) {\n var decoratedMethod = decoratedMethods[d];\n\n DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n }\n\n return DecoratedClass;\n };\n\n var Observable = function () {\n this.listeners = {};\n };\n\n Observable.prototype.on = function (event, callback) {\n this.listeners = this.listeners || {};\n\n if (event in this.listeners) {\n this.listeners[event].push(callback);\n } else {\n this.listeners[event] = [callback];\n }\n };\n\n Observable.prototype.trigger = function (event) {\n var slice = Array.prototype.slice;\n var params = slice.call(arguments, 1);\n\n this.listeners = this.listeners || {};\n\n // Params should always come in as an array\n if (params == null) {\n params = [];\n }\n\n // If there are no arguments to the event, use a temporary object\n if (params.length === 0) {\n params.push({});\n }\n\n // Set the `_type` of the first object to the event\n params[0]._type = event;\n\n if (event in this.listeners) {\n this.invoke(this.listeners[event], slice.call(arguments, 1));\n }\n\n if ('*' in this.listeners) {\n this.invoke(this.listeners['*'], arguments);\n }\n };\n\n Observable.prototype.invoke = function (listeners, params) {\n for (var i = 0, len = listeners.length; i < len; i++) {\n listeners[i].apply(this, params);\n }\n };\n\n Utils.Observable = Observable;\n\n Utils.generateChars = function (length) {\n var chars = '';\n\n for (var i = 0; i < length; i++) {\n var randomChar = Math.floor(Math.random() * 36);\n chars += randomChar.toString(36);\n }\n\n return chars;\n };\n\n Utils.bind = function (func, context) {\n return function () {\n func.apply(context, arguments);\n };\n };\n\n Utils._convertData = function (data) {\n for (var originalKey in data) {\n var keys = originalKey.split('-');\n\n var dataLevel = data;\n\n if (keys.length === 1) {\n continue;\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k];\n\n // Lowercase the first letter\n // By default, dash-separated becomes camelCase\n key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n if (!(key in dataLevel)) {\n dataLevel[key] = {};\n }\n\n if (k == keys.length - 1) {\n dataLevel[key] = data[originalKey];\n }\n\n dataLevel = dataLevel[key];\n }\n\n delete data[originalKey];\n }\n\n return data;\n };\n\n Utils.hasScroll = function (index, el) {\n // Adapted from the function created by @ShadowScripter\n // and adapted by @BillBarry on the Stack Exchange Code Review website.\n // The original code can be found at\n // http://codereview.stackexchange.com/q/13338\n // and was designed to be used with the Sizzle selector engine.\n\n var $el = $(el);\n var overflowX = el.style.overflowX;\n var overflowY = el.style.overflowY;\n\n //Check both x and y declarations\n if (overflowX === overflowY &&\n (overflowY === 'hidden' || overflowY === 'visible')) {\n return false;\n }\n\n if (overflowX === 'scroll' || overflowY === 'scroll') {\n return true;\n }\n\n return ($el.innerHeight() < el.scrollHeight ||\n $el.innerWidth() < el.scrollWidth);\n };\n\n Utils.escapeMarkup = function (markup) {\n var replaceMap = {\n '\\\\': '&#92;',\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n '\\'': '&#39;',\n '/': '&#47;'\n };\n\n // Do not try to escape the markup if it's not a string\n if (typeof markup !== 'string') {\n return markup;\n }\n\n return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n return replaceMap[match];\n });\n };\n\n // Append an array of jQuery nodes to a given element.\n Utils.appendMany = function ($element, $nodes) {\n // jQuery 1.7.x does not support $.fn.append() with an array\n // Fall back to a jQuery object collection using $.fn.add()\n if ($.fn.jquery.substr(0, 3) === '1.7') {\n var $jqNodes = $();\n\n $.map($nodes, function (node) {\n $jqNodes = $jqNodes.add(node);\n });\n\n $nodes = $jqNodes;\n }\n\n $element.append($nodes);\n };\n\n // Cache objects in Utils.__cache instead of $.data (see #4346)\n Utils.__cache = {};\n\n var id = 0;\n Utils.GetUniqueElementId = function (element) {\n // Get a unique element Id. If element has no id,\n // creates a new unique number, stores it in the id\n // attribute and returns the new id.\n // If an id already exists, it simply returns it.\n\n var select2Id = element.getAttribute('data-select2-id');\n if (select2Id == null) {\n // If element has id, use it.\n if (element.id) {\n select2Id = element.id;\n element.setAttribute('data-select2-id', select2Id);\n } else {\n element.setAttribute('data-select2-id', ++id);\n select2Id = id.toString();\n }\n }\n return select2Id;\n };\n\n Utils.StoreData = function (element, name, value) {\n // Stores an item in the cache for a specified element.\n // name is the cache key.\n var id = Utils.GetUniqueElementId(element);\n if (!Utils.__cache[id]) {\n Utils.__cache[id] = {};\n }\n\n Utils.__cache[id][name] = value;\n };\n\n Utils.GetData = function (element, name) {\n // Retrieves a value from the cache by its key (name)\n // name is optional. If no name specified, return\n // all cache items for the specified element.\n // and for a specified element.\n var id = Utils.GetUniqueElementId(element);\n if (name) {\n if (Utils.__cache[id]) {\n if (Utils.__cache[id][name] != null) {\n return Utils.__cache[id][name];\n }\n return $(element).data(name); // Fallback to HTML5 data attribs.\n }\n return $(element).data(name); // Fallback to HTML5 data attribs.\n } else {\n return Utils.__cache[id];\n }\n };\n\n Utils.RemoveData = function (element) {\n // Removes all cached items for a specified element.\n var id = Utils.GetUniqueElementId(element);\n if (Utils.__cache[id] != null) {\n delete Utils.__cache[id];\n }\n\n element.removeAttribute('data-select2-id');\n };\n\n return Utils;\n});\n\nS2.define('select2/results',[\n 'jquery',\n './utils'\n], function ($, Utils) {\n function Results ($element, options, dataAdapter) {\n this.$element = $element;\n this.data = dataAdapter;\n this.options = options;\n\n Results.__super__.constructor.call(this);\n }\n\n Utils.Extend(Results, Utils.Observable);\n\n Results.prototype.render = function () {\n var $results = $(\n '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n );\n\n if (this.options.get('multiple')) {\n $results.attr('aria-multiselectable', 'true');\n }\n\n this.$results = $results;\n\n return $results;\n };\n\n Results.prototype.clear = function () {\n this.$results.empty();\n };\n\n Results.prototype.displayMessage = function (params) {\n var escapeMarkup = this.options.get('escapeMarkup');\n\n this.clear();\n this.hideLoading();\n\n var $message = $(\n '<li role=\"alert\" aria-live=\"assertive\"' +\n ' class=\"select2-results__option\"></li>'\n );\n\n var message = this.options.get('translations').get(params.message);\n\n $message.append(\n escapeMarkup(\n message(params.args)\n )\n );\n\n $message[0].className += ' select2-results__message';\n\n this.$results.append($message);\n };\n\n Results.prototype.hideMessages = function () {\n this.$results.find('.select2-results__message').remove();\n };\n\n Results.prototype.append = function (data) {\n this.hideLoading();\n\n var $options = [];\n\n if (data.results == null || data.results.length === 0) {\n if (this.$results.children().length === 0) {\n this.trigger('results:message', {\n message: 'noResults'\n });\n }\n\n return;\n }\n\n data.results = this.sort(data.results);\n\n for (var d = 0; d < data.results.length; d++) {\n var item = data.results[d];\n\n var $option = this.option(item);\n\n $options.push($option);\n }\n\n this.$results.append($options);\n };\n\n Results.prototype.position = function ($results, $dropdown) {\n var $resultsContainer = $dropdown.find('.select2-results');\n $resultsContainer.append($results);\n };\n\n Results.prototype.sort = function (data) {\n var sorter = this.options.get('sorter');\n\n return sorter(data);\n };\n\n Results.prototype.highlightFirstItem = function () {\n var $options = this.$results\n .find('.select2-results__option[aria-selected]');\n\n var $selected = $options.filter('[aria-selected=true]');\n\n // Check if there are any selected options\n if ($selected.length > 0) {\n // If there are selected options, highlight the first\n $selected.first().trigger('mouseenter');\n } else {\n // If there are no selected options, highlight the first option\n // in the dropdown\n $options.first().trigger('mouseenter');\n }\n\n this.ensureHighlightVisible();\n };\n\n Results.prototype.setClasses = function () {\n var self = this;\n\n this.data.current(function (selected) {\n var selectedIds = $.map(selected, function (s) {\n return s.id.toString();\n });\n\n var $options = self.$results\n .find('.select2-results__option[aria-selected]');\n\n $options.each(function () {\n var $option = $(this);\n\n var item = Utils.GetData(this, 'data');\n\n // id needs to be converted to a string when comparing\n var id = '' + item.id;\n\n if ((item.element != null && item.element.selected) ||\n (item.element == null && $.inArray(id, selectedIds) > -1)) {\n $option.attr('aria-selected', 'true');\n } else {\n $option.attr('aria-selected', 'false');\n }\n });\n\n });\n };\n\n Results.prototype.showLoading = function (params) {\n this.hideLoading();\n\n var loadingMore = this.options.get('translations').get('searching');\n\n var loading = {\n disabled: true,\n loading: true,\n text: loadingMore(params)\n };\n var $loading = this.option(loading);\n $loading.className += ' loading-results';\n\n this.$results.prepend($loading);\n };\n\n Results.prototype.hideLoading = function () {\n this.$results.find('.loading-results').remove();\n };\n\n Results.prototype.option = function (data) {\n var option = document.createElement('li');\n option.className = 'select2-results__option';\n\n var attrs = {\n 'role': 'option',\n 'aria-selected': 'false'\n };\n\n var matches = window.Element.prototype.matches ||\n window.Element.prototype.msMatchesSelector ||\n window.Element.prototype.webkitMatchesSelector;\n\n if ((data.element != null && matches.call(data.element, ':disabled')) ||\n (data.element == null && data.disabled)) {\n delete attrs['aria-selected'];\n attrs['aria-disabled'] = 'true';\n }\n\n if (data.id == null) {\n delete attrs['aria-selected'];\n }\n\n if (data._resultId != null) {\n option.id = data._resultId;\n }\n\n if (data.title) {\n option.title = data.title;\n }\n\n if (data.children) {\n attrs.role = 'group';\n attrs['aria-label'] = data.text;\n delete attrs['aria-selected'];\n }\n\n for (var attr in attrs) {\n var val = attrs[attr];\n\n option.setAttribute(attr, val);\n }\n\n if (data.children) {\n var $option = $(option);\n\n var label = document.createElement('strong');\n label.className = 'select2-results__group';\n\n var $label = $(label);\n this.template(data, label);\n\n var $children = [];\n\n for (var c = 0; c < data.children.length; c++) {\n var child = data.children[c];\n\n var $child = this.option(child);\n\n $children.push($child);\n }\n\n var $childrenContainer = $('<ul></ul>', {\n 'class': 'select2-results__options select2-results__options--nested'\n });\n\n $childrenContainer.append($children);\n\n $option.append(label);\n $option.append($childrenContainer);\n } else {\n this.template(data, option);\n }\n\n Utils.StoreData(option, 'data', data);\n\n return option;\n };\n\n Results.prototype.bind = function (container, $container) {\n var self = this;\n\n var id = container.id + '-results';\n\n this.$results.attr('id', id);\n\n container.on('results:all', function (params) {\n self.clear();\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n self.highlightFirstItem();\n }\n });\n\n container.on('results:append', function (params) {\n self.append(params.data);\n\n if (container.isOpen()) {\n self.setClasses();\n }\n });\n\n container.on('query', function (params) {\n self.hideMessages();\n self.showLoading(params);\n });\n\n container.on('select', function () {\n if (!container.isOpen()) {\n return;\n }\n\n self.setClasses();\n\n if (self.options.get('scrollAfterSelect')) {\n self.highlightFirstItem();\n }\n });\n\n container.on('unselect', function () {\n if (!container.isOpen()) {\n return;\n }\n\n self.setClasses();\n\n if (self.options.get('scrollAfterSelect')) {\n self.highlightFirstItem();\n }\n });\n\n container.on('open', function () {\n // When the dropdown is open, aria-expended=\"true\"\n self.$results.attr('aria-expanded', 'true');\n self.$results.attr('aria-hidden', 'false');\n\n self.setClasses();\n self.ensureHighlightVisible();\n });\n\n container.on('close', function () {\n // When the dropdown is closed, aria-expended=\"false\"\n self.$results.attr('aria-expanded', 'false');\n self.$results.attr('aria-hidden', 'true');\n self.$results.removeAttr('aria-activedescendant');\n });\n\n container.on('results:toggle', function () {\n var $highlighted = self.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n $highlighted.trigger('mouseup');\n });\n\n container.on('results:select', function () {\n var $highlighted = self.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n var data = Utils.GetData($highlighted[0], 'data');\n\n if ($highlighted.attr('aria-selected') == 'true') {\n self.trigger('close', {});\n } else {\n self.trigger('select', {\n data: data\n });\n }\n });\n\n container.on('results:previous', function () {\n var $highlighted = self.getHighlightedResults();\n\n var $options = self.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n // If we are already at the top, don't move further\n // If no options, currentIndex will be -1\n if (currentIndex <= 0) {\n return;\n }\n\n var nextIndex = currentIndex - 1;\n\n // If none are highlighted, highlight the first\n if ($highlighted.length === 0) {\n nextIndex = 0;\n }\n\n var $next = $options.eq(nextIndex);\n\n $next.trigger('mouseenter');\n\n var currentOffset = self.$results.offset().top;\n var nextTop = $next.offset().top;\n var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n if (nextIndex === 0) {\n self.$results.scrollTop(0);\n } else if (nextTop - currentOffset < 0) {\n self.$results.scrollTop(nextOffset);\n }\n });\n\n container.on('results:next', function () {\n var $highlighted = self.getHighlightedResults();\n\n var $options = self.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n var nextIndex = currentIndex + 1;\n\n // If we are at the last option, stay there\n if (nextIndex >= $options.length) {\n return;\n }\n\n var $next = $options.eq(nextIndex);\n\n $next.trigger('mouseenter');\n\n var currentOffset = self.$results.offset().top +\n self.$results.outerHeight(false);\n var nextBottom = $next.offset().top + $next.outerHeight(false);\n var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n if (nextIndex === 0) {\n self.$results.scrollTop(0);\n } else if (nextBottom > currentOffset) {\n self.$results.scrollTop(nextOffset);\n }\n });\n\n container.on('results:focus', function (params) {\n params.element.addClass('select2-results__option--highlighted');\n });\n\n container.on('results:message', function (params) {\n self.displayMessage(params);\n });\n\n if ($.fn.mousewheel) {\n this.$results.on('mousewheel', function (e) {\n var top = self.$results.scrollTop();\n\n var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n if (isAtTop) {\n self.$results.scrollTop(0);\n\n e.preventDefault();\n e.stopPropagation();\n } else if (isAtBottom) {\n self.$results.scrollTop(\n self.$results.get(0).scrollHeight - self.$results.height()\n );\n\n e.preventDefault();\n e.stopPropagation();\n }\n });\n }\n\n this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n function (evt) {\n var $this = $(this);\n\n var data = Utils.GetData(this, 'data');\n\n if ($this.attr('aria-selected') === 'true') {\n if (self.options.get('multiple')) {\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\n });\n } else {\n self.trigger('close', {});\n }\n\n return;\n }\n\n self.trigger('select', {\n originalEvent: evt,\n data: data\n });\n });\n\n this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n function (evt) {\n var data = Utils.GetData(this, 'data');\n\n self.getHighlightedResults()\n .removeClass('select2-results__option--highlighted');\n\n self.trigger('results:focus', {\n data: data,\n element: $(this)\n });\n });\n };\n\n Results.prototype.getHighlightedResults = function () {\n var $highlighted = this.$results\n .find('.select2-results__option--highlighted');\n\n return $highlighted;\n };\n\n Results.prototype.destroy = function () {\n this.$results.remove();\n };\n\n Results.prototype.ensureHighlightVisible = function () {\n var $highlighted = this.getHighlightedResults();\n\n if ($highlighted.length === 0) {\n return;\n }\n\n var $options = this.$results.find('[aria-selected]');\n\n var currentIndex = $options.index($highlighted);\n\n var currentOffset = this.$results.offset().top;\n var nextTop = $highlighted.offset().top;\n var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n var offsetDelta = nextTop - currentOffset;\n nextOffset -= $highlighted.outerHeight(false) * 2;\n\n if (currentIndex <= 2) {\n this.$results.scrollTop(0);\n } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n this.$results.scrollTop(nextOffset);\n }\n };\n\n Results.prototype.template = function (result, container) {\n var template = this.options.get('templateResult');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n var content = template(result, container);\n\n if (content == null) {\n container.style.display = 'none';\n } else if (typeof content === 'string') {\n container.innerHTML = escapeMarkup(content);\n } else {\n $(container).append(content);\n }\n };\n\n return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n var KEYS = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n SHIFT: 16,\n CTRL: 17,\n ALT: 18,\n ESC: 27,\n SPACE: 32,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n END: 35,\n HOME: 36,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n DELETE: 46\n };\n\n return KEYS;\n});\n\nS2.define('select2/selection/base',[\n 'jquery',\n '../utils',\n '../keys'\n], function ($, Utils, KEYS) {\n function BaseSelection ($element, options) {\n this.$element = $element;\n this.options = options;\n\n BaseSelection.__super__.constructor.call(this);\n }\n\n Utils.Extend(BaseSelection, Utils.Observable);\n\n BaseSelection.prototype.render = function () {\n var $selection = $(\n '<span class=\"select2-selection\" role=\"combobox\" ' +\n ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n '</span>'\n );\n\n this._tabindex = 0;\n\n if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n } else if (this.$element.attr('tabindex') != null) {\n this._tabindex = this.$element.attr('tabindex');\n }\n\n $selection.attr('title', this.$element.attr('title'));\n $selection.attr('tabindex', this._tabindex);\n $selection.attr('aria-disabled', 'false');\n\n this.$selection = $selection;\n\n return $selection;\n };\n\n BaseSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n this.container = container;\n\n this.$selection.on('focus', function (evt) {\n self.trigger('focus', evt);\n });\n\n this.$selection.on('blur', function (evt) {\n self._handleBlur(evt);\n });\n\n this.$selection.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n\n if (evt.which === KEYS.SPACE) {\n evt.preventDefault();\n }\n });\n\n container.on('results:focus', function (params) {\n self.$selection.attr('aria-activedescendant', params.data._resultId);\n });\n\n container.on('selection:update', function (params) {\n self.update(params.data);\n });\n\n container.on('open', function () {\n // When the dropdown is open, aria-expanded=\"true\"\n self.$selection.attr('aria-expanded', 'true');\n self.$selection.attr('aria-owns', resultsId);\n\n self._attachCloseHandler(container);\n });\n\n container.on('close', function () {\n // When the dropdown is closed, aria-expanded=\"false\"\n self.$selection.attr('aria-expanded', 'false');\n self.$selection.removeAttr('aria-activedescendant');\n self.$selection.removeAttr('aria-owns');\n\n self.$selection.trigger('focus');\n\n self._detachCloseHandler(container);\n });\n\n container.on('enable', function () {\n self.$selection.attr('tabindex', self._tabindex);\n self.$selection.attr('aria-disabled', 'false');\n });\n\n container.on('disable', function () {\n self.$selection.attr('tabindex', '-1');\n self.$selection.attr('aria-disabled', 'true');\n });\n };\n\n BaseSelection.prototype._handleBlur = function (evt) {\n var self = this;\n\n // This needs to be delayed as the active element is the body when the tab\n // key is pressed, possibly along with others.\n window.setTimeout(function () {\n // Don't trigger `blur` if the focus is still in the selection\n if (\n (document.activeElement == self.$selection[0]) ||\n ($.contains(self.$selection[0], document.activeElement))\n ) {\n return;\n }\n\n self.trigger('blur', evt);\n }, 1);\n };\n\n BaseSelection.prototype._attachCloseHandler = function (container) {\n\n $(document.body).on('mousedown.select2.' + container.id, function (e) {\n var $target = $(e.target);\n\n var $select = $target.closest('.select2');\n\n var $all = $('.select2.select2-container--open');\n\n $all.each(function () {\n if (this == $select[0]) {\n return;\n }\n\n var $element = Utils.GetData(this, 'element');\n\n $element.select2('close');\n });\n });\n };\n\n BaseSelection.prototype._detachCloseHandler = function (container) {\n $(document.body).off('mousedown.select2.' + container.id);\n };\n\n BaseSelection.prototype.position = function ($selection, $container) {\n var $selectionContainer = $container.find('.selection');\n $selectionContainer.append($selection);\n };\n\n BaseSelection.prototype.destroy = function () {\n this._detachCloseHandler(this.container);\n };\n\n BaseSelection.prototype.update = function (data) {\n throw new Error('The `update` method must be defined in child classes.');\n };\n\n return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n 'jquery',\n './base',\n '../utils',\n '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n function SingleSelection () {\n SingleSelection.__super__.constructor.apply(this, arguments);\n }\n\n Utils.Extend(SingleSelection, BaseSelection);\n\n SingleSelection.prototype.render = function () {\n var $selection = SingleSelection.__super__.render.call(this);\n\n $selection.addClass('select2-selection--single');\n\n $selection.html(\n '<span class=\"select2-selection__rendered\"></span>' +\n '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n '<b role=\"presentation\"></b>' +\n '</span>'\n );\n\n return $selection;\n };\n\n SingleSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n SingleSelection.__super__.bind.apply(this, arguments);\n\n var id = container.id + '-container';\n\n this.$selection.find('.select2-selection__rendered')\n .attr('id', id)\n .attr('role', 'textbox')\n .attr('aria-readonly', 'true');\n this.$selection.attr('aria-labelledby', id);\n\n this.$selection.on('mousedown', function (evt) {\n // Only respond to left clicks\n if (evt.which !== 1) {\n return;\n }\n\n self.trigger('toggle', {\n originalEvent: evt\n });\n });\n\n this.$selection.on('focus', function (evt) {\n // User focuses on the container\n });\n\n this.$selection.on('blur', function (evt) {\n // User exits the container\n });\n\n container.on('focus', function (evt) {\n if (!container.isOpen()) {\n self.$selection.trigger('focus');\n }\n });\n };\n\n SingleSelection.prototype.clear = function () {\n var $rendered = this.$selection.find('.select2-selection__rendered');\n $rendered.empty();\n $rendered.removeAttr('title'); // clear tooltip on empty\n };\n\n SingleSelection.prototype.display = function (data, container) {\n var template = this.options.get('templateSelection');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n return escapeMarkup(template(data, container));\n };\n\n SingleSelection.prototype.selectionContainer = function () {\n return $('<span></span>');\n };\n\n SingleSelection.prototype.update = function (data) {\n if (data.length === 0) {\n this.clear();\n return;\n }\n\n var selection = data[0];\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n var formatted = this.display(selection, $rendered);\n\n $rendered.empty().append(formatted);\n\n var title = selection.title || selection.text;\n\n if (title) {\n $rendered.attr('title', title);\n } else {\n $rendered.removeAttr('title');\n }\n };\n\n return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n 'jquery',\n './base',\n '../utils'\n], function ($, BaseSelection, Utils) {\n function MultipleSelection ($element, options) {\n MultipleSelection.__super__.constructor.apply(this, arguments);\n }\n\n Utils.Extend(MultipleSelection, BaseSelection);\n\n MultipleSelection.prototype.render = function () {\n var $selection = MultipleSelection.__super__.render.call(this);\n\n $selection.addClass('select2-selection--multiple');\n\n $selection.html(\n '<ul class=\"select2-selection__rendered\"></ul>'\n );\n\n return $selection;\n };\n\n MultipleSelection.prototype.bind = function (container, $container) {\n var self = this;\n\n MultipleSelection.__super__.bind.apply(this, arguments);\n\n this.$selection.on('click', function (evt) {\n self.trigger('toggle', {\n originalEvent: evt\n });\n });\n\n this.$selection.on(\n 'click',\n '.select2-selection__choice__remove',\n function (evt) {\n // Ignore the event if it is disabled\n if (self.options.get('disabled')) {\n return;\n }\n\n var $remove = $(this);\n var $selection = $remove.parent();\n\n var data = Utils.GetData($selection[0], 'data');\n\n self.trigger('unselect', {\n originalEvent: evt,\n data: data\n });\n }\n );\n };\n\n MultipleSelection.prototype.clear = function () {\n var $rendered = this.$selection.find('.select2-selection__rendered');\n $rendered.empty();\n $rendered.removeAttr('title');\n };\n\n MultipleSelection.prototype.display = function (data, container) {\n var template = this.options.get('templateSelection');\n var escapeMarkup = this.options.get('escapeMarkup');\n\n return escapeMarkup(template(data, container));\n };\n\n MultipleSelection.prototype.selectionContainer = function () {\n var $container = $(\n '<li class=\"select2-selection__choice\">' +\n '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n '&times;' +\n '</span>' +\n '</li>'\n );\n\n return $container;\n };\n\n MultipleSelection.prototype.update = function (data) {\n this.clear();\n\n if (data.length === 0) {\n return;\n }\n\n var $selections = [];\n\n for (var d = 0; d < data.length; d++) {\n var selection = data[d];\n\n var $selection = this.selectionContainer();\n var formatted = this.display(selection, $selection);\n\n $selection.append(formatted);\n\n var title = selection.title || selection.text;\n\n if (title) {\n $selection.attr('title', title);\n }\n\n Utils.StoreData($selection[0], 'data', selection);\n\n $selections.push($selection);\n }\n\n var $rendered = this.$selection.find('.select2-selection__rendered');\n\n Utils.appendMany($rendered, $selections);\n };\n\n return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n '../utils'\n], function (Utils) {\n function Placeholder (decorated, $element, options) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n decorated.call(this, $element, options);\n }\n\n Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n if (typeof placeholder === 'string') {\n placeholder = {\n id: '',\n text: placeholder\n };\n }\n\n return placeholder;\n };\n\n Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n var $placeholder = this.selectionContainer();\n\n $placeholder.html(this.display(placeholder));\n $placeholder.addClass('select2-selection__placeholder')\n .removeClass('select2-selection__choice');\n\n return $placeholder;\n };\n\n Placeholder.prototype.update = function (decorated, data) {\n var singlePlaceholder = (\n data.length == 1 && data[0].id != this.placeholder.id\n );\n var multipleSelections = data.length > 1;\n\n if (multipleSelections || singlePlaceholder) {\n return decorated.call(this, data);\n }\n\n this.clear();\n\n var $placeholder = this.createPlaceholder(this.placeholder);\n\n this.$selection.find('.select2-selection__rendered').append($placeholder);\n };\n\n return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n 'jquery',\n '../keys',\n '../utils'\n], function ($, KEYS, Utils) {\n function AllowClear () { }\n\n AllowClear.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n if (this.placeholder == null) {\n if (this.options.get('debug') && window.console && console.error) {\n console.error(\n 'Select2: The `allowClear` option should be used in combination ' +\n 'with the `placeholder` option.'\n );\n }\n }\n\n this.$selection.on('mousedown', '.select2-selection__clear',\n function (evt) {\n self._handleClear(evt);\n });\n\n container.on('keypress', function (evt) {\n self._handleKeyboardClear(evt, container);\n });\n };\n\n AllowClear.prototype._handleClear = function (_, evt) {\n // Ignore the event if it is disabled\n if (this.options.get('disabled')) {\n return;\n }\n\n var $clear = this.$selection.find('.select2-selection__clear');\n\n // Ignore the event if nothing has been selected\n if ($clear.length === 0) {\n return;\n }\n\n evt.stopPropagation();\n\n var data = Utils.GetData($clear[0], 'data');\n\n var previousVal = this.$element.val();\n this.$element.val(this.placeholder.id);\n\n var unselectData = {\n data: data\n };\n this.trigger('clear', unselectData);\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n\n for (var d = 0; d < data.length; d++) {\n unselectData = {\n data: data[d]\n };\n\n // Trigger the `unselect` event, so people can prevent it from being\n // cleared.\n this.trigger('unselect', unselectData);\n\n // If the event was prevented, don't clear it out.\n if (unselectData.prevented) {\n this.$element.val(previousVal);\n return;\n }\n }\n\n this.$element.trigger('change');\n\n this.trigger('toggle', {});\n };\n\n AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n if (container.isOpen()) {\n return;\n }\n\n if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n this._handleClear(evt);\n }\n };\n\n AllowClear.prototype.update = function (decorated, data) {\n decorated.call(this, data);\n\n if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n data.length === 0) {\n return;\n }\n\n var removeAll = this.options.get('translations').get('removeAllItems'); \n\n var $remove = $(\n '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n '&times;' +\n '</span>'\n );\n Utils.StoreData($remove[0], 'data', data);\n\n this.$selection.find('.select2-selection__rendered').prepend($remove);\n };\n\n return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n 'jquery',\n '../utils',\n '../keys'\n], function ($, Utils, KEYS) {\n function Search (decorated, $element, options) {\n decorated.call(this, $element, options);\n }\n\n Search.prototype.render = function (decorated) {\n var $search = $(\n '<li class=\"select2-search select2-search--inline\">' +\n '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n '</li>'\n );\n\n this.$searchContainer = $search;\n this.$search = $search.find('input');\n\n var $rendered = decorated.call(this);\n\n this._transferTabIndex();\n\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n decorated.call(this, container, $container);\n\n container.on('open', function () {\n self.$search.attr('aria-controls', resultsId);\n self.$search.trigger('focus');\n });\n\n container.on('close', function () {\n self.$search.val('');\n self.$search.removeAttr('aria-controls');\n self.$search.removeAttr('aria-activedescendant');\n self.$search.trigger('focus');\n });\n\n container.on('enable', function () {\n self.$search.prop('disabled', false);\n\n self._transferTabIndex();\n });\n\n container.on('disable', function () {\n self.$search.prop('disabled', true);\n });\n\n container.on('focus', function (evt) {\n self.$search.trigger('focus');\n });\n\n container.on('results:focus', function (params) {\n if (params.data._resultId) {\n self.$search.attr('aria-activedescendant', params.data._resultId);\n } else {\n self.$search.removeAttr('aria-activedescendant');\n }\n });\n\n this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n self.trigger('focus', evt);\n });\n\n this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n self._handleBlur(evt);\n });\n\n this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n evt.stopPropagation();\n\n self.trigger('keypress', evt);\n\n self._keyUpPrevented = evt.isDefaultPrevented();\n\n var key = evt.which;\n\n if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n var $previousChoice = self.$searchContainer\n .prev('.select2-selection__choice');\n\n if ($previousChoice.length > 0) {\n var item = Utils.GetData($previousChoice[0], 'data');\n\n self.searchRemoveChoice(item);\n\n evt.preventDefault();\n }\n }\n });\n\n this.$selection.on('click', '.select2-search--inline', function (evt) {\n if (self.$search.val()) {\n evt.stopPropagation();\n }\n });\n\n // Try to detect the IE version should the `documentMode` property that\n // is stored on the document. This is only implemented in IE and is\n // slightly cleaner than doing a user agent check.\n // This property is not available in Edge, but Edge also doesn't have\n // this bug.\n var msie = document.documentMode;\n var disableInputEvents = msie && msie <= 11;\n\n // Workaround for browsers which do not support the `input` event\n // This will prevent double-triggering of events for browsers which support\n // both the `keyup` and `input` events.\n this.$selection.on(\n 'input.searchcheck',\n '.select2-search--inline',\n function (evt) {\n // IE will trigger the `input` event when a placeholder is used on a\n // search box. To get around this issue, we are forced to ignore all\n // `input` events in IE and keep using `keyup`.\n if (disableInputEvents) {\n self.$selection.off('input.search input.searchcheck');\n return;\n }\n\n // Unbind the duplicated `keyup` event\n self.$selection.off('keyup.search');\n }\n );\n\n this.$selection.on(\n 'keyup.search input.search',\n '.select2-search--inline',\n function (evt) {\n // IE will trigger the `input` event when a placeholder is used on a\n // search box. To get around this issue, we are forced to ignore all\n // `input` events in IE and keep using `keyup`.\n if (disableInputEvents && evt.type === 'input') {\n self.$selection.off('input.search input.searchcheck');\n return;\n }\n\n var key = evt.which;\n\n // We can freely ignore events from modifier keys\n if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n return;\n }\n\n // Tabbing will be handled during the `keydown` phase\n if (key == KEYS.TAB) {\n return;\n }\n\n self.handleSearch(evt);\n }\n );\n };\n\n /**\n * This method will transfer the tabindex attribute from the rendered\n * selection to the search box. This allows for the search box to be used as\n * the primary focus instead of the selection container.\n *\n * @private\n */\n Search.prototype._transferTabIndex = function (decorated) {\n this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n this.$selection.attr('tabindex', '-1');\n };\n\n Search.prototype.createPlaceholder = function (decorated, placeholder) {\n this.$search.attr('placeholder', placeholder.text);\n };\n\n Search.prototype.update = function (decorated, data) {\n var searchHadFocus = this.$search[0] == document.activeElement;\n\n this.$search.attr('placeholder', '');\n\n decorated.call(this, data);\n\n this.$selection.find('.select2-selection__rendered')\n .append(this.$searchContainer);\n\n this.resizeSearch();\n if (searchHadFocus) {\n this.$search.trigger('focus');\n }\n };\n\n Search.prototype.handleSearch = function () {\n this.resizeSearch();\n\n if (!this._keyUpPrevented) {\n var input = this.$search.val();\n\n this.trigger('query', {\n term: input\n });\n }\n\n this._keyUpPrevented = false;\n };\n\n Search.prototype.searchRemoveChoice = function (decorated, item) {\n this.trigger('unselect', {\n data: item\n });\n\n this.$search.val(item.text);\n this.handleSearch();\n };\n\n Search.prototype.resizeSearch = function () {\n this.$search.css('width', '25px');\n\n var width = '';\n\n if (this.$search.attr('placeholder') !== '') {\n width = this.$selection.find('.select2-selection__rendered').width();\n } else {\n var minimumWidth = this.$search.val().length + 1;\n\n width = (minimumWidth * 0.75) + 'em';\n }\n\n this.$search.css('width', width);\n };\n\n return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n 'jquery'\n], function ($) {\n function EventRelay () { }\n\n EventRelay.prototype.bind = function (decorated, container, $container) {\n var self = this;\n var relayEvents = [\n 'open', 'opening',\n 'close', 'closing',\n 'select', 'selecting',\n 'unselect', 'unselecting',\n 'clear', 'clearing'\n ];\n\n var preventableEvents = [\n 'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n ];\n\n decorated.call(this, container, $container);\n\n container.on('*', function (name, params) {\n // Ignore events that should not be relayed\n if ($.inArray(name, relayEvents) === -1) {\n return;\n }\n\n // The parameters should always be an object\n params = params || {};\n\n // Generate the jQuery event for the Select2 event\n var evt = $.Event('select2:' + name, {\n params: params\n });\n\n self.$element.trigger(evt);\n\n // Only handle preventable events if it was one\n if ($.inArray(name, preventableEvents) === -1) {\n return;\n }\n\n params.prevented = evt.isDefaultPrevented();\n });\n };\n\n return EventRelay;\n});\n\nS2.define('select2/translation',[\n 'jquery',\n 'require'\n], function ($, require) {\n function Translation (dict) {\n this.dict = dict || {};\n }\n\n Translation.prototype.all = function () {\n return this.dict;\n };\n\n Translation.prototype.get = function (key) {\n return this.dict[key];\n };\n\n Translation.prototype.extend = function (translation) {\n this.dict = $.extend({}, translation.all(), this.dict);\n };\n\n // Static functions\n\n Translation._cache = {};\n\n Translation.loadPath = function (path) {\n if (!(path in Translation._cache)) {\n var translations = require(path);\n\n Translation._cache[path] = translations;\n }\n\n return new Translation(Translation._cache[path]);\n };\n\n return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n var diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u0152': 'OE',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u0153': 'oe',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03CE': '\\u03C9',\n '\\u03C2': '\\u03C3',\n '\\u2019': '\\''\n };\n\n return diacritics;\n});\n\nS2.define('select2/data/base',[\n '../utils'\n], function (Utils) {\n function BaseAdapter ($element, options) {\n BaseAdapter.__super__.constructor.call(this);\n }\n\n Utils.Extend(BaseAdapter, Utils.Observable);\n\n BaseAdapter.prototype.current = function (callback) {\n throw new Error('The `current` method must be defined in child classes.');\n };\n\n BaseAdapter.prototype.query = function (params, callback) {\n throw new Error('The `query` method must be defined in child classes.');\n };\n\n BaseAdapter.prototype.bind = function (container, $container) {\n // Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.destroy = function () {\n // Can be implemented in subclasses\n };\n\n BaseAdapter.prototype.generateResultId = function (container, data) {\n var id = container.id + '-result-';\n\n id += Utils.generateChars(4);\n\n if (data.id != null) {\n id += '-' + data.id.toString();\n } else {\n id += '-' + Utils.generateChars(4);\n }\n return id;\n };\n\n return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n './base',\n '../utils',\n 'jquery'\n], function (BaseAdapter, Utils, $) {\n function SelectAdapter ($element, options) {\n this.$element = $element;\n this.options = options;\n\n SelectAdapter.__super__.constructor.call(this);\n }\n\n Utils.Extend(SelectAdapter, BaseAdapter);\n\n SelectAdapter.prototype.current = function (callback) {\n var data = [];\n var self = this;\n\n this.$element.find(':selected').each(function () {\n var $option = $(this);\n\n var option = self.item($option);\n\n data.push(option);\n });\n\n callback(data);\n };\n\n SelectAdapter.prototype.select = function (data) {\n var self = this;\n\n data.selected = true;\n\n // If data.element is a DOM node, use it instead\n if ($(data.element).is('option')) {\n data.element.selected = true;\n\n this.$element.trigger('change');\n\n return;\n }\n\n if (this.$element.prop('multiple')) {\n this.current(function (currentData) {\n var val = [];\n\n data = [data];\n data.push.apply(data, currentData);\n\n for (var d = 0; d < data.length; d++) {\n var id = data[d].id;\n\n if ($.inArray(id, val) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n self.$element.trigger('change');\n });\n } else {\n var val = data.id;\n\n this.$element.val(val);\n this.$element.trigger('change');\n }\n };\n\n SelectAdapter.prototype.unselect = function (data) {\n var self = this;\n\n if (!this.$element.prop('multiple')) {\n return;\n }\n\n data.selected = false;\n\n if ($(data.element).is('option')) {\n data.element.selected = false;\n\n this.$element.trigger('change');\n\n return;\n }\n\n this.current(function (currentData) {\n var val = [];\n\n for (var d = 0; d < currentData.length; d++) {\n var id = currentData[d].id;\n\n if (id !== data.id && $.inArray(id, val) === -1) {\n val.push(id);\n }\n }\n\n self.$element.val(val);\n\n self.$element.trigger('change');\n });\n };\n\n SelectAdapter.prototype.bind = function (container, $container) {\n var self = this;\n\n this.container = container;\n\n container.on('select', function (params) {\n self.select(params.data);\n });\n\n container.on('unselect', function (params) {\n self.unselect(params.data);\n });\n };\n\n SelectAdapter.prototype.destroy = function () {\n // Remove anything added to child elements\n this.$element.find('*').each(function () {\n // Remove any custom data set by Select2\n Utils.RemoveData(this);\n });\n };\n\n SelectAdapter.prototype.query = function (params, callback) {\n var data = [];\n var self = this;\n\n var $options = this.$element.children();\n\n $options.each(function () {\n var $option = $(this);\n\n if (!$option.is('option') && !$option.is('optgroup')) {\n return;\n }\n\n var option = self.item($option);\n\n var matches = self.matches(params, option);\n\n if (matches !== null) {\n data.push(matches);\n }\n });\n\n callback({\n results: data\n });\n };\n\n SelectAdapter.prototype.addOptions = function ($options) {\n Utils.appendMany(this.$element, $options);\n };\n\n SelectAdapter.prototype.option = function (data) {\n var option;\n\n if (data.children) {\n option = document.createElement('optgroup');\n option.label = data.text;\n } else {\n option = document.createElement('option');\n\n if (option.textContent !== undefined) {\n option.textContent = data.text;\n } else {\n option.innerText = data.text;\n }\n }\n\n if (data.id !== undefined) {\n option.value = data.id;\n }\n\n if (data.disabled) {\n option.disabled = true;\n }\n\n if (data.selected) {\n option.selected = true;\n }\n\n if (data.title) {\n option.title = data.title;\n }\n\n var $option = $(option);\n\n var normalizedData = this._normalizeItem(data);\n normalizedData.element = option;\n\n // Override the option's data with the combined data\n Utils.StoreData(option, 'data', normalizedData);\n\n return $option;\n };\n\n SelectAdapter.prototype.item = function ($option) {\n var data = {};\n\n data = Utils.GetData($option[0], 'data');\n\n if (data != null) {\n return data;\n }\n\n if ($option.is('option')) {\n data = {\n id: $option.val(),\n text: $option.text(),\n disabled: $option.prop('disabled'),\n selected: $option.prop('selected'),\n title: $option.prop('title')\n };\n } else if ($option.is('optgroup')) {\n data = {\n text: $option.prop('label'),\n children: [],\n title: $option.prop('title')\n };\n\n var $children = $option.children('option');\n var children = [];\n\n for (var c = 0; c < $children.length; c++) {\n var $child = $($children[c]);\n\n var child = this.item($child);\n\n children.push(child);\n }\n\n data.children = children;\n }\n\n data = this._normalizeItem(data);\n data.element = $option[0];\n\n Utils.StoreData($option[0], 'data', data);\n\n return data;\n };\n\n SelectAdapter.prototype._normalizeItem = function (item) {\n if (item !== Object(item)) {\n item = {\n id: item,\n text: item\n };\n }\n\n item = $.extend({}, {\n text: ''\n }, item);\n\n var defaults = {\n selected: false,\n disabled: false\n };\n\n if (item.id != null) {\n item.id = item.id.toString();\n }\n\n if (item.text != null) {\n item.text = item.text.toString();\n }\n\n if (item._resultId == null && item.id && this.container != null) {\n item._resultId = this.generateResultId(this.container, item);\n }\n\n return $.extend({}, defaults, item);\n };\n\n SelectAdapter.prototype.matches = function (params, data) {\n var matcher = this.options.get('matcher');\n\n return matcher(params, data);\n };\n\n return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n './select',\n '../utils',\n 'jquery'\n], function (SelectAdapter, Utils, $) {\n function ArrayAdapter ($element, options) {\n this._dataToConvert = options.get('data') || [];\n\n ArrayAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(ArrayAdapter, SelectAdapter);\n\n ArrayAdapter.prototype.bind = function (container, $container) {\n ArrayAdapter.__super__.bind.call(this, container, $container);\n\n this.addOptions(this.convertToOptions(this._dataToConvert));\n };\n\n ArrayAdapter.prototype.select = function (data) {\n var $option = this.$element.find('option').filter(function (i, elm) {\n return elm.value == data.id.toString();\n });\n\n if ($option.length === 0) {\n $option = this.option(data);\n\n this.addOptions($option);\n }\n\n ArrayAdapter.__super__.select.call(this, data);\n };\n\n ArrayAdapter.prototype.convertToOptions = function (data) {\n var self = this;\n\n var $existing = this.$element.find('option');\n var existingIds = $existing.map(function () {\n return self.item($(this)).id;\n }).get();\n\n var $options = [];\n\n // Filter out all items except for the one passed in the argument\n function onlyItem (item) {\n return function () {\n return $(this).val() == item.id;\n };\n }\n\n for (var d = 0; d < data.length; d++) {\n var item = this._normalizeItem(data[d]);\n\n // Skip items which were pre-loaded, only merge the data\n if ($.inArray(item.id, existingIds) >= 0) {\n var $existingOption = $existing.filter(onlyItem(item));\n\n var existingData = this.item($existingOption);\n var newData = $.extend(true, {}, item, existingData);\n\n var $newOption = this.option(newData);\n\n $existingOption.replaceWith($newOption);\n\n continue;\n }\n\n var $option = this.option(item);\n\n if (item.children) {\n var $children = this.convertToOptions(item.children);\n\n Utils.appendMany($option, $children);\n }\n\n $options.push($option);\n }\n\n return $options;\n };\n\n return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n './array',\n '../utils',\n 'jquery'\n], function (ArrayAdapter, Utils, $) {\n function AjaxAdapter ($element, options) {\n this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n if (this.ajaxOptions.processResults != null) {\n this.processResults = this.ajaxOptions.processResults;\n }\n\n AjaxAdapter.__super__.constructor.call(this, $element, options);\n }\n\n Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n AjaxAdapter.prototype._applyDefaults = function (options) {\n var defaults = {\n data: function (params) {\n return $.extend({}, params, {\n q: params.term\n });\n },\n transport: function (params, success, failure) {\n var $request = $.ajax(params);\n\n $request.then(success);\n $request.fail(failure);\n\n return $request;\n }\n };\n\n return $.extend({}, defaults, options, true);\n };\n\n AjaxAdapter.prototype.processResults = function (results) {\n return results;\n };\n\n AjaxAdapter.prototype.query = function (params, callback) {\n var matches = [];\n var self = this;\n\n if (this._request != null) {\n // JSONP requests cannot always be aborted\n if ($.isFunction(this._request.abort)) {\n this._request.abort();\n }\n\n this._request = null;\n }\n\n var options = $.extend({\n type: 'GET'\n }, this.ajaxOptions);\n\n if (typeof options.url === 'function') {\n options.url = options.url.call(this.$element, params);\n }\n\n if (typeof options.data === 'function') {\n options.data = options.data.call(this.$element, params);\n }\n\n function request () {\n var $request = options.transport(options, function (data) {\n var results = self.processResults(data, params);\n\n if (self.options.get('debug') && window.console && console.error) {\n // Check to make sure that the response included a `results` key.\n if (!results || !results.results || !$.isArray(results.results)) {\n console.error(\n 'Select2: The AJAX results did not return an array in the ' +\n '`results` key of the response.'\n );\n }\n }\n\n callback(results);\n }, function () {\n // Attempt to detect if a request was aborted\n // Only works if the transport exposes a status property\n if ('status' in $request &&\n ($request.status === 0 || $request.status === '0')) {\n return;\n }\n\n self.trigger('results:message', {\n message: 'errorLoading'\n });\n });\n\n self._request = $request;\n }\n\n if (this.ajaxOptions.delay && params.term != null) {\n if (this._queryTimeout) {\n window.clearTimeout(this._queryTimeout);\n }\n\n this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n } else {\n request();\n }\n };\n\n return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n 'jquery'\n], function ($) {\n function Tags (decorated, $element, options) {\n var tags = options.get('tags');\n\n var createTag = options.get('createTag');\n\n if (createTag !== undefined) {\n this.createTag = createTag;\n }\n\n var insertTag = options.get('insertTag');\n\n if (insertTag !== undefined) {\n this.insertTag = insertTag;\n }\n\n decorated.call(this, $element, options);\n\n if ($.isArray(tags)) {\n for (var t = 0; t < tags.length; t++) {\n var tag = tags[t];\n var item = this._normalizeItem(tag);\n\n var $option = this.option(item);\n\n this.$element.append($option);\n }\n }\n }\n\n Tags.prototype.query = function (decorated, params, callback) {\n var self = this;\n\n this._removeOldTags();\n\n if (params.term == null || params.page != null) {\n decorated.call(this, params, callback);\n return;\n }\n\n function wrapper (obj, child) {\n var data = obj.results;\n\n for (var i = 0; i < data.length; i++) {\n var option = data[i];\n\n var checkChildren = (\n option.children != null &&\n !wrapper({\n results: option.children\n }, true)\n );\n\n var optionText = (option.text || '').toUpperCase();\n var paramsTerm = (params.term || '').toUpperCase();\n\n var checkText = optionText === paramsTerm;\n\n if (checkText || checkChildren) {\n if (child) {\n return false;\n }\n\n obj.data = data;\n callback(obj);\n\n return;\n }\n }\n\n if (child) {\n return true;\n }\n\n var tag = self.createTag(params);\n\n if (tag != null) {\n var $option = self.option(tag);\n $option.attr('data-select2-tag', true);\n\n self.addOptions([$option]);\n\n self.insertTag(data, tag);\n }\n\n obj.results = data;\n\n callback(obj);\n }\n\n decorated.call(this, params, wrapper);\n };\n\n Tags.prototype.createTag = function (decorated, params) {\n var term = $.trim(params.term);\n\n if (term === '') {\n return null;\n }\n\n return {\n id: term,\n text: term\n };\n };\n\n Tags.prototype.insertTag = function (_, data, tag) {\n data.unshift(tag);\n };\n\n Tags.prototype._removeOldTags = function (_) {\n var $options = this.$element.find('option[data-select2-tag]');\n\n $options.each(function () {\n if (this.selected) {\n return;\n }\n\n $(this).remove();\n });\n };\n\n return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n 'jquery'\n], function ($) {\n function Tokenizer (decorated, $element, options) {\n var tokenizer = options.get('tokenizer');\n\n if (tokenizer !== undefined) {\n this.tokenizer = tokenizer;\n }\n\n decorated.call(this, $element, options);\n }\n\n Tokenizer.prototype.bind = function (decorated, container, $container) {\n decorated.call(this, container, $container);\n\n this.$search = container.dropdown.$search || container.selection.$search ||\n $container.find('.select2-search__field');\n };\n\n Tokenizer.prototype.query = function (decorated, params, callback) {\n var self = this;\n\n function createAndSelect (data) {\n // Normalize the data object so we can use it for checks\n var item = self._normalizeItem(data);\n\n // Check if the data object already exists as a tag\n // Select it if it doesn't\n var $existingOptions = self.$element.find('option').filter(function () {\n return $(this).val() === item.id;\n });\n\n // If an existing option wasn't found for it, create the option\n if (!$existingOptions.length) {\n var $option = self.option(item);\n $option.attr('data-select2-tag', true);\n\n self._removeOldTags();\n self.addOptions([$option]);\n }\n\n // Select the item, now that we know there is an option for it\n select(item);\n }\n\n function select (data) {\n self.trigger('select', {\n data: data\n });\n }\n\n params.term = params.term || '';\n\n var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n if (tokenData.term !== params.term) {\n // Replace the search term if we have the search box\n if (this.$search.length) {\n this.$search.val(tokenData.term);\n this.$search.trigger('focus');\n }\n\n params.term = tokenData.term;\n }\n\n decorated.call(this, params, callback);\n };\n\n Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n var separators = options.get('tokenSeparators') || [];\n var term = params.term;\n var i = 0;\n\n var createTag = this.createTag || function (params) {\n return {\n id: params.term,\n text: params.term\n };\n };\n\n while (i < term.length) {\n var termChar = term[i];\n\n if ($.inArray(termChar, separators) === -1) {\n i++;\n\n continue;\n }\n\n var part = term.substr(0, i);\n var partParams = $.extend({}, params, {\n term: part\n });\n\n var data = createTag(partParams);\n\n if (data == null) {\n i++;\n continue;\n }\n\n callback(data);\n\n // Reset the term to not include the tokenized portion\n term = term.substr(i + 1) || '';\n i = 0;\n }\n\n return {\n term: term\n };\n };\n\n return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n function MinimumInputLength (decorated, $e, options) {\n this.minimumInputLength = options.get('minimumInputLength');\n\n decorated.call(this, $e, options);\n }\n\n MinimumInputLength.prototype.query = function (decorated, params, callback) {\n params.term = params.term || '';\n\n if (params.term.length < this.minimumInputLength) {\n this.trigger('results:message', {\n message: 'inputTooShort',\n args: {\n minimum: this.minimumInputLength,\n input: params.term,\n params: params\n }\n });\n\n return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n function MaximumInputLength (decorated, $e, options) {\n this.maximumInputLength = options.get('maximumInputLength');\n\n decorated.call(this, $e, options);\n }\n\n MaximumInputLength.prototype.query = function (decorated, params, callback) {\n params.term = params.term || '';\n\n if (this.maximumInputLength > 0 &&\n params.term.length > this.maximumInputLength) {\n this.trigger('results:message', {\n message: 'inputTooLong',\n args: {\n maximum: this.maximumInputLength,\n input: params.term,\n params: params\n }\n });\n\n return;\n }\n\n decorated.call(this, params, callback);\n };\n\n return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n function MaximumSelectionLength (decorated, $e, options) {\n this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n decorated.call(this, $e, options);\n }\n\n MaximumSelectionLength.prototype.bind =\n function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('select', function () {\n self._checkIfMaximumSelected();\n });\n };\n\n MaximumSelectionLength.prototype.query =\n function (decorated, params, callback) {\n var self = this;\n\n this._checkIfMaximumSelected(function () {\n decorated.call(self, params, callback);\n });\n };\n\n MaximumSelectionLength.prototype._checkIfMaximumSelected =\n function (_, successCallback) {\n var self = this;\n\n this.current(function (currentData) {\n var count = currentData != null ? currentData.length : 0;\n if (self.maximumSelectionLength > 0 &&\n count >= self.maximumSelectionLength) {\n self.trigger('results:message', {\n message: 'maximumSelected',\n args: {\n maximum: self.maximumSelectionLength\n }\n });\n return;\n }\n\n if (successCallback) {\n successCallback();\n }\n });\n };\n\n return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n 'jquery',\n './utils'\n], function ($, Utils) {\n function Dropdown ($element, options) {\n this.$element = $element;\n this.options = options;\n\n Dropdown.__super__.constructor.call(this);\n }\n\n Utils.Extend(Dropdown, Utils.Observable);\n\n Dropdown.prototype.render = function () {\n var $dropdown = $(\n '<span class=\"select2-dropdown\">' +\n '<span class=\"select2-results\"></span>' +\n '</span>'\n );\n\n $dropdown.attr('dir', this.options.get('dir'));\n\n this.$dropdown = $dropdown;\n\n return $dropdown;\n };\n\n Dropdown.prototype.bind = function () {\n // Should be implemented in subclasses\n };\n\n Dropdown.prototype.position = function ($dropdown, $container) {\n // Should be implemented in subclasses\n };\n\n Dropdown.prototype.destroy = function () {\n // Remove the dropdown from the DOM\n this.$dropdown.remove();\n };\n\n return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n 'jquery',\n '../utils'\n], function ($, Utils) {\n function Search () { }\n\n Search.prototype.render = function (decorated) {\n var $rendered = decorated.call(this);\n\n var $search = $(\n '<span class=\"select2-search select2-search--dropdown\">' +\n '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n '</span>'\n );\n\n this.$searchContainer = $search;\n this.$search = $search.find('input');\n\n $rendered.prepend($search);\n\n return $rendered;\n };\n\n Search.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n var resultsId = container.id + '-results';\n\n decorated.call(this, container, $container);\n\n this.$search.on('keydown', function (evt) {\n self.trigger('keypress', evt);\n\n self._keyUpPrevented = evt.isDefaultPrevented();\n });\n\n // Workaround for browsers which do not support the `input` event\n // This will prevent double-triggering of events for browsers which support\n // both the `keyup` and `input` events.\n this.$search.on('input', function (evt) {\n // Unbind the duplicated `keyup` event\n $(this).off('keyup');\n });\n\n this.$search.on('keyup input', function (evt) {\n self.handleSearch(evt);\n });\n\n container.on('open', function () {\n self.$search.attr('tabindex', 0);\n self.$search.attr('aria-controls', resultsId);\n\n self.$search.trigger('focus');\n\n window.setTimeout(function () {\n self.$search.trigger('focus');\n }, 0);\n });\n\n container.on('close', function () {\n self.$search.attr('tabindex', -1);\n self.$search.removeAttr('aria-controls');\n self.$search.removeAttr('aria-activedescendant');\n\n self.$search.val('');\n self.$search.trigger('blur');\n });\n\n container.on('focus', function () {\n if (!container.isOpen()) {\n self.$search.trigger('focus');\n }\n });\n\n container.on('results:all', function (params) {\n if (params.query.term == null || params.query.term === '') {\n var showSearch = self.showSearch(params);\n\n if (showSearch) {\n self.$searchContainer.removeClass('select2-search--hide');\n } else {\n self.$searchContainer.addClass('select2-search--hide');\n }\n }\n });\n\n container.on('results:focus', function (params) {\n if (params.data._resultId) {\n self.$search.attr('aria-activedescendant', params.data._resultId);\n } else {\n self.$search.removeAttr('aria-activedescendant');\n }\n });\n };\n\n Search.prototype.handleSearch = function (evt) {\n if (!this._keyUpPrevented) {\n var input = this.$search.val();\n\n this.trigger('query', {\n term: input\n });\n }\n\n this._keyUpPrevented = false;\n };\n\n Search.prototype.showSearch = function (_, params) {\n return true;\n };\n\n return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n function HidePlaceholder (decorated, $element, options, dataAdapter) {\n this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n decorated.call(this, $element, options, dataAdapter);\n }\n\n HidePlaceholder.prototype.append = function (decorated, data) {\n data.results = this.removePlaceholder(data.results);\n\n decorated.call(this, data);\n };\n\n HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n if (typeof placeholder === 'string') {\n placeholder = {\n id: '',\n text: placeholder\n };\n }\n\n return placeholder;\n };\n\n HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n var modifiedData = data.slice(0);\n\n for (var d = data.length - 1; d >= 0; d--) {\n var item = data[d];\n\n if (this.placeholder.id === item.id) {\n modifiedData.splice(d, 1);\n }\n }\n\n return modifiedData;\n };\n\n return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n 'jquery'\n], function ($) {\n function InfiniteScroll (decorated, $element, options, dataAdapter) {\n this.lastParams = {};\n\n decorated.call(this, $element, options, dataAdapter);\n\n this.$loadingMore = this.createLoadingMore();\n this.loading = false;\n }\n\n InfiniteScroll.prototype.append = function (decorated, data) {\n this.$loadingMore.remove();\n this.loading = false;\n\n decorated.call(this, data);\n\n if (this.showLoadingMore(data)) {\n this.$results.append(this.$loadingMore);\n this.loadMoreIfNeeded();\n }\n };\n\n InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('query', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n\n container.on('query:append', function (params) {\n self.lastParams = params;\n self.loading = true;\n });\n\n this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n };\n\n InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n var isLoadMoreVisible = $.contains(\n document.documentElement,\n this.$loadingMore[0]\n );\n\n if (this.loading || !isLoadMoreVisible) {\n return;\n }\n\n var currentOffset = this.$results.offset().top +\n this.$results.outerHeight(false);\n var loadingMoreOffset = this.$loadingMore.offset().top +\n this.$loadingMore.outerHeight(false);\n\n if (currentOffset + 50 >= loadingMoreOffset) {\n this.loadMore();\n }\n };\n\n InfiniteScroll.prototype.loadMore = function () {\n this.loading = true;\n\n var params = $.extend({}, {page: 1}, this.lastParams);\n\n params.page++;\n\n this.trigger('query:append', params);\n };\n\n InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n return data.pagination && data.pagination.more;\n };\n\n InfiniteScroll.prototype.createLoadingMore = function () {\n var $option = $(\n '<li ' +\n 'class=\"select2-results__option select2-results__option--load-more\"' +\n 'role=\"option\" aria-disabled=\"true\"></li>'\n );\n\n var message = this.options.get('translations').get('loadingMore');\n\n $option.html(message(this.lastParams));\n\n return $option;\n };\n\n return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n 'jquery',\n '../utils'\n], function ($, Utils) {\n function AttachBody (decorated, $element, options) {\n this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n decorated.call(this, $element, options);\n }\n\n AttachBody.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('open', function () {\n self._showDropdown();\n self._attachPositioningHandler(container);\n\n // Must bind after the results handlers to ensure correct sizing\n self._bindContainerResultHandlers(container);\n });\n\n container.on('close', function () {\n self._hideDropdown();\n self._detachPositioningHandler(container);\n });\n\n this.$dropdownContainer.on('mousedown', function (evt) {\n evt.stopPropagation();\n });\n };\n\n AttachBody.prototype.destroy = function (decorated) {\n decorated.call(this);\n\n this.$dropdownContainer.remove();\n };\n\n AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n // Clone all of the container classes\n $dropdown.attr('class', $container.attr('class'));\n\n $dropdown.removeClass('select2');\n $dropdown.addClass('select2-container--open');\n\n $dropdown.css({\n position: 'absolute',\n top: -999999\n });\n\n this.$container = $container;\n };\n\n AttachBody.prototype.render = function (decorated) {\n var $container = $('<span></span>');\n\n var $dropdown = decorated.call(this);\n $container.append($dropdown);\n\n this.$dropdownContainer = $container;\n\n return $container;\n };\n\n AttachBody.prototype._hideDropdown = function (decorated) {\n this.$dropdownContainer.detach();\n };\n\n AttachBody.prototype._bindContainerResultHandlers =\n function (decorated, container) {\n\n // These should only be bound once\n if (this._containerResultsHandlersBound) {\n return;\n }\n\n var self = this;\n\n container.on('results:all', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('results:append', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('results:message', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('select', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n container.on('unselect', function () {\n self._positionDropdown();\n self._resizeDropdown();\n });\n\n this._containerResultsHandlersBound = true;\n };\n\n AttachBody.prototype._attachPositioningHandler =\n function (decorated, container) {\n var self = this;\n\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\n\n var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.each(function () {\n Utils.StoreData(this, 'select2-scroll-position', {\n x: $(this).scrollLeft(),\n y: $(this).scrollTop()\n });\n });\n\n $watchers.on(scrollEvent, function (ev) {\n var position = Utils.GetData(this, 'select2-scroll-position');\n $(this).scrollTop(position.y);\n });\n\n $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n function (e) {\n self._positionDropdown();\n self._resizeDropdown();\n });\n };\n\n AttachBody.prototype._detachPositioningHandler =\n function (decorated, container) {\n var scrollEvent = 'scroll.select2.' + container.id;\n var resizeEvent = 'resize.select2.' + container.id;\n var orientationEvent = 'orientationchange.select2.' + container.id;\n\n var $watchers = this.$container.parents().filter(Utils.hasScroll);\n $watchers.off(scrollEvent);\n\n $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n };\n\n AttachBody.prototype._positionDropdown = function () {\n var $window = $(window);\n\n var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n var newDirection = null;\n\n var offset = this.$container.offset();\n\n offset.bottom = offset.top + this.$container.outerHeight(false);\n\n var container = {\n height: this.$container.outerHeight(false)\n };\n\n container.top = offset.top;\n container.bottom = offset.top + container.height;\n\n var dropdown = {\n height: this.$dropdown.outerHeight(false)\n };\n\n var viewport = {\n top: $window.scrollTop(),\n bottom: $window.scrollTop() + $window.height()\n };\n\n var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n var css = {\n left: offset.left,\n top: container.bottom\n };\n\n // Determine what the parent element is to use for calculating the offset\n var $offsetParent = this.$dropdownParent;\n\n // For statically positioned elements, we need to get the element\n // that is determining the offset\n if ($offsetParent.css('position') === 'static') {\n $offsetParent = $offsetParent.offsetParent();\n }\n\n var parentOffset = {\n top: 0,\n left: 0\n };\n\n if (\n $.contains(document.body, $offsetParent[0]) ||\n $offsetParent[0].isConnected\n ) {\n parentOffset = $offsetParent.offset();\n }\n\n css.top -= parentOffset.top;\n css.left -= parentOffset.left;\n\n if (!isCurrentlyAbove && !isCurrentlyBelow) {\n newDirection = 'below';\n }\n\n if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n newDirection = 'above';\n } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n newDirection = 'below';\n }\n\n if (newDirection == 'above' ||\n (isCurrentlyAbove && newDirection !== 'below')) {\n css.top = container.top - parentOffset.top - dropdown.height;\n }\n\n if (newDirection != null) {\n this.$dropdown\n .removeClass('select2-dropdown--below select2-dropdown--above')\n .addClass('select2-dropdown--' + newDirection);\n this.$container\n .removeClass('select2-container--below select2-container--above')\n .addClass('select2-container--' + newDirection);\n }\n\n this.$dropdownContainer.css(css);\n };\n\n AttachBody.prototype._resizeDropdown = function () {\n var css = {\n width: this.$container.outerWidth(false) + 'px'\n };\n\n if (this.options.get('dropdownAutoWidth')) {\n css.minWidth = css.width;\n css.position = 'relative';\n css.width = 'auto';\n }\n\n this.$dropdown.css(css);\n };\n\n AttachBody.prototype._showDropdown = function (decorated) {\n this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n this._positionDropdown();\n this._resizeDropdown();\n };\n\n return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n function countResults (data) {\n var count = 0;\n\n for (var d = 0; d < data.length; d++) {\n var item = data[d];\n\n if (item.children) {\n count += countResults(item.children);\n } else {\n count++;\n }\n }\n\n return count;\n }\n\n function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n if (this.minimumResultsForSearch < 0) {\n this.minimumResultsForSearch = Infinity;\n }\n\n decorated.call(this, $element, options, dataAdapter);\n }\n\n MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n if (countResults(params.data.results) < this.minimumResultsForSearch) {\n return false;\n }\n\n return decorated.call(this, params);\n };\n\n return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n '../utils'\n], function (Utils) {\n function SelectOnClose () { }\n\n SelectOnClose.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('close', function (params) {\n self._handleSelectOnClose(params);\n });\n };\n\n SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n if (params && params.originalSelect2Event != null) {\n var event = params.originalSelect2Event;\n\n // Don't select an item if the close event was triggered from a select or\n // unselect event\n if (event._type === 'select' || event._type === 'unselect') {\n return;\n }\n }\n\n var $highlightedResults = this.getHighlightedResults();\n\n // Only select highlighted results\n if ($highlightedResults.length < 1) {\n return;\n }\n\n var data = Utils.GetData($highlightedResults[0], 'data');\n\n // Don't re-select already selected resulte\n if (\n (data.element != null && data.element.selected) ||\n (data.element == null && data.selected)\n ) {\n return;\n }\n\n this.trigger('select', {\n data: data\n });\n };\n\n return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n function CloseOnSelect () { }\n\n CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n var self = this;\n\n decorated.call(this, container, $container);\n\n container.on('select', function (evt) {\n self._selectTriggered(evt);\n });\n\n container.on('unselect', function (evt) {\n self._selectTriggered(evt);\n });\n };\n\n CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n var originalEvent = evt.originalEvent;\n\n // Don't close if the control key is being held\n if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n return;\n }\n\n this.trigger('close', {\n originalEvent: originalEvent,\n originalSelect2Event: evt\n });\n };\n\n return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n // English\n return {\n errorLoading: function () {\n return 'The results could not be loaded.';\n },\n inputTooLong: function (args) {\n var overChars = args.input.length - args.maximum;\n\n var message = 'Please delete ' + overChars + ' character';\n\n if (overChars != 1) {\n message += 's';\n }\n\n return message;\n },\n inputTooShort: function (args) {\n var remainingChars = args.minimum - args.input.length;\n\n var message = 'Please enter ' + remainingChars + ' or more characters';\n\n return message;\n },\n loadingMore: function () {\n return 'Loading more results…';\n },\n maximumSelected: function (args) {\n var message = 'You can only select ' + args.maximum + ' item';\n\n if (args.maximum != 1) {\n message += 's';\n }\n\n return message;\n },\n noResults: function () {\n return 'No results found';\n },\n searching: function () {\n return 'Searching…';\n },\n removeAllItems: function () {\n return 'Remove all items';\n }\n };\n});\n\nS2.define('select2/defaults',[\n 'jquery',\n 'require',\n\n './results',\n\n './selection/single',\n './selection/multiple',\n './selection/placeholder',\n './selection/allowClear',\n './selection/search',\n './selection/eventRelay',\n\n './utils',\n './translation',\n './diacritics',\n\n './data/select',\n './data/array',\n './data/ajax',\n './data/tags',\n './data/tokenizer',\n './data/minimumInputLength',\n './data/maximumInputLength',\n './data/maximumSelectionLength',\n\n './dropdown',\n './dropdown/search',\n './dropdown/hidePlaceholder',\n './dropdown/infiniteScroll',\n './dropdown/attachBody',\n './dropdown/minimumResultsForSearch',\n './dropdown/selectOnClose',\n './dropdown/closeOnSelect',\n\n './i18n/en'\n], function ($, require,\n\n ResultsList,\n\n SingleSelection, MultipleSelection, Placeholder, AllowClear,\n SelectionSearch, EventRelay,\n\n Utils, Translation, DIACRITICS,\n\n SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n EnglishTranslation) {\n function Defaults () {\n this.reset();\n }\n\n Defaults.prototype.apply = function (options) {\n options = $.extend(true, {}, this.defaults, options);\n\n if (options.dataAdapter == null) {\n if (options.ajax != null) {\n options.dataAdapter = AjaxData;\n } else if (options.data != null) {\n options.dataAdapter = ArrayData;\n } else {\n options.dataAdapter = SelectData;\n }\n\n if (options.minimumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MinimumInputLength\n );\n }\n\n if (options.maximumInputLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MaximumInputLength\n );\n }\n\n if (options.maximumSelectionLength > 0) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n MaximumSelectionLength\n );\n }\n\n if (options.tags) {\n options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n }\n\n if (options.tokenSeparators != null || options.tokenizer != null) {\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n Tokenizer\n );\n }\n\n if (options.query != null) {\n var Query = require(options.amdBase + 'compat/query');\n\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n Query\n );\n }\n\n if (options.initSelection != null) {\n var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n options.dataAdapter = Utils.Decorate(\n options.dataAdapter,\n InitSelection\n );\n }\n }\n\n if (options.resultsAdapter == null) {\n options.resultsAdapter = ResultsList;\n\n if (options.ajax != null) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n InfiniteScroll\n );\n }\n\n if (options.placeholder != null) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n HidePlaceholder\n );\n }\n\n if (options.selectOnClose) {\n options.resultsAdapter = Utils.Decorate(\n options.resultsAdapter,\n SelectOnClose\n );\n }\n }\n\n if (options.dropdownAdapter == null) {\n if (options.multiple) {\n options.dropdownAdapter = Dropdown;\n } else {\n var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n options.dropdownAdapter = SearchableDropdown;\n }\n\n if (options.minimumResultsForSearch !== 0) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n MinimumResultsForSearch\n );\n }\n\n if (options.closeOnSelect) {\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n CloseOnSelect\n );\n }\n\n if (\n options.dropdownCssClass != null ||\n options.dropdownCss != null ||\n options.adaptDropdownCssClass != null\n ) {\n var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n DropdownCSS\n );\n }\n\n options.dropdownAdapter = Utils.Decorate(\n options.dropdownAdapter,\n AttachBody\n );\n }\n\n if (options.selectionAdapter == null) {\n if (options.multiple) {\n options.selectionAdapter = MultipleSelection;\n } else {\n options.selectionAdapter = SingleSelection;\n }\n\n // Add the placeholder mixin if a placeholder was specified\n if (options.placeholder != null) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n Placeholder\n );\n }\n\n if (options.allowClear) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n AllowClear\n );\n }\n\n if (options.multiple) {\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n SelectionSearch\n );\n }\n\n if (\n options.containerCssClass != null ||\n options.containerCss != null ||\n options.adaptContainerCssClass != null\n ) {\n var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n ContainerCSS\n );\n }\n\n options.selectionAdapter = Utils.Decorate(\n options.selectionAdapter,\n EventRelay\n );\n }\n\n // If the defaults were not previously applied from an element, it is\n // possible for the language option to have not been resolved\n options.language = this._resolveLanguage(options.language);\n\n // Always fall back to English since it will always be complete\n options.language.push('en');\n\n var uniqueLanguages = [];\n\n for (var l = 0; l < options.language.length; l++) {\n var language = options.language[l];\n\n if (uniqueLanguages.indexOf(language) === -1) {\n uniqueLanguages.push(language);\n }\n }\n\n options.language = uniqueLanguages;\n\n options.translations = this._processTranslations(\n options.language,\n options.debug\n );\n\n return options;\n };\n\n Defaults.prototype.reset = function () {\n function stripDiacritics (text) {\n // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n function match(a) {\n return DIACRITICS[a] || a;\n }\n\n return text.replace(/[^\\u0000-\\u007E]/g, match);\n }\n\n function matcher (params, data) {\n // Always return the object if there is nothing to compare\n if ($.trim(params.term) === '') {\n return data;\n }\n\n // Do a recursive check for options with children\n if (data.children && data.children.length > 0) {\n // Clone the data object if there are children\n // This is required as we modify the object to remove any non-matches\n var match = $.extend(true, {}, data);\n\n // Check each child of the option\n for (var c = data.children.length - 1; c >= 0; c--) {\n var child = data.children[c];\n\n var matches = matcher(params, child);\n\n // If there wasn't a match, remove the object in the array\n if (matches == null) {\n match.children.splice(c, 1);\n }\n }\n\n // If any children matched, return the new object\n if (match.children.length > 0) {\n return match;\n }\n\n // If there were no matching children, check just the plain object\n return matcher(params, match);\n }\n\n var original = stripDiacritics(data.text).toUpperCase();\n var term = stripDiacritics(params.term).toUpperCase();\n\n // Check if the text contains the term\n if (original.indexOf(term) > -1) {\n return data;\n }\n\n // If it doesn't contain the term, don't return anything\n return null;\n }\n\n this.defaults = {\n amdBase: './',\n amdLanguageBase: './i18n/',\n closeOnSelect: true,\n debug: false,\n dropdownAutoWidth: false,\n escapeMarkup: Utils.escapeMarkup,\n language: {},\n matcher: matcher,\n minimumInputLength: 0,\n maximumInputLength: 0,\n maximumSelectionLength: 0,\n minimumResultsForSearch: 0,\n selectOnClose: false,\n scrollAfterSelect: false,\n sorter: function (data) {\n return data;\n },\n templateResult: function (result) {\n return result.text;\n },\n templateSelection: function (selection) {\n return selection.text;\n },\n theme: 'default',\n width: 'resolve'\n };\n };\n\n Defaults.prototype.applyFromElement = function (options, $element) {\n var optionLanguage = options.language;\n var defaultLanguage = this.defaults.language;\n var elementLanguage = $element.prop('lang');\n var parentLanguage = $element.closest('[lang]').prop('lang');\n\n var languages = Array.prototype.concat.call(\n this._resolveLanguage(elementLanguage),\n this._resolveLanguage(optionLanguage),\n this._resolveLanguage(defaultLanguage),\n this._resolveLanguage(parentLanguage)\n );\n\n options.language = languages;\n\n return options;\n };\n\n Defaults.prototype._resolveLanguage = function (language) {\n if (!language) {\n return [];\n }\n\n if ($.isEmptyObject(language)) {\n return [];\n }\n\n if ($.isPlainObject(language)) {\n return [language];\n }\n\n var languages;\n\n if (!$.isArray(language)) {\n languages = [language];\n } else {\n languages = language;\n }\n\n var resolvedLanguages = [];\n\n for (var l = 0; l < languages.length; l++) {\n resolvedLanguages.push(languages[l]);\n\n if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n // Extract the region information if it is included\n var languageParts = languages[l].split('-');\n var baseLanguage = languageParts[0];\n\n resolvedLanguages.push(baseLanguage);\n }\n }\n\n return resolvedLanguages;\n };\n\n Defaults.prototype._processTranslations = function (languages, debug) {\n var translations = new Translation();\n\n for (var l = 0; l < languages.length; l++) {\n var languageData = new Translation();\n\n var language = languages[l];\n\n if (typeof language === 'string') {\n try {\n // Try to load it with the original name\n languageData = Translation.loadPath(language);\n } catch (e) {\n try {\n // If we couldn't load it, check if it wasn't the full path\n language = this.defaults.amdLanguageBase + language;\n languageData = Translation.loadPath(language);\n } catch (ex) {\n // The translation could not be loaded at all. Sometimes this is\n // because of a configuration problem, other times this can be\n // because of how Select2 helps load all possible translation files\n if (debug && window.console && console.warn) {\n console.warn(\n 'Select2: The language file for \"' + language + '\" could ' +\n 'not be automatically loaded. A fallback will be used instead.'\n );\n }\n }\n }\n } else if ($.isPlainObject(language)) {\n languageData = new Translation(language);\n } else {\n languageData = language;\n }\n\n translations.extend(languageData);\n }\n\n return translations;\n };\n\n Defaults.prototype.set = function (key, value) {\n var camelKey = $.camelCase(key);\n\n var data = {};\n data[camelKey] = value;\n\n var convertedData = Utils._convertData(data);\n\n $.extend(true, this.defaults, convertedData);\n };\n\n var defaults = new Defaults();\n\n return defaults;\n});\n\nS2.define('select2/options',[\n 'require',\n 'jquery',\n './defaults',\n './utils'\n], function (require, $, Defaults, Utils) {\n function Options (options, $element) {\n this.options = options;\n\n if ($element != null) {\n this.fromElement($element);\n }\n\n if ($element != null) {\n this.options = Defaults.applyFromElement(this.options, $element);\n }\n\n this.options = Defaults.apply(this.options);\n\n if ($element && $element.is('input')) {\n var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n this.options.dataAdapter = Utils.Decorate(\n this.options.dataAdapter,\n InputCompat\n );\n }\n }\n\n Options.prototype.fromElement = function ($e) {\n var excludedData = ['select2'];\n\n if (this.options.multiple == null) {\n this.options.multiple = $e.prop('multiple');\n }\n\n if (this.options.disabled == null) {\n this.options.disabled = $e.prop('disabled');\n }\n\n if (this.options.dir == null) {\n if ($e.prop('dir')) {\n this.options.dir = $e.prop('dir');\n } else if ($e.closest('[dir]').prop('dir')) {\n this.options.dir = $e.closest('[dir]').prop('dir');\n } else {\n this.options.dir = 'ltr';\n }\n }\n\n $e.prop('disabled', this.options.disabled);\n $e.prop('multiple', this.options.multiple);\n\n if (Utils.GetData($e[0], 'select2Tags')) {\n if (this.options.debug && window.console && console.warn) {\n console.warn(\n 'Select2: The `data-select2-tags` attribute has been changed to ' +\n 'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n 'removed in future versions of Select2.'\n );\n }\n\n Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n Utils.StoreData($e[0], 'tags', true);\n }\n\n if (Utils.GetData($e[0], 'ajaxUrl')) {\n if (this.options.debug && window.console && console.warn) {\n console.warn(\n 'Select2: The `data-ajax-url` attribute has been changed to ' +\n '`data-ajax--url` and support for the old attribute will be removed' +\n ' in future versions of Select2.'\n );\n }\n\n $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n }\n\n var dataset = {};\n\n function upperCaseLetter(_, letter) {\n return letter.toUpperCase();\n }\n\n // Pre-load all of the attributes which are prefixed with `data-`\n for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n var attributeName = $e[0].attributes[attr].name;\n var prefix = 'data-';\n\n if (attributeName.substr(0, prefix.length) == prefix) {\n // Get the contents of the attribute after `data-`\n var dataName = attributeName.substring(prefix.length);\n\n // Get the data contents from the consistent source\n // This is more than likely the jQuery data helper\n var dataValue = Utils.GetData($e[0], dataName);\n\n // camelCase the attribute name to match the spec\n var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n // Store the data attribute contents into the dataset since\n dataset[camelDataName] = dataValue;\n }\n }\n\n // Prefer the element's `dataset` attribute if it exists\n // jQuery 1.x does not correctly handle data attributes with multiple dashes\n if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n dataset = $.extend(true, {}, $e[0].dataset, dataset);\n }\n\n // Prefer our internal data cache if it exists\n var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n data = Utils._convertData(data);\n\n for (var key in data) {\n if ($.inArray(key, excludedData) > -1) {\n continue;\n }\n\n if ($.isPlainObject(this.options[key])) {\n $.extend(this.options[key], data[key]);\n } else {\n this.options[key] = data[key];\n }\n }\n\n return this;\n };\n\n Options.prototype.get = function (key) {\n return this.options[key];\n };\n\n Options.prototype.set = function (key, val) {\n this.options[key] = val;\n };\n\n return Options;\n});\n\nS2.define('select2/core',[\n 'jquery',\n './options',\n './utils',\n './keys'\n], function ($, Options, Utils, KEYS) {\n var Select2 = function ($element, options) {\n if (Utils.GetData($element[0], 'select2') != null) {\n Utils.GetData($element[0], 'select2').destroy();\n }\n\n this.$element = $element;\n\n this.id = this._generateId($element);\n\n options = options || {};\n\n this.options = new Options(options, $element);\n\n Select2.__super__.constructor.call(this);\n\n // Set up the tabindex\n\n var tabindex = $element.attr('tabindex') || 0;\n Utils.StoreData($element[0], 'old-tabindex', tabindex);\n $element.attr('tabindex', '-1');\n\n // Set up containers and adapters\n\n var DataAdapter = this.options.get('dataAdapter');\n this.dataAdapter = new DataAdapter($element, this.options);\n\n var $container = this.render();\n\n this._placeContainer($container);\n\n var SelectionAdapter = this.options.get('selectionAdapter');\n this.selection = new SelectionAdapter($element, this.options);\n this.$selection = this.selection.render();\n\n this.selection.position(this.$selection, $container);\n\n var DropdownAdapter = this.options.get('dropdownAdapter');\n this.dropdown = new DropdownAdapter($element, this.options);\n this.$dropdown = this.dropdown.render();\n\n this.dropdown.position(this.$dropdown, $container);\n\n var ResultsAdapter = this.options.get('resultsAdapter');\n this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n this.$results = this.results.render();\n\n this.results.position(this.$results, this.$dropdown);\n\n // Bind events\n\n var self = this;\n\n // Bind the container to all of the adapters\n this._bindAdapters();\n\n // Register any DOM event handlers\n this._registerDomEvents();\n\n // Register any internal event handlers\n this._registerDataEvents();\n this._registerSelectionEvents();\n this._registerDropdownEvents();\n this._registerResultsEvents();\n this._registerEvents();\n\n // Set the initial state\n this.dataAdapter.current(function (initialData) {\n self.trigger('selection:update', {\n data: initialData\n });\n });\n\n // Hide the original select\n $element.addClass('select2-hidden-accessible');\n $element.attr('aria-hidden', 'true');\n\n // Synchronize any monitored attributes\n this._syncAttributes();\n\n Utils.StoreData($element[0], 'select2', this);\n\n // Ensure backwards compatibility with $element.data('select2').\n $element.data('select2', this);\n };\n\n Utils.Extend(Select2, Utils.Observable);\n\n Select2.prototype._generateId = function ($element) {\n var id = '';\n\n if ($element.attr('id') != null) {\n id = $element.attr('id');\n } else if ($element.attr('name') != null) {\n id = $element.attr('name') + '-' + Utils.generateChars(2);\n } else {\n id = Utils.generateChars(4);\n }\n\n id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n id = 'select2-' + id;\n\n return id;\n };\n\n Select2.prototype._placeContainer = function ($container) {\n $container.insertAfter(this.$element);\n\n var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n if (width != null) {\n $container.css('width', width);\n }\n };\n\n Select2.prototype._resolveWidth = function ($element, method) {\n var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n if (method == 'resolve') {\n var styleWidth = this._resolveWidth($element, 'style');\n\n if (styleWidth != null) {\n return styleWidth;\n }\n\n return this._resolveWidth($element, 'element');\n }\n\n if (method == 'element') {\n var elementWidth = $element.outerWidth(false);\n\n if (elementWidth <= 0) {\n return 'auto';\n }\n\n return elementWidth + 'px';\n }\n\n if (method == 'style') {\n var style = $element.attr('style');\n\n if (typeof(style) !== 'string') {\n return null;\n }\n\n var attrs = style.split(';');\n\n for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n var attr = attrs[i].replace(/\\s/g, '');\n var matches = attr.match(WIDTH);\n\n if (matches !== null && matches.length >= 1) {\n return matches[1];\n }\n }\n\n return null;\n }\n\n if (method == 'computedstyle') {\n var computedStyle = window.getComputedStyle($element[0]);\n\n return computedStyle.width;\n }\n\n return method;\n };\n\n Select2.prototype._bindAdapters = function () {\n this.dataAdapter.bind(this, this.$container);\n this.selection.bind(this, this.$container);\n\n this.dropdown.bind(this, this.$container);\n this.results.bind(this, this.$container);\n };\n\n Select2.prototype._registerDomEvents = function () {\n var self = this;\n\n this.$element.on('change.select2', function () {\n self.dataAdapter.current(function (data) {\n self.trigger('selection:update', {\n data: data\n });\n });\n });\n\n this.$element.on('focus.select2', function (evt) {\n self.trigger('focus', evt);\n });\n\n this._syncA = Utils.bind(this._syncAttributes, this);\n this._syncS = Utils.bind(this._syncSubtree, this);\n\n if (this.$element[0].attachEvent) {\n this.$element[0].attachEvent('onpropertychange', this._syncA);\n }\n\n var observer = window.MutationObserver ||\n window.WebKitMutationObserver ||\n window.MozMutationObserver\n ;\n\n if (observer != null) {\n this._observer = new observer(function (mutations) {\n $.each(mutations, self._syncA);\n $.each(mutations, self._syncS);\n });\n this._observer.observe(this.$element[0], {\n attributes: true,\n childList: true,\n subtree: false\n });\n } else if (this.$element[0].addEventListener) {\n this.$element[0].addEventListener(\n 'DOMAttrModified',\n self._syncA,\n false\n );\n this.$element[0].addEventListener(\n 'DOMNodeInserted',\n self._syncS,\n false\n );\n this.$element[0].addEventListener(\n 'DOMNodeRemoved',\n self._syncS,\n false\n );\n }\n };\n\n Select2.prototype._registerDataEvents = function () {\n var self = this;\n\n this.dataAdapter.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerSelectionEvents = function () {\n var self = this;\n var nonRelayEvents = ['toggle', 'focus'];\n\n this.selection.on('toggle', function () {\n self.toggleDropdown();\n });\n\n this.selection.on('focus', function (params) {\n self.focus(params);\n });\n\n this.selection.on('*', function (name, params) {\n if ($.inArray(name, nonRelayEvents) !== -1) {\n return;\n }\n\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerDropdownEvents = function () {\n var self = this;\n\n this.dropdown.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerResultsEvents = function () {\n var self = this;\n\n this.results.on('*', function (name, params) {\n self.trigger(name, params);\n });\n };\n\n Select2.prototype._registerEvents = function () {\n var self = this;\n\n this.on('open', function () {\n self.$container.addClass('select2-container--open');\n });\n\n this.on('close', function () {\n self.$container.removeClass('select2-container--open');\n });\n\n this.on('enable', function () {\n self.$container.removeClass('select2-container--disabled');\n });\n\n this.on('disable', function () {\n self.$container.addClass('select2-container--disabled');\n });\n\n this.on('blur', function () {\n self.$container.removeClass('select2-container--focus');\n });\n\n this.on('query', function (params) {\n if (!self.isOpen()) {\n self.trigger('open', {});\n }\n\n this.dataAdapter.query(params, function (data) {\n self.trigger('results:all', {\n data: data,\n query: params\n });\n });\n });\n\n this.on('query:append', function (params) {\n this.dataAdapter.query(params, function (data) {\n self.trigger('results:append', {\n data: data,\n query: params\n });\n });\n });\n\n this.on('keypress', function (evt) {\n var key = evt.which;\n\n if (self.isOpen()) {\n if (key === KEYS.ESC || key === KEYS.TAB ||\n (key === KEYS.UP && evt.altKey)) {\n self.close();\n\n evt.preventDefault();\n } else if (key === KEYS.ENTER) {\n self.trigger('results:select', {});\n\n evt.preventDefault();\n } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n self.trigger('results:toggle', {});\n\n evt.preventDefault();\n } else if (key === KEYS.UP) {\n self.trigger('results:previous', {});\n\n evt.preventDefault();\n } else if (key === KEYS.DOWN) {\n self.trigger('results:next', {});\n\n evt.preventDefault();\n }\n } else {\n if (key === KEYS.ENTER || key === KEYS.SPACE ||\n (key === KEYS.DOWN && evt.altKey)) {\n self.open();\n\n evt.preventDefault();\n }\n }\n });\n };\n\n Select2.prototype._syncAttributes = function () {\n this.options.set('disabled', this.$element.prop('disabled'));\n\n if (this.options.get('disabled')) {\n if (this.isOpen()) {\n this.close();\n }\n\n this.trigger('disable', {});\n } else {\n this.trigger('enable', {});\n }\n };\n\n Select2.prototype._syncSubtree = function (evt, mutations) {\n var changed = false;\n var self = this;\n\n // Ignore any mutation events raised for elements that aren't options or\n // optgroups. This handles the case when the select element is destroyed\n if (\n evt && evt.target && (\n evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n )\n ) {\n return;\n }\n\n if (!mutations) {\n // If mutation events aren't supported, then we can only assume that the\n // change affected the selections\n changed = true;\n } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n for (var n = 0; n < mutations.addedNodes.length; n++) {\n var node = mutations.addedNodes[n];\n\n if (node.selected) {\n changed = true;\n }\n }\n } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n changed = true;\n }\n\n // Only re-pull the data if we think there is a change\n if (changed) {\n this.dataAdapter.current(function (currentData) {\n self.trigger('selection:update', {\n data: currentData\n });\n });\n }\n };\n\n /**\n * Override the trigger method to automatically trigger pre-events when\n * there are events that can be prevented.\n */\n Select2.prototype.trigger = function (name, args) {\n var actualTrigger = Select2.__super__.trigger;\n var preTriggerMap = {\n 'open': 'opening',\n 'close': 'closing',\n 'select': 'selecting',\n 'unselect': 'unselecting',\n 'clear': 'clearing'\n };\n\n if (args === undefined) {\n args = {};\n }\n\n if (name in preTriggerMap) {\n var preTriggerName = preTriggerMap[name];\n var preTriggerArgs = {\n prevented: false,\n name: name,\n args: args\n };\n\n actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n if (preTriggerArgs.prevented) {\n args.prevented = true;\n\n return;\n }\n }\n\n actualTrigger.call(this, name, args);\n };\n\n Select2.prototype.toggleDropdown = function () {\n if (this.options.get('disabled')) {\n return;\n }\n\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n };\n\n Select2.prototype.open = function () {\n if (this.isOpen()) {\n return;\n }\n\n this.trigger('query', {});\n };\n\n Select2.prototype.close = function () {\n if (!this.isOpen()) {\n return;\n }\n\n this.trigger('close', {});\n };\n\n Select2.prototype.isOpen = function () {\n return this.$container.hasClass('select2-container--open');\n };\n\n Select2.prototype.hasFocus = function () {\n return this.$container.hasClass('select2-container--focus');\n };\n\n Select2.prototype.focus = function (data) {\n // No need to re-trigger focus events if we are already focused\n if (this.hasFocus()) {\n return;\n }\n\n this.$container.addClass('select2-container--focus');\n this.trigger('focus', {});\n };\n\n Select2.prototype.enable = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n ' instead.'\n );\n }\n\n if (args == null || args.length === 0) {\n args = [true];\n }\n\n var disabled = !args[0];\n\n this.$element.prop('disabled', disabled);\n };\n\n Select2.prototype.data = function () {\n if (this.options.get('debug') &&\n arguments.length > 0 && window.console && console.warn) {\n console.warn(\n 'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n 'should consider setting the value instead using `$element.val()`.'\n );\n }\n\n var data = [];\n\n this.dataAdapter.current(function (currentData) {\n data = currentData;\n });\n\n return data;\n };\n\n Select2.prototype.val = function (args) {\n if (this.options.get('debug') && window.console && console.warn) {\n console.warn(\n 'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n ' removed in later Select2 versions. Use $element.val() instead.'\n );\n }\n\n if (args == null || args.length === 0) {\n return this.$element.val();\n }\n\n var newVal = args[0];\n\n if ($.isArray(newVal)) {\n newVal = $.map(newVal, function (obj) {\n return obj.toString();\n });\n }\n\n this.$element.val(newVal).trigger('change');\n };\n\n Select2.prototype.destroy = function () {\n this.$container.remove();\n\n if (this.$element[0].detachEvent) {\n this.$element[0].detachEvent('onpropertychange', this._syncA);\n }\n\n if (this._observer != null) {\n this._observer.disconnect();\n this._observer = null;\n } else if (this.$element[0].removeEventListener) {\n this.$element[0]\n .removeEventListener('DOMAttrModified', this._syncA, false);\n this.$element[0]\n .removeEventListener('DOMNodeInserted', this._syncS, false);\n this.$element[0]\n .removeEventListener('DOMNodeRemoved', this._syncS, false);\n }\n\n this._syncA = null;\n this._syncS = null;\n\n this.$element.off('.select2');\n this.$element.attr('tabindex',\n Utils.GetData(this.$element[0], 'old-tabindex'));\n\n this.$element.removeClass('select2-hidden-accessible');\n this.$element.attr('aria-hidden', 'false');\n Utils.RemoveData(this.$element[0]);\n this.$element.removeData('select2');\n\n this.dataAdapter.destroy();\n this.selection.destroy();\n this.dropdown.destroy();\n this.results.destroy();\n\n this.dataAdapter = null;\n this.selection = null;\n this.dropdown = null;\n this.results = null;\n };\n\n Select2.prototype.render = function () {\n var $container = $(\n '<span class=\"select2 select2-container\">' +\n '<span class=\"selection\"></span>' +\n '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n '</span>'\n );\n\n $container.attr('dir', this.options.get('dir'));\n\n this.$container = $container;\n\n this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n Utils.StoreData($container[0], 'element', this.$element);\n\n return $container;\n };\n\n return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n 'jquery'\n], function ($) {\n // Used to shim jQuery.mousewheel for non-full builds.\n return $;\n});\n\nS2.define('jquery.select2',[\n 'jquery',\n 'jquery-mousewheel',\n\n './select2/core',\n './select2/defaults',\n './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n if ($.fn.select2 == null) {\n // All methods that should return the element\n var thisMethods = ['open', 'close', 'destroy'];\n\n $.fn.select2 = function (options) {\n options = options || {};\n\n if (typeof options === 'object') {\n this.each(function () {\n var instanceOptions = $.extend(true, {}, options);\n\n var instance = new Select2($(this), instanceOptions);\n });\n\n return this;\n } else if (typeof options === 'string') {\n var ret;\n var args = Array.prototype.slice.call(arguments, 1);\n\n this.each(function () {\n var instance = Utils.GetData(this, 'select2');\n\n if (instance == null && window.console && console.error) {\n console.error(\n 'The select2(\\'' + options + '\\') method was called on an ' +\n 'element that is not using Select2.'\n );\n }\n\n ret = instance[options].apply(instance, args);\n });\n\n // Check if we should be returning `this`\n if ($.inArray(options, thisMethods) > -1) {\n return this;\n }\n\n return ret;\n } else {\n throw new Error('Invalid arguments for Select2: ' + options);\n }\n };\n }\n\n if ($.fn.select2.defaults == null) {\n $.fn.select2.defaults = Defaults;\n }\n\n return Select2;\n});\n\n // Return the AMD loader configuration so it can be used outside of this file\n return {\n define: S2.define,\n require: S2.require\n };\n}());\n\n // Autoload the jQuery bindings\n // We know that all of the modules exist above this, so we're safe\n var select2 = S2.require('jquery.select2');\n\n // Hold the AMD module references on the jQuery function that was just loaded\n // This allows Select2 to use the internal loader outside of this file, such\n // as in the language files.\n jQuery.fn.select2.amd = S2;\n\n // Return the Select2 instance for anyone who is importing it.\n return select2;\n}));\n","/*! smooth-scroll v14.2.1 | (c) 2018 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/smooth-scroll */\nwindow.Element&&!Element.prototype.closest&&(Element.prototype.closest=function(e){var t,n=(this.document||this.ownerDocument).querySelectorAll(e),o=this;do{for(t=n.length;--t>=0&&n.item(t)!==o;);}while(t<0&&(o=o.parentElement));return o}),(function(){function e(e,t){t=t||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent(\"CustomEvent\");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n}if(\"function\"==typeof window.CustomEvent)return!1;e.prototype=window.Event.prototype,window.CustomEvent=e})(),(function(){for(var e=0,t=[\"ms\",\"moz\",\"webkit\",\"o\"],n=0;n<t.length&&!window.requestAnimationFrame;++n)window.requestAnimationFrame=window[t[n]+\"RequestAnimationFrame\"],window.cancelAnimationFrame=window[t[n]+\"CancelAnimationFrame\"]||window[t[n]+\"CancelRequestAnimationFrame\"];window.requestAnimationFrame||(window.requestAnimationFrame=function(t,n){var o=(new Date).getTime(),i=Math.max(0,16-(o-e)),r=window.setTimeout((function(){t(o+i)}),i);return e=o+i,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(e){clearTimeout(e)})})(),(function(e,t){\"function\"==typeof define&&define.amd?define([],(function(){return t(e)})):\"object\"==typeof exports?module.exports=t(e):e.SmoothScroll=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t={ignore:\"[data-scroll-ignore]\",header:null,topOnEmptyHash:!0,speed:500,clip:!0,offset:0,easing:\"easeInOutCubic\",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},n=function(){return\"querySelector\"in document&&\"addEventListener\"in e&&\"requestAnimationFrame\"in e&&\"closest\"in e.Element.prototype},o=function(){for(var e={},t=0;t<arguments.length;t++)!(function(t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(arguments[t]);return e},i=function(t){return!!(\"matchMedia\"in e&&e.matchMedia(\"(prefers-reduced-motion)\").matches)},r=function(t){return parseInt(e.getComputedStyle(t).height,10)},a=function(e){var t;try{t=decodeURIComponent(e)}catch(n){t=e}return t},u=function(e){\"#\"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,i=-1,r=\"\",a=n.charCodeAt(0);++i<o;){if(0===(t=n.charCodeAt(i)))throw new InvalidCharacterError(\"Invalid character: the input contains U+0000.\");t>=1&&t<=31||127==t||0===i&&t>=48&&t<=57||1===i&&t>=48&&t<=57&&45===a?r+=\"\\\\\"+t.toString(16)+\" \":r+=t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(i):\"\\\\\"+n.charAt(i)}var u;try{u=decodeURIComponent(\"#\"+r)}catch(e){u=\"#\"+r}return u},c=function(e,t){var n;return\"easeInQuad\"===e.easing&&(n=t*t),\"easeOutQuad\"===e.easing&&(n=t*(2-t)),\"easeInOutQuad\"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),\"easeInCubic\"===e.easing&&(n=t*t*t),\"easeOutCubic\"===e.easing&&(n=--t*t*t+1),\"easeInOutCubic\"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),\"easeInQuart\"===e.easing&&(n=t*t*t*t),\"easeOutQuart\"===e.easing&&(n=1- --t*t*t*t),\"easeInOutQuart\"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),\"easeInQuint\"===e.easing&&(n=t*t*t*t*t),\"easeOutQuint\"===e.easing&&(n=1+--t*t*t*t*t),\"easeInOutQuint\"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t},s=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,n,o,i){var r=0;if(t.offsetParent)do{r+=t.offsetTop,t=t.offsetParent}while(t);return r=Math.max(r-n-o,0),i&&(r=Math.min(r,s()-e.innerHeight)),r},m=function(e){return e?r(e)+e.offsetTop:0},d=function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?\"#top\":\"#\"+e.id)},f=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute(\"tabindex\",\"-1\"),t.focus(),t.style.outline=\"none\"),e.scrollTo(0,n))},h=function(t,n,o,i){if(n.emitEvents&&\"function\"==typeof e.CustomEvent){var r=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:i}});document.dispatchEvent(r)}};return function(r,p){var g,v,w,y,E,b,S,A={};A.cancelScroll=function(e){cancelAnimationFrame(S),S=null,e||h(\"scrollCancel\",g)},A.animateScroll=function(n,i,r){var a=o(g||t,r||{}),u=\"[object Number]\"===Object.prototype.toString.call(n),p=u||!n.tagName?null:n;if(u||p){var v=e.pageYOffset;a.header&&!y&&(y=document.querySelector(a.header)),E||(E=m(y));var w,b,C,O=u?n:l(p,E,parseInt(\"function\"==typeof a.offset?a.offset(n,i):a.offset,10),a.clip),I=O-v,q=s(),F=0,L=function(t,o){var r=e.pageYOffset;if(t==o||r==o||(v<o&&e.innerHeight+r)>=q)return A.cancelScroll(!0),f(n,o,u),h(\"scrollStop\",a,n,i),w=null,S=null,!0},H=function(t){w||(w=t),F+=t-w,b=F/parseInt(a.speed,10),b=b>1?1:b,C=v+I*c(a,b),e.scrollTo(0,Math.floor(C)),L(C,O)||(S=e.requestAnimationFrame(H),w=t)};0===e.pageYOffset&&e.scrollTo(0,0),d(n,u,a),h(\"scrollStart\",a,n,i),A.cancelScroll(!0),e.requestAnimationFrame(H)}};var C=function(t){if(!i()&&0===t.button&&!t.metaKey&&!t.ctrlKey&&\"closest\"in t.target&&(w=t.target.closest(r))&&\"a\"===w.tagName.toLowerCase()&&!t.target.closest(g.ignore)&&w.hostname===e.location.hostname&&w.pathname===e.location.pathname&&/#/.test(w.href)){var n=u(a(w.hash)),o=g.topOnEmptyHash&&\"#\"===n?document.documentElement:document.querySelector(n);o=o||\"#top\"!==n?o:document.documentElement,o&&(t.preventDefault(),A.animateScroll(o,w))}},O=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(g)&&history.state.anchor){var t=document.querySelector(u(a(history.state.anchor)));t&&A.animateScroll(t,null,{updateURL:!1})}},I=function(e){b||(b=setTimeout((function(){b=null,E=m(y)}),66))};return A.destroy=function(){g&&(document.removeEventListener(\"click\",C,!1),e.removeEventListener(\"resize\",I,!1),e.removeEventListener(\"popstate\",O,!1),A.cancelScroll(),g=null,v=null,w=null,y=null,E=null,b=null,S=null)},A.init=function(i){if(!n())throw\"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.\";A.destroy(),g=o(t,i||{}),y=g.header?document.querySelector(g.header):null,E=m(y),document.addEventListener(\"click\",C,!1),y&&e.addEventListener(\"resize\",I,!1),g.updateURL&&g.popstate&&e.addEventListener(\"popstate\",O,!1)},A.init(p),A}}));","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","var map = {\n\t\"./bg.png\": \"./src/img/bg.png\",\n\t\"./photo1.png\": \"./src/img/photo1.png\",\n\t\"./photo2.jpg\": \"./src/img/photo2.jpg\",\n\t\"./photo3.svg\": \"./src/img/photo3.svg\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/img sync \\\\.(png|jpe?g|svg)$\";","module.exports = \"../img/bg.png\";","module.exports = \"../img/photo1.png\";","module.exports = \"../img/photo2.jpg\";","module.exports = \"../fonts/photo3.svg\";","/**\n * Add your global events here\n */\n\nmodule.exports = {\n ENVS: [\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'xxl',\n 'xxxl',\n ],\n};\n","/**\n * Add your global events here\n */\n\nmodule.exports = {\n AJAX: 'ajax-load',\n LOADED: 'load',\n MAPLOADED: 'map-loaded',\n MAPMARKERCLICK: 'map-marker-click',\n MAPPOPUPCLOSE: 'map-popup-close',\n SET_TARGET_UPDATE: 'set-target-update',\n RESTORE_FIELD: 'restore-field',\n FORM_INIT_BASICS: 'form-basics',\n FORM_INIT_STEPPED: 'form-init-stepped',\n FORM_INIT_VALIDATE: 'form-init-validate',\n FORM_INIT_VALIDATE_FIELD: 'form-init-validate-field',\n FORM_INIT_STORAGE: 'form-init-storage',\n FORM_VALIDATION_FAILED: 'form-validation-failed',\n FORM_STEPPED_NEW_STEP: 'form-new-step',\n FORM_STEPPED_FIRST_STEP: 'form-first-step',\n FORM_STEPPED_LAST_STEP: 'form-last-step',\n FORM_FIELDS: 'input,textarea,select',\n};\n","/*\n * Conflicts with 'bootstrap/js/dist/dropdown'\n */\n\"use strict\";\n\nimport $ from 'jquery';\nimport Events from '../_events';\nimport 'jquery-hoverintent/jquery.hoverIntent.js';\n\nconst HoverUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Html = $('html');\n const $Body = $('body');\n\n const NAME = 'jsHoverUI';\n const DATA_KEY = NAME;\n\n class HoverUI {\n // Constructor\n constructor(el) {\n const ui = this;\n const $el = $(el);\n ui.$el = $el;\n\n // find parent\n let $parent = $el.parents('.nav-item, .dropdown');\n $parent = $parent && $parent.length ? $parent.first() : null;\n //$parent = $parent ? $parent : $el.parent();\n ui.$parent = $parent;\n\n // find target\n let $target = $el.data('target');\n $target = $target && $target.length ? $target : null;\n $target = $target ? $target : ($parent ? $parent.find('.dropdown-menu') : null);\n\n if (!$target || !$target.length) {\n console.warn(`${NAME}: Missing target for:`);\n console.warn($el);\n return;\n }\n\n ui.$target = $target;\n\n const $triger = $parent ? $parent : $el;\n ui.$triger = $triger;\n\n // integrate with dropdown-toggle\n $('[data-toggle=\"dropdown\"]').on('click touch', (e) => {\n ui.hide();\n });\n\n if (!W.isTouch) {\n $triger.hoverIntent({\n sensitivity: 10,\n interval: 50,\n over: () => {\n ui.show();\n },\n out: () => {\n ui.hide();\n },\n });\n }\n\n $el.on('click touch', (e) => {\n if (!$el.data('allow-click')) {\n console.log('aaaa');\n e.preventDefault();\n }\n\n if (ui.isShown()) {\n ui.hide();\n } else {\n ui.show();\n }\n });\n\n $triger.addClass(`${NAME}-active`);\n }\n\n isShown() {\n return this.$target.hasClass('show');\n }\n\n show() {\n const ui = this;\n ui.$el.parents('.dropdown').not('.active').each((i, el) => {\n const $el = $(el);\n $el.find('.dropdown').removeClass('show');\n $el.addClass('show');\n });\n\n ui.$target.addClass('show');\n }\n\n hide() {\n const ui = this;\n const $el = ui.$target;\n $el.removeClass('show');\n $el.find('.dropdown-menu').removeClass('show');\n $el.parent('.dropdown').removeClass('show');\n }\n\n dispose() {\n const ui = this;\n const $el = ui.$el;\n\n ui.$triger.removeClass(`${NAME}-active`);\n $.removeData($el, DATA_KEY);\n\n ui.$el = null;\n ui.$parent = null;\n ui.$target = null;\n ui.$triger = null;\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to el\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new HoverUI(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = HoverUI._jQueryInterface;\n $.fn[NAME].Constructor = HoverUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return HoverUI._jQueryInterface;\n };\n\n // auto-apply\n $('[data-toggle=\"hover\"]').ready(() => {\n $('[data-toggle=\"hover\"]').jsHoverUI();\n });\n\n // rewrite 'bootstrap/js/dist/dropdown'\n $('[data-toggle=\"dropdown\"]').on('click touch', (e) => {\n e.preventDefault();\n\n const $el = $(e.currentTarget);\n const $parent = $el.parent('.dropdown');\n\n if ($parent.hasClass('show')) {\n $parent.removeClass('show');\n $parent.find('.dropdown-menu').removeClass('show');\n } else {\n $parent.addClass('show');\n $parent.find('.dropdown-menu').addClass('show');\n }\n\n });\n\n return HoverUI;\n})($);\n\nexport default HoverUI;\n","import $ from 'jquery';\n\nimport 'hammerjs/hammer';\nimport 'jquery-hammerjs/jquery.hammer';\n\nimport Events from '../_events';\n\nconst CarouselUI = (($) => {\n // Constants\n const NAME = 'CarouselUI';\n\n class CarouselUI {\n // Static methods\n\n static each(callback) {\n $('.js-carousel').each((i, e) => {\n callback(i, $(e));\n });\n }\n\n static init() {\n this.dispose();\n\n this.each((i, e) => {\n const $e = $(e),\n id = `Carousel${i}`;\n\n $e.attr('id', id);\n $e.data('id', i);\n\n const $items = $(e).find('.carousel-item'),\n count = $items.length;\n if (!count) {\n return;\n }\n\n // create carousel-controls\n if ($e.data('indicators')) {\n const $indicators = $('<ol class=\"carousel-indicators\"></ol>');\n $indicators.append(`<li data-target=\"#${ id }\" data-slide-to=\"0\" class=\"active\"></li>`);\n for (let i = 1; i < count; i++) {\n $indicators.append(`<li data-target=\"#${ id }\" data-slide-to=\"${ i }\"></li>`);\n }\n $e.prepend($indicators);\n }\n\n // create arrows\n if ($e.data('arrows')) {\n $e.prepend(`<i class=\"carousel-control-prev\" data-target=\"#${ id }\" role=\"button\" data-slide=\"prev\"><i class=\"fas fa-chevron-left\" aria-hidden=\"true\"></i><i class=\"sr-only\">Previous</i></i>`);\n $e.prepend(`<i class=\"carousel-control-next\" data-target=\"#${ id }\" role=\"button\" data-slide=\"next\"><i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i><i class=\"sr-only\">Next</i></i>`);\n }\n\n // init carousel\n $e.carousel();\n\n const $youtubeSlides = $e.find('iframe[src^=\"https://www.youtube.com/embed/\"]');\n\n $e.on('slide.bs.carousel', () => {\n if ($youtubeSlides.length) {\n $youtubeSlides.each((i, e) => {\n const $e = $(e);\n try {\n $e.data('player', new YT.Player(e, {\n events: {\n 'onReady': () => {\n $e.data('player').pauseVideo();\n },\n },\n }));\n\n $e.data('player').pauseVideo();\n } catch (e) {}\n });\n }\n });\n\n $e.find('.carousel-control-prev').on('click', (e) => {\n e.preventDefault();\n $e.carousel('prev');\n });\n\n $e.find('.carousel-control-next').on('click', (e) => {\n e.preventDefault();\n $e.carousel('next');\n });\n\n // init touch swipes\n $e.hammer().bind('swipeleft panleft', (e) => {\n $(event.target).carousel('next');\n });\n\n $e.hammer().bind('swiperight panright', (e) => {\n $(event.target).carousel('prev');\n });\n\n /*$e.find('.carousel-item').hammer().bind('tap', (event) => {\n $(event.target).carousel('next');\n });*/\n });\n }\n\n static dispose() {\n this.each((i, e) => {\n $(e).carousel('dispose');\n });\n }\n }\n\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n CarouselUI.init();\n });\n\n return CarouselUI;\n})($);\n\nexport default CarouselUI;\n","import $ from 'jquery';\n\nconst SlidingMenu = (($) => {\n // Constants\n const NAME = 'jsSlidingMenu';\n const DATA_KEY = NAME;\n\n class SlidingMenu {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n $element.addClass(`${NAME}-active`);\n\n // esc button\n $(window).on('keyup',((e) => {\n if (e.which === 27) {\n $element.find('.is-open[data-toggle=\"offcanvas\"]').click();\n }\n }));\n }\n\n // Public methods\n dispose() {\n console.log(`Disposing: ${NAME} elements`);\n\n $(this._element).removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(function () {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new SlidingMenu(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = SlidingMenu._jQueryInterface;\n $.fn[NAME].Constructor = SlidingMenu;\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return SlidingMenu._jQueryInterface;\n };\n\n // auto-apply\n $(`.ui.${NAME}`).ready(() => {\n $(`.ui.${NAME}`).jsSlidingMenu();\n });\n\n return SlidingMenu;\n})($);\n\nexport default SlidingMenu;\n","import $ from 'jquery';\n\nconst SpinnerUI = (($) => {\n class SpinnerUI {\n static show(callback) {\n $('#PageLoading').show(0, callback);\n }\n\n static hide(callback) {\n $('#PageLoading').hide('slow', callback);\n }\n }\n\n return SpinnerUI;\n})($);\n\nexport default SpinnerUI;\n","\"use strict\";\n\nimport $ from 'jquery';\nimport Events from '../_events';\nimport Spinner from './_ui.spinner';\n\nconst AjaxUI = (($) => {\n // Constants\n const G = window;\n const D = document;\n const $Html = $('html');\n const $Body = $('body');\n\n const NAME = 'jsAjaxUI';\n const DATA_KEY = NAME;\n\n class AjaxUI {\n // Constructor\n constructor(element) {\n this._element = element;\n const $element = $(this._element);\n $element.addClass(`${NAME}-active`);\n\n $element.bind('click', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n\n $('.ajax').each(function() {\n const $this = $(this);\n $this.removeClass('active');\n $this.parents('.nav-item').removeClass('active');\n });\n\n $this.addClass('loading');\n\n AjaxUI.load($this.attr('href'), () => {\n $this.removeClass('loading');\n $this.parents('.nav-item').addClass('active');\n $this.addClass('active');\n });\n });\n }\n\n // Public methods\n static load(url, callback) {\n // show spinner\n Spinner.show(() => {\n $Body.removeClass('loaded');\n });\n\n // update document location\n G.MainUI.updateLocation(url);\n\n const absoluteLocation = G.URLDetails['base'] + G.URLDetails['relative'].substring(1);\n if (absoluteLocation !== G.location.href) {\n G.history.pushState({\n ajax: true,\n page: absoluteLocation,\n }, document.title, absoluteLocation);\n }\n\n $.ajax({\n sync: false,\n async: true,\n url,\n dataType: 'json',\n method: 'GET',\n cache: false,\n error(jqXHR) {\n console.warn(`AJAX request failure: ${jqXHR.statusText}`);\n G.location.href = url;\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('send', 'event', 'error', 'AJAX ERROR', jqXHR.statusText);\n }\n },\n success(data, status, jqXHR) {\n AjaxUI.process(data, jqXHR, callback);\n\n // google analytics\n if (typeof G.ga === 'function') {\n G.ga('set', {\n page: G.URLDetails['relative'] + G.URLDetails['hash'],\n title: jqXHR.getResponseHeader('X-Title'),\n });\n G.ga('send', 'pageview');\n }\n },\n });\n }\n\n static process(data, jqXHR, callback) {\n const css = jqXHR.getResponseHeader('X-Include-CSS').split(',') || [];\n const js = jqXHR.getResponseHeader('X-Include-JS').split(',') || [];\n\n // Replace HTML regions\n if (typeof(data.regions) === 'object') {\n for (const key in data.regions) {\n if (typeof(data.regions[key]) === 'string') {\n AjaxUI.replaceRegion(data.regions[key], key);\n }\n }\n }\n\n // remove already loaded scripts\n $('link[type=\"text/css\"]').each(function() {\n const i = css.indexOf($(this).attr('href'));\n if (i > -1) {\n css.splice(i, 1);\n } else if (!$Body.data('unload-blocked')) {\n console.log(`Unloading: ${ $(this).attr('href')}`);\n $(this).remove();\n }\n });\n\n $('script[type=\"text/javascript\"]').each(function() {\n const i = js.indexOf($(this).attr('src'));\n if (i > -1) {\n js.splice(i, 1);\n } else if (!$Body.data('unload-blocked')) {\n console.log(`Unloading: ${ $(this).attr('src')}`);\n $(this).remove();\n }\n });\n\n // preload CSS\n this.preload(css).then(() => {\n const $head = $('head');\n css.forEach((el) => {\n $head.append(`<link rel=\"stylesheet\" type=\"text/css\" href=\"${el}\" />`);\n });\n\n // preload JS\n this.preload(js, 'script').then(() => {\n\n js.forEach((el) => {\n $Body.append(`<script type=\"text/javascript\" charset=\"UTF-8\" src=\"${el}\"></script>`);\n });\n\n console.log('New page is loaded!');\n\n // trigger events\n if (typeof(data.events) === 'object') {\n for (const eventName in data.events) {\n $(D).trigger(eventName, [data.events[eventName]]);\n }\n }\n\n if (typeof callback !== 'undefined') {\n callback();\n }\n\n $(G).trigger(Events.AJAX);\n });\n });\n }\n\n static preload(items, type = 'text', cache = true, itemCallback = false) {\n if (!items.length) {\n return $.Deferred().resolve().promise();\n }\n\n const dfds = [];\n items.forEach((url, i) => {\n const dfd = $.Deferred();\n\n $.ajax({\n dataType: type,\n cache,\n url,\n }).always(() => {\n dfd.resolve();\n if (itemCallback) {\n itemCallback(i, url);\n }\n });\n\n dfds.push(dfd);\n });\n\n // return a master promise object which will resolve when all the deferred objects have resolved\n return $.when(...dfds);\n }\n\n static replaceRegion(html, key) {\n const $region = $(`[data-ajax-region=\"${key}\"]`);\n\n if ($region.length) {\n $region.empty().append(html);\n } else {\n console.warn('Region returned without class or id!');\n }\n }\n\n dispose() {\n const $element = $(this._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new AjaxUI(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = AjaxUI._jQueryInterface;\n $.fn[NAME].Constructor = AjaxUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return AjaxUI._jQueryInterface;\n };\n\n // auto-apply\n $('.ajax').ready(() => {\n $('.ajax').jsAjaxUI();\n });\n\n // AJAX update browser title\n $(D).on('layoutRefresh', (e, data) => {\n D.title = data.Title;\n\n $Html.attr('class', '');\n if (data.ClassName) {\n $Html.addClass(data.ClassName);\n }\n //data.Link = (data.Link === '/home/') ? '/' : data.Link;\n });\n\n // Back/Forward functionality\n G.onpopstate = function(event) {\n const $existingLink = $(`a[href^=\"${ D.location }\"]`);\n\n if (event.state !== null && event.state.ajax) {\n console.log('GOBACK (AJAX state)');\n AjaxUI.load(event.state.page);\n } else if ($existingLink.length && $existingLink.hasClass('ajax')) {\n console.log('GOBACK (AJAX link)');\n $existingLink.trigger('click');\n } else {\n console.log('GOBACK (HTTP)');\n G.location.href = D.location;\n }\n };\n\n return AjaxUI;\n})($);\n\nexport default AjaxUI;\n","import $ from 'jquery';\nimport Events from '../_events';\n\nconst FormFieldUI = (($) => {\n // Constants\n const NAME = 'jsFormFieldUI';\n const DATA_KEY = NAME;\n const $Html = $('html, body');\n\n class FormFieldUI {\n\n constructor(el) {\n const ui = this;\n\n ui.$el = $(el);\n ui.$el.data(DATA_KEY, ui);\n ui.shown = true;\n //ui.$actions = ui.$el.parents('form').children('.btn-toolbar,.form-actions');\n\n ui.vals = {\n 'val': ui.$el.val(),\n 'checked': ui.$el.is(':checked'),\n };\n\n // bootstrap collapse integration\n ui.$el.parents('.optionset').not('.field').removeClass('collapse');\n ui.$collapse = ui.$el.parents('.field.collapse').not('.composite').first();\n if (ui.$collapse.length) {\n ui.$el.removeClass('collapse');\n\n ui.$collapse.on('show.bs.collapse', (e) => {\n ui.show();\n });\n\n ui.$collapse.on('hidden.bs.collapse', (e) => {\n ui.hide();\n });\n }\n\n ui.$el.addClass(`${NAME}-active`);\n\n return ui;\n }\n\n // Public methods\n dispose() {\n const ui = this;\n const $el = ui.$el;\n\n $el.removeClass(`${NAME}-active`);\n $.removeData(this._el, DATA_KEY);\n }\n\n show() {\n const ui = this;\n const $el = ui.$el;\n\n ui.restore();\n ui.shown = true;\n\n /*if (ui.$collapse.length) {\n ui.$collapse.collapse('show');\n }\n\n if ($el.hasClass('collapse')) {\n $el.collapse('show');\n }*/\n\n $el.trigger(`shown.${ NAME}`);\n }\n\n hide() {\n const ui = this;\n const $el = ui.$el;\n\n ui.wipe();\n ui.shown = false;\n\n /*if (ui.$collapse.length) {\n ui.$collapse.collapse('hide');\n }\n\n if ($el.hasClass('collapse')) {\n $el.collapse('hide');\n }\n\n $el.trigger('change');*/\n $el.trigger(`hidden.${ NAME}`);\n }\n\n wipe() {\n const ui = this;\n const $el = ui.$el;\n\n ui.vals = {\n 'name': $el.attr('name'),\n 'val': $el.val(),\n 'checked': $el.is(':checked'),\n };\n\n $el.val('');\n $el.prop('checked', false);\n }\n\n restore() {\n const ui = this;\n const $el = ui.$el;\n const checked = ui.vals['checked'];\n\n $el.val(ui.vals['val']);\n $el.prop('checked', checked);\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to el\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new FormFieldUI(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormFieldUI._jQueryInterface;\n $.fn[NAME].Constructor = FormFieldUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormFieldUI._jQueryInterface;\n };\n\n return FormFieldUI;\n})($);\n\nexport default FormFieldUI;\n","import $ from 'jquery';\n\n//import 'bootstrap-select/dist/js/bootstrap-select';\n//$.fn.selectpicker.Constructor.BootstrapVersion = '4';\nimport 'select2/dist/js/select2.js';\n\nimport select2 from 'jquery.inputmask/dist/jquery.inputmask.bundle';\n\nimport Events from \"../_events\";\nimport SpinnerUI from './_ui.spinner';\nimport FormFieldUI from './_ui.form.fields';\n\nconst FormBasics = (($) => {\n // Constants\n const NAME = 'jsFormBasics';\n const DATA_KEY = NAME;\n const $Html = $('html, body');\n const W = window;\n const D = document;\n\n class FormBasics {\n\n constructor(element) {\n const ui = this;\n const $element = $(element);\n\n ui._element = element;\n $element.data(DATA_KEY, this);\n\n $('[data-inputmask]').inputmask();\n\n const $fields = $element.find(Events.FORM_FIELDS);\n // init fields ui\n $fields.each((i, el) => {\n // skip some fields here\n new FormFieldUI(el);\n });\n\n const $selectFields = $element.find('select:not([readonly])');\n const $radioOptions = $element.find('input[type=\"radio\"]');\n\n $selectFields.each((i, el) => {\n const $el = $(el);\n $el.select2();\n });\n\n /*const separator = '::;::';\n $selectFields.each((i, el) => {\n const $el = $(el);\n const maxOptions = $el.data('max-options') || false;\n\n $el.selectpicker($.extend({\n iconBase: 'fas',\n tickIcon: 'fa-check',\n virtualScroll: false,\n dropupAuto: false,\n size: 10,\n maxOptions,\n }, $el.data(), {\n multipleSeparator: separator,\n }));\n\n // wrap options\n if (maxOptions > 1) {\n const wrapOptions = () => {\n if (!$el.val().length) {\n return true;\n }\n\n const $container = $el.parent().find('.dropdown-toggle .filter-option');\n const val = $container.text();\n const vals = val.split(separator);\n let html = '';\n\n vals.forEach((opt) => {\n const $opt = $el.find('option').filter((i, e) => {\n return $(e).text() === opt;\n });\n\n html += `<span class=\"option\" data-val=${ $opt.attr('value') }>${ opt\n } <i class=\"fas fa-times btn-remove\"></i></span>`;\n\n });\n\n $container.html(html);\n\n // remove value\n $container.find('.option').on('click', (e) => {\n e.preventDefault();\n\n const $opt = $(e.currentTarget);\n const val = $opt.data('val').toString();\n //$opt.remove();\n\n const vals = $el.selectpicker('val');\n const i = vals.indexOf(val);\n if (i > -1) {\n vals.splice(i, 1);\n $el.selectpicker('val', vals);\n }\n\n wrapOptions();\n });\n };\n\n $el.on('rendered.bs.select changed.bs.select refreshed.bs.select loaded.bs.select change', wrapOptions);\n wrapOptions();\n }\n });\n\n // FIX: missing conflicting 'bootstrap/js/dist/dropdown' with bootstrap-select/dist/js/bootstrap-select\n $('[data-toggle=\"dropdown\"]').on('click', (e) => {\n $(e.currentTarget).siblings('.dropdown-menu').toggleClass('show');\n });\n\n $('.dropdown-menu a').on('click', (e) => {\n $(e.currentTarget).parents('.dropdown-menu').removeClass('show');\n });*/\n // /FIX\n\n $fields.each((e, el) => {\n const $el = $(el);\n\n if ($el.hasClass('required') || $el.attr('aria-required')) {\n $el.closest('.field').addClass('required');\n }\n });\n\n $radioOptions.each((e, el) => {\n const $el = $(el);\n\n if ($el.is(':checked')) {\n $el.parents('.radio').addClass('checked');\n }\n });\n\n $radioOptions.on('change', (e) => {\n const $el = $(e.currentTarget);\n const $parent = $el.parents('.radio');\n\n $parent.siblings('.radio').each((i, el) => {\n const $el = $(el);\n\n if (!$el.find('input').is(':checked')) {\n $el.removeClass('checked');\n }\n });\n\n if ($el.is(':checked')) {\n $parent.addClass('checked');\n }\n });\n\n $element.on('submit', (e) => {\n SpinnerUI.show();\n });\n\n $element.addClass(`${NAME}-active`);\n $element.trigger(Events.FORM_INIT_BASICS);\n }\n\n // Public methods\n dispose() {\n const $element = $(this._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n static _jQueryInterface() {\n return this.each(() => {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new FormBasics(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormBasics._jQueryInterface;\n $.fn[NAME].Constructor = FormBasics;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormBasics._jQueryInterface;\n };\n\n const init = () => {\n $('form').jsFormBasics();\n };\n\n // auto-apply\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n init();\n });\n\n return FormBasics;\n})($);\n\nexport default FormBasics;\n","\"use strict\";\n\nimport $ from 'jquery';\n\nimport Events from './_events';\nimport Consts from './_consts';\n\nimport Spinner from './_components/_ui.spinner';\n\n// AJAX functionality\nimport AjaxUI from './_components/_ui.ajax';\n\nimport FormBasics from './_components/_ui.form.basics';\n\nimport SmoothScroll from 'smooth-scroll';\nconst smoothScroll = SmoothScroll();\n\n\nconst MainUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'MainUI';\n\n // get browser locale\n //const Locale = $('html').attr('lang').substring(0, 2);\n\n const $AlertNotify = $('#AlertNotify');\n const $SiteWideMessage = $('#SiteWideMessage');\n\n // get browser window visibility preferences\n // Opera 12.10, Firefox >=18, Chrome >=31, IE11\n const HiddenName = 'hidden';\n const VisibilityChangeEvent = 'visibilitychange';\n\n // update visibility state\n D.addEventListener(VisibilityChangeEvent, () => {\n if (D.visibilityState === HiddenName) {\n console.log('Tab: hidden');\n $Body.addClass('is-hidden');\n $Body.trigger('tabHidden');\n } else {\n console.log('Tab: focused');\n $Body.removeClass('is-hidden');\n $Body.trigger('tabFocused');\n }\n });\n\n\n // update online/offline state\n const updateOnlineStatus = () => {\n if (!navigator.onLine) {\n console.log('Tab: offline');\n $Body.addClass('is-offline');\n $Body.trigger('offline');\n } else {\n console.log('Tab: online');\n $Body.removeClass('is-offline');\n $Body.trigger('online');\n }\n };\n\n if (typeof navigator.onLine !== 'undefined') {\n W.addEventListener('offline', () => {\n updateOnlineStatus();\n }, false);\n\n W.addEventListener('online', () => {\n updateOnlineStatus();\n }, false);\n\n W.addEventListener('load', () => {\n updateOnlineStatus();\n });\n }\n\n // scrollTo\n const ScrollTo = (trigger, selector) => {\n smoothScroll.animateScroll(\n D.querySelector(selector),\n trigger, {\n speed: 500,\n offset: -20,\n //easing: 'easeInOutCubic',\n // Callback API\n //before: (anchor, toggle) => {}, // Callback to run before scroll\n //`after: (anchor, toggle) => {} // Callback to run after scroll\n }\n );\n };\n\n // session ping\n setInterval(() => {\n if ($Body.hasClass('is-offline')) {\n return;\n }\n\n $.ajax({\n sync: false,\n async: true,\n cache: false,\n url: '/Security/ping',\n global: false,\n type: 'POST',\n complete(data, datastatus) {\n if (datastatus !== 'success') {\n W.location.reload(false);\n }\n },\n });\n }, 300000); // 5 min in ms\n\n W.URLDetails = {\n 'base': $('base').attr('href'),\n 'relative': '/',\n 'hash': '',\n };\n\n class MainUI {\n // Static methods\n\n static init() {\n this.dispose();\n\n console.log(`Initializing: ${NAME}`);\n\n // update location details\n this.updateLocation();\n\n // mark available offline areas\n if ('caches' in W) {\n $('a.offline').addClass('offline-available');\n }\n\n this.loadImages();\n\n // detect bootstrap screen size\n this.detectBootstrapScreenSize();\n\n // mark external links\n $('a.external,a[rel=\"external\"]').attr('target', '_blank');\n\n // show encoded emails\n /*$(D).find('.obm').each(() => {\n if ($(this).attr('data-val') !== undefined) {\n const email = $(this).attr('data-val').split('')\n .reverse()\n .join('')\n .slice(0, -8)\n .replace(/[a-zA-Z]/g, (c) => String.fromCharCode((c <= 'Z' ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26))\n .replace('#AT#', '@');\n const attr = $(this).attr('data-val-append');\n if (attr !== undefined && attr !== false) {\n $(this).append(email);\n }\n if ($(this).find('.sr-only').length > 0) {\n $(this).find('.sr-only').append(email);\n }\n if ($(this).attr('href') !== undefined) {\n $(this).attr('href', `mailto:${email}`);\n }\n }\n });*/\n //\n\n // scroll links\n $('.js-scrollTo').on('click', (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const $el = $(e.currentTarget);\n\n ScrollTo(el, $el.attr('data-target'));\n });\n\n // load external fonts\n if ($('[data-extfont]').length) {\n $.getScript('//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js', () => {\n const fonts = [];\n\n $('[data-extfont]').each((i, el) => {\n fonts[i] = $(el).attr('data-extfont');\n });\n\n W.WebFont.load({\n google: {\n families: fonts,\n },\n });\n });\n }\n\n // data-set links\n $('[data-set-target]').on('click', (e) => {\n const $el = $(e.currentTarget);\n const $target = $($el.data('set-target'));\n\n if (!$target.length) {\n return;\n }\n\n $target.each((i, targetEl) => {\n const $targetEl = $(targetEl);\n const tag = $targetEl.prop('tagName').toLowerCase();\n\n if (tag === 'input' || tag === 'select') {\n $targetEl.val($el.data('set-val'));\n } else if (!$targetEl.hasClass('field')) {\n $targetEl.text($el.data('set-val'));\n }\n });\n\n $el.trigger(Events.SET_TARGET_UPDATE);\n $target.closest('form').trigger(Events.SET_TARGET_UPDATE);\n });\n\n // hide spinner\n Spinner.hide(() => {\n $Body.addClass('loaded');\n });\n\n // fire page printing\n if (W.URLDetails['hash'].indexOf('printpage') > -1) {\n W.print();\n }\n\n $Body.data(NAME, this);\n }\n\n static detectBootstrapScreenSize() {\n const $el = $('<div class=\"env-test\"></div>');\n const envs = [...Consts.ENVS];\n\n $Body.append($el);\n let curEnv = envs.shift();\n\n for (let env of envs.reverse()) {\n $el.addClass(`d-${env}-none`);\n if ($el.is(':hidden')) {\n curEnv = env;\n break;\n }\n }\n\n $el.remove();\n $Body.removeClass(envs);\n $Body.addClass(curEnv);\n\n return curEnv;\n }\n\n static updateLocation(url) {\n let location = url || W.location.href;\n location = location.replace(W.URLDetails['base'], '/');\n const hash = location.indexOf('#');\n\n W.URLDetails.relative = location.split('#')[0];\n W.URLDetails.hash = (hash >= 0) ? location.substr(location.indexOf('#')) : '';\n }\n\n // show site-wide alert\n static alert(msg, cls) {\n $SiteWideMessage.fadeOut('fast');\n\n $SiteWideMessage.html(`<div class=\"page-alert\"><div class=\"alert alert-${cls}\"><i class=\"close\" data-dismiss=\"alert\">&times;</i>${msg}</div></div>`);\n $SiteWideMessage.find('.page-alert').alert();\n\n $SiteWideMessage.find('.close[data-dismiss=\"alert\"]').click(() => {\n $SiteWideMessage.fadeOut('slow', () => {\n $SiteWideMessage.find('.page-alert').alert('close');\n });\n });\n\n $SiteWideMessage.fadeIn('slow');\n\n if ($AlertNotify.length) {\n $AlertNotify[0].play();\n }\n\n $(W).trigger('alert-appeared');\n }\n\n // hide site-wide alert\n static alertHide() {\n if ($SiteWideMessage.length !== 0) {\n $SiteWideMessage.fadeOut('slow', () => {\n $SiteWideMessage.find('.alert').alert('close');\n });\n }\n\n if (\n $AlertNotify.length &&\n typeof $AlertNotify[0].stop !== 'undefined'\n ) {\n $AlertNotify[0].stop();\n }\n\n $(W).trigger('alert-removed');\n }\n\n // load all images\n static loadImages() {\n const $imgs = $Body.find('img');\n const $imgUrls = [];\n const $imgLazyUrls = [];\n\n // collect image details\n $imgs.each((i, el) => {\n const $el = $(el);\n const src = $el.attr('src');\n const lazySrc = $el.data('lazy-src');\n\n if (src && src.length) {\n $imgUrls.push(src);\n }\n if (lazySrc && lazySrc.length) {\n $imgLazyUrls.push(lazySrc);\n $el.addClass('loading');\n\n AjaxUI.preload([lazySrc]).then(() => {\n $el.attr('src', lazySrc);\n\n $el.addClass('loaded');\n $el.removeClass('loading');\n\n $el.trigger('image-lazy-loaded');\n });\n }\n });\n\n // load defined images\n AjaxUI.preload($imgUrls).then(() => {\n $(W).trigger('images-loaded');\n\n // load lazy images\n AjaxUI.preload($imgLazyUrls).then(() => {\n console.log('All images are loaded!');\n\n $(W).trigger('images-lazy-loaded');\n });\n });\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n MainUI.init();\n });\n\n $(W).on('resize', () => {\n MainUI.detectBootstrapScreenSize();\n });\n\n $(W).on('beforeunload unload', () => {\n Spinner.show(() => {\n $Body.removeClass('loaded');\n });\n });\n\n W.MainUI = MainUI;\n\n return MainUI;\n})($);\n\nexport default MainUI;\n","\"use strict\";\n\nimport $ from 'jquery';\n\nimport MainUI from \"../_main\";\nimport Events from '../_events';\nimport SpinnerUI from './_ui.spinner';\n\nconst VideoPreviewUI = (($) => {\n\n const NAME = 'jsVideoPreviewUI';\n const DATA_KEY = NAME;\n\n const G = window;\n const D = document;\n\n class VideoPreviewUI {\n\n constructor(el) {\n console.log(`Initializing: ${NAME}`);\n\n const ui = this;\n ui.$_el = $(el);\n ui.innerHTML = ui.$_el[0].innerHTML;\n\n ui.$_el.data(DATA_KEY, this);\n const href = ui.$_el.attr('href') || ui.$_el.data('href');\n const YouTubeGetID = (url) => {\n url = url.split(/(vi\\/|v%3D|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\n return undefined !== url[2] ? url[2].split(/[^0-9a-z_\\-]/i)[0] : url[0];\n };\n\n\n let video;\n\n if (video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\\.(com|be)\\/(watch\\?v=([\\w-]+)|([\\w-]+))/)) {\n let video_id;\n\n if (video[1] === 'youtube' || video[1] === 'youtube-nocookie' || video[1] === 'youtu') {\n video_id = YouTubeGetID(href);\n }\n\n if (video[1] == 'vimeo') {\n video_id = video[3];\n ui.$_el.addClass('loading');\n $.ajax({\n type: 'GET',\n url: `https://vimeo.com/api/v2/video/${ video_id }.json`,\n jsonp: 'callback',\n dataType: 'jsonp',\n success: function(data) {\n const thumbnail_src = data[0].thumbnail_large;\n ui.show(thumbnail_src);\n ui.$_el.removeClass('loading');\n },\n });\n\n return;\n }\n\n if (video_id) {\n ui.show(`//i3.ytimg.com/vi/${video_id}/0.jpg`);\n }\n }\n }\n\n show(src) {\n const ui = this;\n ui.$_el[0].innerHTML = '';\n ui.$_el.append(`<img src=\"${src}\" alt=\"Video\" />`);\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n ui.$_el[0].innerHTML = ui.innerHTML;\n }\n\n static _jQueryInterface() {\n return this.each((i, el) => {\n // attach functionality to element\n const $el = $(el);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new VideoPreviewUI(el);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = VideoPreviewUI._jQueryInterface;\n $.fn[NAME].Constructor = VideoPreviewUI;\n $.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return VideoPreviewUI._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n $('[data-video-preview=\"true\"]').jsVideoPreviewUI();\n });\n\n return VideoPreviewUI;\n})($);\n\nexport default VideoPreviewUI;\n","import $ from 'jquery';\n\nimport Events from '../_events';\n\nimport 'bootstrap-datepicker/dist/js/bootstrap-datepicker.js';\nimport 'bootstrap-timepicker/js/bootstrap-timepicker.js';\n\nconst DatetimeUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'jsDatetimeUI';\n const DATA_KEY = NAME;\n\n const datepickerOptions = {\n autoclose: true,\n startDate: 0,\n //todayBtn: true,\n todayHighlight: true,\n clearBtn: true,\n };\n\n class DatetimeUI {\n constructor(el) {\n const ui = this;\n const $el = $(el);\n\n ui._el = el;\n\n // datepicker\n if ($el.hasClass('date') || $el.attr('type') === 'date') {\n const defaultDate = ($el.attr('name').toLowerCase().indexOf('end') !== -1) ?\n '+4d' :\n '+3d';\n\n $el.attr('readonly', 'true');\n $el.datepicker($.extend(datepickerOptions, {\n defaultViewDate: defaultDate,\n multidate: $el.data('multidate'),\n }, $el.data()));\n } else\n\n // timepicker\n if ($el.hasClass('time') || $el.attr('type') === 'time') {\n $el.attr('readonly', 'true');\n $el.timepicker($.extend({\n snapToStep: true,\n icons: {\n up: 'fas fa-chevron-up',\n down: 'fas fa-chevron-down',\n },\n }, $el.data())).on('show.timepicker', (e) => {\n const $el = $(e.currentTarget);\n const $dropdown = $Body.find('.bootstrap-timepicker-widget');\n\n if (!$dropdown.find('[data-action=\"clear\"]').length) {\n $dropdown.find('tbody').append('<tr><td colspan=\"5\"><a href=\"#\" data-action=\"clear\">Clear</a></td></tr>');\n }\n\n const $clearBtn = $dropdown.find('[data-action=\"clear\"]');\n $clearBtn.on('click', (e) => {\n e.preventDefault();\n $el.timepicker('clear');\n $el.timepicker('hideWidget');\n })\n });\n\n }\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to element\n const $el = $(this);\n let data = $el.data(DATA_KEY);\n\n if (!data) {\n data = new DatetimeUI(this);\n $el.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = DatetimeUI._jQueryInterface;\n $.fn[NAME].Constructor = DatetimeUI;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return DatetimeUI._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n $('input.date, input.time,input[type=\"date\"], input[type=\"time\"]').jsDatetimeUI();\n });\n\n return DatetimeUI;\n})($);\n\nexport default DatetimeUI;\n","import $ from 'jquery';\nimport Events from \"../_events\";\n\nconst FormValidateField = (($) => {\n // Constants\n const NAME = 'jsFormValidateField';\n const DATA_KEY = NAME;\n const $Html = $('html, body');\n\n class FormValidateField {\n\n constructor(element) {\n const ui = this;\n const $element = $(element);\n\n ui._element = element;\n ui._actions = $element.parents('form').children('.btn-toolbar,.form-actions');\n $element.data(DATA_KEY, this);\n\n // prevent browsers checks (will do it using JS)\n $element.attr('novalidate', 'novalidate');\n\n $element.on('change focusout', (e) => {\n ui.validate(false);\n });\n\n $element.addClass(`${NAME}-active`);\n $element.trigger(Events.FORM_INIT_VALIDATE_FIELD);\n }\n\n // Public methods\n dispose() {\n const $element = $(this._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(this._element, DATA_KEY);\n this._element = null;\n }\n\n validate(scrollTo = true) {\n const ui = this;\n const $el = $(ui._element);\n const $field = $el.closest('.field');\n const extraChecks = $el.data(`${NAME}-extra`);\n let valid = true;\n let msg = null;\n\n const val = $el.val();\n\n // browser checks + required\n if (!ui._element.checkValidity() ||\n ($el.hasClass('required') && (!val.length || !val.trim().length ||\n ui.isHtml(val) && !$(val).text().length\n ))\n ) {\n valid = false;\n }\n\n // validate URL\n if ($el.hasClass('url') && val.length && !this.valideURL(val)) {\n valid = false;\n msg = 'URL must start with http:// or https://. For example: https://your-domain.com/';\n }\n\n this.removeError();\n\n // extra checks\n if (extraChecks) {\n extraChecks.forEach((check) => {\n valid = valid && check();\n });\n }\n\n if (valid) {\n return true;\n }\n\n this.setError(scrollTo, msg);\n\n return false;\n }\n\n isHtml(str) {\n const doc = new DOMParser().parseFromString(str, \"text/html\");\n return Array.from(doc.body.childNodes).some((node) => node.nodeType === 1);\n }\n\n valideURL(str) {\n const pattern = new RegExp('^(https?:\\\\/\\\\/){1}' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.?)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$', 'i'); // fragment locator\n return pattern.test(str);\n }\n\n setError(scrollTo = true, msg = null) {\n const ui = this;\n const $field = $(ui._element).closest('.field');\n const pos = $field.offset().top;\n\n $field.addClass('error');\n if (msg) {\n $field.append(`<div class=\"message alert alert-error alert-danger\">${ msg }</div>`);\n }\n\n if (scrollTo) {\n $field.focus();\n $Html.scrollTop(pos - 100);\n }\n }\n\n removeError() {\n const ui = this;\n const $field = $(ui._element).closest('.field');\n\n $field.removeClass('error');\n\n $field.removeClass('holder-error');\n $field.removeClass('holder-validation');\n $field.find('.message').remove();\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new FormValidateField(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = FormValidateField._jQueryInterface;\n $.fn[NAME].Constructor = FormValidateField;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return FormValidateField._jQueryInterface;\n };\n\n return FormValidateField;\n})($);\n\nexport default FormValidateField;\n","import $ from 'jquery';\nimport Events from '../_events';\nimport LANG from '../lang/_en';\nimport FormValidateField from \"./_ui.form.validate.field\";\n\nconst SteppedForm = (($) => {\n // Constants\n const NAME = 'jsSteppedForm';\n const DATA_KEY = NAME;\n\n class SteppedForm {\n\n constructor(element) {\n const ui = this;\n const $element = $(element);\n\n $element.data(DATA_KEY, this);\n\n if (!$element.find('.steps-counter').length) {\n $element.prepend(LANG['en'][NAME]['STEPCOUNTER']);\n }\n\n if (!$element.find('.steps-buttons').length) {\n $element.append(LANG['en'][NAME]['STEPBUTTONS']);\n }\n\n ui._currentStepCounter = $element.find('.steps-counter .current-step');\n ui._totalStepsCounter = $element.find('.steps-counter .total-steps');\n\n ui._steps = $element.find('.step');\n ui._stepNext = $element.find('.step-next');\n\n ui._stepPrev = $element.find('.step-prev');\n ui._actions = $element.children('.btn-toolbar,.form-actions');\n\n ui._element = element;\n ui._currentStep = 1;\n ui._totalSteps = ui._steps.last().data('step') || ui._steps.length;\n ui._stepsOrder = [];\n\n ui._totalStepsCounter.text(ui._totalSteps);\n\n // check if one of the steps already has an error\n const $hasError = ui._steps\n .find('.field.error,.field.holder-error,.field.holder-validation,.field.holder-info,.field.holder-warning,.field.holder-good')\n .first();\n if ($hasError.length) {\n const $modal = $element.parents('.modal');\n\n // show modal\n if ($modal.length && typeof $modal.modal !== 'undefined') {\n $modal.modal('show');\n }\n\n ui._currentStep = $hasError.parents('.step').data('step') || ui._currentStep;\n }\n //\n\n ui.step(`.step[data-step=\"${ ui._currentStep }\"]`);\n\n ui._stepNext.on('click', (e) => {\n e.preventDefault();\n ui.next();\n });\n\n ui._stepPrev.on('click', (e) => {\n e.preventDefault();\n ui.prev();\n });\n\n $element.find('.step-toggle').on('click', (e) => {\n const $el = $(e.currentTarget);\n\n e.preventDefault();\n ui.step($el.data('target'));\n });\n\n $element.addClass(`${NAME}-active`);\n $element.trigger(Events.FORM_INIT_STEPPED);\n }\n\n // Public methods\n dispose() {\n const ui = this;\n const $element = $(ui._element);\n\n $element.removeClass(`${NAME}-active`);\n $.removeData(ui._element, DATA_KEY);\n ui._element = null;\n }\n\n next() {\n const ui = this;\n\n if (ui._currentStep >= ui._totalSteps) {\n return;\n }\n\n ui.step(`.step[data-step=\"${ ui._currentStep + 1 }\"]`);\n }\n\n prev() {\n const ui = this;\n\n if (ui._currentStep <= 1) {\n return;\n }\n\n ui.step(ui._stepsOrder[ui._currentStep - 1]);\n }\n\n step(target) {\n const ui = this;\n const $element = $(ui._element);\n const $target = $element.find(target);\n const targetStep = parseInt($target.data('step'));\n\n // validate current step\n let valid = true;\n\n if (targetStep > ui._currentStep) {\n ui.currentStep().find('input,textarea,select').each((i, el) => {\n const $el = $(el);\n const fieldUI = $el.data('jsFormValidateField');\n\n if (fieldUI && !fieldUI.validate()) {\n valid = false;\n }\n });\n }\n\n if (!valid) {\n return false;\n }\n //\n\n if (parseInt($target.data('step')) <= '1') {\n ui._stepPrev.hide();\n $element.trigger(Events.FORM_STEPPED_FIRST_STEP);\n } else {\n ui._stepPrev.show();\n }\n\n if (parseInt($target.data('step')) >= ui._totalSteps) {\n ui._stepNext.hide();\n ui._actions.show();\n\n $element.trigger(Events.FORM_STEPPED_LAST_STEP);\n } else {\n ui._stepNext.show();\n ui._actions.hide();\n }\n\n ui._currentStep = targetStep;\n ui._stepsOrder[ui._currentStep] = $target;\n\n ui._steps.removeClass('active');\n $target.addClass('active');\n\n ui._currentStepCounter.text(ui._currentStep);\n\n $target.trigger(Events.FORM_STEPPED_NEW_STEP);\n $element.trigger(Events.FORM_STEPPED_NEW_STEP);\n }\n\n currentStep() {\n const ui = this;\n const $element = $(ui._element);\n\n return $element.find('.step.active');\n }\n\n static _jQueryInterface() {\n return this.each(function() {\n // attach functionality to element\n const $element = $(this);\n let data = $element.data(DATA_KEY);\n\n if (!data) {\n data = new SteppedForm(this);\n $element.data(DATA_KEY, data);\n }\n });\n }\n }\n\n // jQuery interface\n $.fn[NAME] = SteppedForm._jQueryInterface;\n $.fn[NAME].Constructor = SteppedForm;\n $.fn[NAME].noConflict = function() {\n $.fn[NAME] = JQUERY_NO_CONFLICT;\n return SteppedForm._jQueryInterface;\n };\n\n // auto-apply\n $(window).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n $('.form-stepped').jsSteppedForm();\n });\n\n return SteppedForm;\n})($);\n\nexport default SteppedForm;\n","import $ from 'jquery';\n\nimport Events from './_events';\nimport Spinner from './_components/_ui.spinner';\nimport FormDatetime from './_components/_ui.form.datetime';\nimport FormStepped from './_components/_ui.form.stepped';\n\n//import Multislider from './_components/_ui.multislider';\n\nconst LayoutUI = (($) => {\n // Constants\n const W = window;\n const D = document;\n const $Body = $('body');\n\n const NAME = 'LayoutUI';\n\n const datepickerOptions = {\n autoclose: true,\n startDate: 0,\n //todayBtn: true,\n todayHighlight: true,\n clearBtn: true,\n };\n\n class LayoutUI {\n static init() {\n const ui = this;\n ui.dispose();\n\n console.log(`Initializing: ${NAME}`);\n // your custom UI\n\n }\n\n static dispose() {\n console.log(`Destroying: ${NAME}`);\n }\n }\n\n $(W).on(`${Events.AJAX} ${Events.LOADED}`, () => {\n LayoutUI.init();\n });\n\n W.LayoutUI = LayoutUI;\n\n return LayoutUI;\n})($);\n\nexport default LayoutUI;\n","import '../scss/app.scss';\n\n// import Bootstrap\nimport 'popper.js';\nimport 'bootstrap/js/dist/util';\nimport 'bootstrap/js/dist/alert';\nimport 'bootstrap/js/dist/button';\nimport 'bootstrap/js/dist/carousel';\nimport 'bootstrap/js/dist/collapse';\n\nimport 'hammerjs/hammer';\nimport 'jquery-hammerjs/jquery.hammer';\n\n// Routie\n//import 'pouchdb/dist/pouchdb';\n//import './_components/routes/index';\n\n// conflicts with _components/_ui.hover.js (shows dropdown on hover)\n//import 'bootstrap/js/dist/dropdown';\nimport './_components/_ui.hover';\n\nimport './_components/_ui.carousel';\nimport './_components/_ui.menu';\n\nimport 'bootstrap/js/dist/modal';\nimport 'bootstrap/js/dist/tooltip';\nimport 'bootstrap/js/dist/popover';\nimport 'bootstrap/js/dist/scrollspy';\nimport 'bootstrap/js/dist/tab';\n//\n\n\n// Offcanvas menu\n//import 'offcanvas-bootstrap/dist/js/bootstrap.offcanvas';\n\n// Uncomment it to enable meta-lightbox zooming on hover\n//import 'jquery-zoom/jquery.zoom';\n\n\n// Toggle bootstrap form fields\n//import FormToggleUI from './_components/_ui.form.fields.toggle';\n\n// Bootstrap Date & Time fields\n//import FormDatetime from './_components/_ui.form.datetime';\n\n// Stepped forms functionality\n//import FormStepped from './_components/_ui.form.stepped';\n\n// Forms validation functionality\n//import FormValidate from './_components/_ui.form.validate';\n\n// Store forms data into localStorage\n//import FormStorage from './_components/_ui.form.storage';\n\n// client-side images cropping\n//import FormCroppie from './_components/_ui.form.croppie';\n\n// Google NoCaptcha fields\n//import NoCaptcha from './_components/_ui.nocaptcha';\n\n// youtube video preview image\nimport './_components/_ui.video.preview';\n\n// Meta Lightbox\nimport '@a2nt/meta-lightbox/src/js/index';\n\n//import Confirmation from 'bootstrap-confirmation2/dist/bootstrap-confirmation';\n//import Table from 'bootstrap-table/dist/bootstrap-table';\n\nimport './_main';\nimport './_layout';\n\nfunction importAll(r) {\n return r.keys().map(r);\n}\n\nconst images = importAll(require.context('../img/', false, /\\.(png|jpe?g|svg)$/));\nconst fontAwesome = importAll(require.context('font-awesome', false, /\\.(otf|eot|svg|ttf|woff|woff2)$/));\n","/**\n * Add your global events here\n */\n\nmodule.exports = {\n en: {\n jsSteppedForm: {\n STEPCOUNTER: '<div class=\"steps-counter\">Step <b class=\"current-step\"></b> of <b class=\"total-steps\"></b></div>',\n STEPBUTTONS: '<div class=\"steps-buttons\">' +\n '<a href=\"#\" class=\"step-ctrl step-prev\"><i class=\"fas fa-chevron-left\"></i> Prev</a>' +\n ' <a href=\"#\" class=\"step-ctrl step-next\">Next <i class=\"fas fa-chevron-right\"></i></a>' +\n '</div>',\n },\n },\n};\n","module.exports = jQuery;"],"sourceRoot":""}