{"version":3,"sources":["webpack://kidsacademy/./static/js/components/main-banner.js","webpack://kidsacademy/./static/js/components/parsley-validators.js","webpack://kidsacademy/./static/js/components/skilled-worksheet-play.js","webpack://kidsacademy/./node_modules/bootstrap/dist/js/npm.js","webpack://kidsacademy/./node_modules/bootstrap/js/affix.js","webpack://kidsacademy/./node_modules/bootstrap/js/alert.js","webpack://kidsacademy/./node_modules/bootstrap/js/button.js","webpack://kidsacademy/./node_modules/bootstrap/js/carousel.js","webpack://kidsacademy/./node_modules/bootstrap/js/collapse.js","webpack://kidsacademy/./node_modules/bootstrap/js/dropdown.js","webpack://kidsacademy/./node_modules/bootstrap/js/modal.js","webpack://kidsacademy/./node_modules/bootstrap/js/popover.js","webpack://kidsacademy/./node_modules/bootstrap/js/scrollspy.js","webpack://kidsacademy/./node_modules/bootstrap/js/tab.js","webpack://kidsacademy/./node_modules/bootstrap/js/tooltip.js","webpack://kidsacademy/./node_modules/bootstrap/js/transition.js","webpack://kidsacademy/./node_modules/js-cookie/src/js.cookie.js","webpack://kidsacademy/./node_modules/parsleyjs/dist/parsley.js","webpack://kidsacademy/./node_modules/qs/lib/formats.js","webpack://kidsacademy/./node_modules/qs/lib/index.js","webpack://kidsacademy/./node_modules/qs/lib/parse.js","webpack://kidsacademy/./node_modules/qs/lib/stringify.js","webpack://kidsacademy/./node_modules/qs/lib/utils.js","webpack://kidsacademy/./node_modules/select2/dist/js/select2.js","webpack://kidsacademy/./node_modules/slick-carousel/slick/slick.js","webpack://kidsacademy/./node_modules/smartbanner.js/dist/smartbanner.min.js","webpack://kidsacademy/./node_modules/toastr/toastr.js","webpack://kidsacademy/external var \"jQuery\"","webpack://kidsacademy/webpack/bootstrap","webpack://kidsacademy/webpack/runtime/amd define","webpack://kidsacademy/webpack/runtime/compat get default export","webpack://kidsacademy/webpack/runtime/define property getters","webpack://kidsacademy/webpack/runtime/global","webpack://kidsacademy/webpack/runtime/hasOwnProperty shorthand","webpack://kidsacademy/./static/js/config.js","webpack://kidsacademy/./static/js/utils.js","webpack://kidsacademy/./static/js/components/main.js","webpack://kidsacademy/./static/js/components/menu.js","webpack://kidsacademy/./static/js/components/header.js","webpack://kidsacademy/./static/js/components/main-banner-timer.js","webpack://kidsacademy/./static/js/components/my-messages.js","webpack://kidsacademy/./static/js/components/website-account-type-modal.js","webpack://kidsacademy/./static/js/components/website-quesstion-modal.js","webpack://kidsacademy/./static/js/payment/subscription.utils.js","webpack://kidsacademy/./static/js/components/website-plans-modal.js","webpack://kidsacademy/./static/js/components/website-cr-tg-plans-modal.js","webpack://kidsacademy/./static/js/components/website-sign-up-modal.js","webpack://kidsacademy/./static/js/payment/subscription-plans-sample.js","webpack://kidsacademy/./static/js/skilled-worksheet.js"],"names":["$","document","ready","$mainBannerCarousel","length","$mainBannerContent","on","removeClass","show","not","slick","slidesToShow","slidesToScroll","autoplay","autoplaySpeed","swipeToSlide","adaptiveHeight","window","Parsley","addValidator","requirementType","validateString","value","RegExp","test","messages","en","console","log","Affix","element","options","this","extend","DEFAULTS","target","find","$target","proxy","checkPosition","checkPositionWithEventLoop","$element","affixed","unpin","pinnedOffset","Plugin","option","each","$this","data","VERSION","RESET","offset","prototype","getState","scrollHeight","height","offsetTop","offsetBottom","scrollTop","position","targetHeight","top","initializing","colliderTop","getPinnedOffset","addClass","setTimeout","is","bottom","Math","max","body","affix","css","affixType","e","Event","trigger","isDefaultPrevented","replace","old","fn","Constructor","noConflict","$spy","call","dismiss","Alert","el","close","TRANSITION_DURATION","selector","attr","$parent","removeElement","detach","remove","preventDefault","closest","support","transition","hasClass","one","emulateTransitionEnd","alert","Button","isLoading","toggle","setState","loadingText","state","d","$el","val","resetText","prop","removeAttr","changed","$input","toggleClass","button","$btn","first","type","Carousel","$indicators","paused","sliding","interval","$active","$items","keyboard","keydown","pause","documentElement","cycle","action","slide","to","wrap","tagName","which","prev","next","clearInterval","setInterval","getItemIndex","item","parent","children","index","getItemForDirection","direction","active","activeIndex","itemIndex","eq","pos","that","end","$next","isCycling","relatedTarget","slideEvent","$nextIndicator","slidEvent","offsetWidth","join","carousel","clickHandler","href","slideIndex","$carousel","Collapse","$trigger","id","transitioning","getParent","addAriaAndCollapsedClass","getTargetFromTrigger","dimension","activesData","actives","startEvent","complete","scrollSize","camelCase","hide","offsetHeight","i","isOpen","collapse","Dropdown","clearMenus","contains","isActive","createElement","insertAfter","stopPropagation","dropdown","Modal","$body","$dialog","$backdrop","isShown","originalBodyPad","scrollbarWidth","ignoreBackdropClick","fixedContent","remote","load","_relatedTarget","BACKDROP_TRANSITION_DURATION","backdrop","checkScrollbar","setScrollbar","escape","resize","appendTo","adjustDialog","enforceFocus","off","hideModal","has","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","callback","animate","doAnimate","currentTarget","focus","callbackRemove","modalIsOverflowing","clientHeight","paddingLeft","bodyIsOverflowing","paddingRight","fullWindowWidth","innerWidth","documentElementRect","getBoundingClientRect","right","abs","left","clientWidth","measureScrollbar","bodyPad","parseInt","style","actualPadding","calculatedPadding","parseFloat","padding","removeData","scrollDiv","className","append","removeChild","modal","showEvent","Popover","init","tooltip","Error","placement","content","template","constructor","getDefaults","setContent","$tip","tip","title","getTitle","getContent","html","typeContent","sanitize","sanitizeHtml","text","hasContent","$e","o","arrow","$arrow","popover","ScrollSpy","$scrollElement","offsets","targets","activeTarget","process","refresh","getScrollHeight","offsetMethod","offsetBase","isWindow","map","$href","sort","a","b","push","maxScroll","activate","clear","undefined","parents","parentsUntil","scrollspy","Tab","$ul","$previous","hideEvent","container","tab","DISALLOWED_ATTRIBUTES","uriAttrs","DefaultWhitelist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","toLowerCase","inArray","Boolean","nodeValue","match","regExp","filter","l","unsafeHtml","whiteList","sanitizeFn","implementation","createHTMLDocument","createdDocument","innerHTML","whitelistKeys","elements","len","elName","attributeList","attributes","whitelistedAttributes","concat","j","len2","removeAttribute","parentNode","Tooltip","enabled","timeout","hoverState","inState","animation","delay","viewport","getOptions","$viewport","isFunction","click","hover","triggers","split","eventIn","eventOut","enter","leave","_options","fixTitle","dataAttributes","dataAttr","hasOwnProperty","getDelegateOptions","defaults","key","obj","self","clearTimeout","isInStateTrue","inDom","ownerDocument","tipId","getUID","autoToken","autoPlace","display","getPosition","actualWidth","actualHeight","orgPlacement","viewportDim","width","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","marginTop","marginLeft","isNaN","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","isBody","elRect","isSvg","SVGElement","elOffset","scroll","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","prefix","random","getElementById","enable","disable","toggleEnabled","destroy","duration","called","transEndEventNames","WebkitTransition","MozTransition","OTransition","name","transitionEnd","event","special","bsTransitionEnd","bindType","delegateType","handle","handleObj","handler","apply","arguments","factory","module","exports","OldCookies","Cookies","api","result","decode","decodeURIComponent","converter","set","path","expires","Date","toUTCString","JSON","stringify","write","encodeURIComponent","String","stringifiedAttributes","attributeName","cookie","get","json","jar","cookies","parts","slice","charAt","read","parse","getJSON","withConverter","_slice","Array","_slicedToArray","arr","isArray","Symbol","iterator","Object","_arr","_n","_d","_e","_s","_i","done","err","sliceIterator","TypeError","_extends","assign","source","_toConsumableArray","arr2","from","globalID","pastWarnings","Utils","namespace","attribute","regex","specified","camelize","deserializeValue","checkAttr","_checkAttr","hasAttribute","setAttr","setAttribute","dasherize","getType","getAttribute","generateID","num","Number","str","chr","toUpperCase","warn","_window$console","warnOnce","msg","_resetWarnings","trimString","string","date","parsed","_parsed$map","x","_parsed$map2","year","month","day","getFullYear","getMonth","getDate","_string","integer","number","object","regexp","_regexp","flags","parseRequirement","converted","namespaceEvents","events","evt","difference","array","_","elem","indexOf","all","promises","when","objectCreate","create","_SubmitSelector","Defaults","inputs","excluded","priorityEnabled","multiple","group","uiEnabled","validationThreshold","triggerAfterFailure","errorClass","successClass","classHandler","Field","errorsContainer","errorsWrapper","errorTemplate","Base","__id__","asyncSupport","_pipeAccordingToValidationResult","_this","pipe","r","Deferred","validationResult","reject","resolve","promise","actualizeOptions","domOptions","_resetOptions","initOptions","_listeners","subscribe","listenTo","queue","splice","unsubscribe","unsubscribeTo","extraArg","asyncIsValid","force","whenValid","_findRelated","querySelectorAll","convertArrayRequirement","m","values","convertExtraOptionRequirement","requirementSpec","extraOptionReader","main","extra","Validator","spec","validate","requirementFirstArg","validateMultiple","instance","validateDate","_isDateInput","validateNumber","parseRequirements","requirements","isPlainObject","priority","ValidatorRegistry","validators","catalog","__class__","locale","typeTesters","email","digits","alphanum","url","range","decimalPlaces","ValidatorRegistry__parseArguments","args","ValidatorRegistry__operatorToValidator","operator","_len","requirementsAndInput","_key","pop","ValidatorRegistry__comparisonOperator","setLocale","addCatalog","addMessage","message","addMessages","nameMessageObject","arg1","arg2","_setValidator","hasValidator","updateValidator","removeValidator","validator","getErrorMessage","constraint","formatMessage","defaultMessage","parameters","notblank","required","_ref","_ref$step","step","_ref$base","base","tester","nb","decimals","toInt","f","pow","pattern","minlength","requirement","maxlength","min","mincheck","maxcheck","check","equalto","refOrValue","$reference","UI","diffResults","newResult","oldResult","deep","added","kept","found","assert","removed","Form","_actualizeTriggers","_this2","onSubmitValidate","onSubmitButton","_focusedField","fields","field","noFocus","_destroyUI","_reflowUI","_buildUI","_ui","diff","lastValidationResult","_manageStatusClass","_manageErrorsMessages","_failedOnce","getErrorsMessages","errorMessage","_getErrorMessage","addError","_ref2","_ref2$updateClass","updateClass","_addError","_errorClass","updateError","_ref3","_ref3$updateClass","_updateError","removeError","_ref4$updateClass","_removeError","hasConstraints","needsValidation","_successClass","_resetClass","errorsMessagesDisabled","_insertErrorWrapper","$errorsWrapper","_ref5","_ref6","customConstraintErrorMessage","$errorClassHandler","_manageClassHandler","errorsWrapperId","validationInformationVisible","$handlerFunction","$handler","jQuery","_inputHolder","$errorsContainer","after","_this3","$toBind","_validateIfNeeded","_this4","getValue","debounce","_debounced","_resetUI","Form__statusMapping","pending","resolved","rejected","_this5","parsley","submitSource","_submitSource","_remoteCache","whenValidate","_trigger","stopImmediatePropagation","_submit","$synthetic","_arguments","_Utils$all$done$fail$always","_this6","_ref7","submitEvent","_refreshFields","_withoutReactualizingFormOptions","fail","always","isValid","_arguments2","_this7","_ref8","reset","_bindFields","_this8","oldFields","fieldsMappedById","fieldInstance","Factory","uniqueId","oldActualizeOptions","eventName","Constraint","parsleyField","isDomConstraint","validatorSpec","_validatorRegistry","_parseRequirements","capitalize","_validator","requirementList","_this9","parsleyFormInstance","constraints","constraintsByName","_bindConstraints","parsley_field__statusMapping","_whenValid$always$done$fail$always","_this10","_ref9","_isInGroup","_refreshed","_isRequired","validateIfEmpty","_arguments3","_this11","_ref10","_ref10$force","groupedConstraints","_getGroupedConstraints","_validateConstraint","_this12","_handleWhitespace","_refreshConstraints","refreshConstraints","addConstraint","removeConstraint","updateConstraint","_bindHtml5Constraints","trimValue","whitespace","c","parsley_field","Multiple","addElement","$elements","fieldConstraints","_init","savedparsleyFormInstance","__version__","bind","isMultiple","handleMultiple","parsleyMultipleInstance","_this13","input","$previouslyRelated","doNotStore","parsleyInstance","ParsleyExtend","vernums","jquery","forEach","version","psly","instances","ParsleyConfig","ParsleyUtils","registry","i18n","ParsleyValidator","method","_window$Parsley","ParsleyUI","doNotUpdateClass","autoBind","deprecated","adapt","context","parsleyAdaptedCallback","unshift","eventPrefix","lastIndexOf","substr","InputEvent","_this14","globals","g","isNativeEvent","originalEvent","isTrusted","fakeInputEvent","misbehaves","behavesOk","install","inputEventPatched","uninstall","listen","unsubscribeAll","emit","_instance","instanceGiven","asyncValidators","xhr","status","reverse","addAsyncValidator","ajaxOptions","csr","remoteOptions","param","ajax","handleXhr","then","percentTwenties","formatters","RFC1738","RFC3986","formats","utils","allowDots","allowPrototypes","arrayLimit","decoder","delimiter","depth","parameterLimit","plainObjects","strictNullHandling","parseKeys","givenKey","child","segment","exec","keys","chain","leaf","root","parseArrays","cleanRoot","parseObject","opts","ignoreQueryPrefix","isRegExp","tempObj","cleanStr","limit","Infinity","part","bracketEqualsPos","parseValues","newObj","merge","compact","arrayPrefixGenerators","brackets","indices","repeat","pushToArray","valueOrArray","toISO","toISOString","encode","encoder","encodeValuesOnly","serializeDate","skipNulls","generateArrayPrefix","formatter","isBuffer","objKeys","format","arrayFormat","joined","addQueryPrefix","hexTable","toString","arrayToObject","reduce","acc","refs","compacted","compactQueue","out","charCodeAt","mergeTarget","targetItem","S2","select2","amd","requirejs","require","define","undef","req","makeMap","handlers","defined","waiting","config","defining","hasOwn","aps","jsSuffixRegExp","hasProp","normalize","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeNormalize","makeLoad","depName","callDep","splitPrefix","substring","makeRelParts","makeConfig","relParts","plugin","relResourceName","n","pr","uri","deps","cjsModule","ret","usingExports","callbackType","alt","cfg","_defined","_$","error","getMethods","theClass","proto","methods","methodName","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","__super__","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","ctr","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","listeners","params","_type","invoke","generateChars","chars","floor","func","_convertData","originalKey","dataLevel","k","hasScroll","overflowX","overflowY","innerHeight","scrollWidth","escapeMarkup","markup","replaceMap","appendMany","$nodes","$jqNodes","node","add","Results","dataAdapter","render","$results","empty","displayMessage","hideLoading","$message","hideMessages","$options","results","$option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","current","selected","selectedIds","showLoading","loading","disabled","loadingMore","$loading","prepend","attrs","_resultId","role","label","$children","$child","$childrenContainer","$container","$highlighted","getHighlightedResults","currentIndex","nextIndex","currentOffset","nextTop","nextOffset","outerHeight","nextBottom","mousewheel","deltaY","isAtTop","isAtBottom","offsetDelta","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","LEFT","UP","RIGHT","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","update","_attachCloseHandler","_detachCloseHandler","activeElement","$select","SingleSelection","selectionContainer","selection","$rendered","formatted","MultipleSelection","$selections","Placeholder","decorated","placeholder","normalizePlaceholder","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","unselectData","prevented","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","documentMode","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","translations","BaseAdapter","query","generateResultId","SelectAdapter","select","currentData","unselect","matches","addOptions","textContent","innerText","normalizedData","_normalizeItem","matcher","ArrayAdapter","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","newData","$newOption","replaceWith","AjaxAdapter","_applyDefaults","processResults","q","transport","success","failure","$request","_request","abort","request","_queryTimeout","Tags","tags","createTag","insertTag","t","tag","wrapper","checkChildren","_removeOldTags","page","trim","_lastTag","Tokenizer","tokenizer","createAndSelect","tokenData","separators","termChar","MinimumInputLength","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","count","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","setupResultsEvents","_showDropdown","_attachPositioningHandler","_positionDropdown","_resizeDropdown","_hideDropdown","_detachPositioningHandler","$dropdownContainer","scrollEvent","resizeEvent","orientationEvent","$watchers","scrollLeft","y","ev","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","enoughRoomAbove","enoughRoomBelow","$offsetParent","offsetParent","parentOffset","outerWidth","minWidth","countResults","MinimumResultsForSearch","minimumResultsForSearch","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","ctrlKey","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","language","baseLanguage","languages","languageNames","amdLanguageBase","ex","debug","baseTranslation","customTranslation","stripDiacritics","original","dropdownAutoWidth","templateResult","templateSelection","theme","convertedData","Options","fromElement","InputCompat","excludedData","dir","dataset","Select2","_generateId","tabindex","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","attachEvent","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","_observer","mutations","observe","childList","subtree","addEventListener","nonRelayEvents","toggleDropdown","altKey","open","addedNodes","removedNodes","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","hasFocus","newVal","detachEvent","disconnect","removeEventListener","thisMethods","instanceOptions","Slick","instanceUid","settings","dataSettings","accessibility","appendArrows","appendDots","arrows","asNavFor","prevArrow","nextArrow","centerMode","centerPadding","cssEase","customPaging","slider","dots","dotsClass","draggable","easing","edgeFriction","fade","focusOnSelect","infinite","initialSlide","lazyLoad","mobileFirst","pauseOnHover","pauseOnFocus","pauseOnDotsHover","respondTo","responsive","rows","rtl","slidesPerRow","speed","swipe","touchMove","touchThreshold","useCSS","useTransform","variableWidth","vertical","verticalSwiping","waitForAnimate","zIndex","initials","animating","dragging","autoPlayTimer","currentDirection","currentLeft","currentSlide","$dots","listWidth","listHeight","loadIndex","$nextArrow","$prevArrow","slideCount","slideWidth","$slideTrack","$slides","slideOffset","swipeLeft","$list","touchObject","transformsEnabled","unslicked","activeBreakpoint","animType","animProp","breakpoints","breakpointSettings","cssTransitions","focussed","interrupted","hidden","positionProp","rowCount","shouldClick","$slider","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","originalSettings","mozHidden","webkitHidden","autoPlay","autoPlayClear","autoPlayIterator","changeSlide","selectHandler","setPosition","swipeHandler","dragHandler","keyHandler","htmlExpr","registerBreakpoints","activateADA","addSlide","slickAdd","addBefore","unload","insertBefore","prependTo","reinit","animateHeight","animateSlide","targetLeft","animProps","animStart","now","ceil","applyTransition","disableTransition","getNavTarget","slideHandler","slideTo","buildArrows","buildDots","dot","getDotCount","buildOut","wrapAll","setupInfinite","updateDots","setSlideClasses","buildRows","newSlides","numOfSlides","originalSlides","slidesPerSection","createDocumentFragment","row","appendChild","checkResponsive","initial","forceUpdate","breakpoint","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","unslick","dontAnimate","indexOffset","checkNavigable","navigables","prevNavigable","getNavigableIndexes","cleanUpEvents","interrupt","visibility","cleanUpSlideEvents","orientationChange","cleanUpRows","fadeSlide","opacity","fadeSlideOut","filterSlides","slickFilter","focusHandler","$sf","getCurrent","slickCurrentSlide","breakPoint","counter","pagerQty","getLeft","verticalHeight","targetSlide","verticalOffset","offsetLeft","getOption","slickGetOption","indexes","getSlick","getSlideCount","swipedSlide","centerOffset","goTo","slickGoTo","creation","setProps","startLoad","loadSlider","initializeEvents","updateArrows","initADA","initArrowEvents","initDotEvents","initSlideEvents","initUI","keyCode","rangeStart","rangeEnd","loadImages","imagesScope","image","imageSource","imageToLoad","onload","onerror","src","progressiveLazyLoad","slickNext","slickPause","play","slickPlay","postSlide","slickPrev","tryCount","$imgsToLoad","lastVisibleIndex","currentBreakpoint","responsiveSettings","windowDelay","removeSlide","slickRemove","removeBefore","removeAll","setCSS","positionProps","setDimensions","setFade","setHeight","setOption","slickSetOption","opt","bodyStyle","msTransition","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","transform","allSlides","remainder","infiniteCount","clone","targetElement","sync","animSlide","oldSlide","slideLeft","navTarget","swipeDirection","xDist","yDist","swipeAngle","startX","curX","startY","curY","atan2","PI","swipeEnd","swipeLength","edgeHit","minSwipe","fingerCount","touches","swipeStart","swipeMove","curLeft","positionOffset","pageX","clientX","pageY","clientY","sqrt","unfilterSlides","slickUnfilter","fromBreakpoint","_defineProperties","descriptor","enumerable","configurable","writable","defineProperty","Bakery","_classCallCheck","protoProps","staticProps","hideTtl","expireTime","getTime","toGMTString","hidePath","getCookieExpiresString","global","Detector","maxTouchPoints","navigator","userAgent","regexString","mobile","querySelector","jQueryMobilePage","smartbanner","_smartbanner","__esModule","default","apiEnabled","publish","OptionParser","metas","getElementsByTagName","meta","optionName","valid","convertToCamelCase","_optionparser","_interopRequireDefault","_detector","_bakery","datas","handleJQueryMobilePageLoad","positioningDisabled","setContentPosition","wrappers","wrapperElement","getComputedStyle","margin","SmartBanner","parser","platform","dispatchEvent","priceSuffixApple","priceSuffixGoogle","iconGoogle","iconApple","buttonUrlGoogle","buttonUrlApple","closeLabel","modifier","customDesignModifier","icon","author","price","priceSuffix","buttonUrl","enabledPlatforms","disablePositioning","excludeUserAgentRegex","userAgentMatchesRegex","includeUserAgentRegex","baked","userAgentExcluded","platformEnabled","userAgentIncluded","bannerDiv","outerHTML","exit","handleExitClick","clickout","handleClickout","addEventListeners","restoreContentPosition","banner","bake","listener","previousToast","toastId","toastType","toastr","$toastElement","clearOptions","getContainer","clearToast","toastsToClear","clearContainer","removeToast","optionsOverride","notify","iconClass","iconClasses","info","warning","containerId","positionClass","createContainer","hideMethod","hideDuration","hideEasing","preventDuplicates","shouldExit","intervalId","$titleElement","$messageElement","$progressElement","$closeElement","closeHtml","progressBar","hideEta","maxHideTime","response","startTime","toastClass","suffix","escapeHtml","titleClass","setTitle","messageClass","setMessage","closeButton","closeClass","progressClass","newestOnTop","ariaValue","setAria","showMethod","showDuration","showEasing","onShown","timeOut","hideToast","updateProgress","closeOnHover","stickAround","delayedHideToast","onclick","tapToDismiss","cancelBubble","onCloseClick","override","closeMethod","closeDuration","closeEasing","onHidden","endTime","extendedTimeOut","stop","percentage","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdD","getter","definition","globalThis","Function","ENDPOINT","URLS","GET_PARAMS","LOCAL_STORAGE_KEYS","JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE","SUPPORT_EMAIL","ERROR_CODES","RESPONSE_CODES","SUBJECTS","INVALID_DISTRICT","INVALID_SCHOOL","INVALID_USER","EMPTY_USER","GIFT_CODE_INVALID","SUBSCRIPTION_EXISTS","INVALID_ACCOUNT_TYPE","ACCOUNT_TYPES","ACCOUNT_TYPES_STRING","EBLOX_COUPONS","PROMO_LANDINGS_URLS","DROPIN_SCRIPT_URL","CUSTOM_MESSAGE","SUBSCRIPTION_PERIODS","SUBSCRIPTION_PERIOD_MAPPING","MODALS","WORKSHEET_ACTIONS","WEBSITE_CUSTOM_EVENTS","WEBSITE_LIMIT_STATUSES","WORKSHEET_ACTION_TYPES","IS_DOWNLOAD_WORKSHEET_FLOW","getBrowser","tem","M","appName","appVersion","toggleButtonLoading","$button","removeProperty","replaceEmailWithLink","addLinkToEmail","emailLinkHref","text1","text2","getError","errorResponse","errorMsgs","es","defaultErrorMsg","LANGUAGE_CODE","errors","responseText","getUrlParam","paramName","URLSearchParams","location","search","decodeURI","deleteUrlParam","URL","searchParams","delete","history","replaceState","scrollToHashedElement","hash","scrollIntoViewDelay","scrollTimeout","$header","heightToSubtract","formattedHash","$elem","isASCII","braintreeDropinConfig","totalAmount","authorization","braintree_token","threeDSecure","vaultManager","card","cardholderName","overrides","styles","color","paypal","flow","buttonStyle","size","paypalCredit","venmo","applePay","paymentRequest","total","amount","requiredBillingContactFields","ENV","googlePay","googlePayVersion","merchantId","transactionInfo","totalPriceStatus","totalPrice","currencyCode","allowedPaymentMethods","billingAddressRequired","billingAddressParameters","threeDSecureConfig","givenName","user","first_name","surname","last_name","billingAddress","getUserSources","sourcesOfUser","dispatchCustomEvent","CustomEvent","detail","storage","localStorage","setItem","isDelete","getItem","removeItem","isFormValid","$form","formParsley","deleteGetParamFromUrl","pathname","isThreeDSecureCanceled","payload","liabilityShifted","isThreeDSecurePassed","processingPlurals","singular","plural","numberNum","toggleMarkWorksheetAsDone","worksheetId","isPostMethod","toggleAddWorksheetToFavorite","redirectToCompleteOnlineInTGC","slug","queryParams","baseUrl","showJoinKidsAcademyModal","checkStorage","teacherQueryParams","parentQueryParams","analyticEventType","ga","$joinKidsacademyForFreeModal","teacher","student","initialTeacherHref","initialParentHref","initialTarget","isFinished","updateWorksheetDownloadCount","shouldDownloadBeCounted","isAbleToDownload","worksheetLastDownloadDate","nowTimestamp","downloadWorksheetHandler","utm","btnDataSelectorValue","hasValidParentSubscription","worksheetSlug","isLoggedIn","websiteAccountType","activityId","activityType","redirectToTgcWithOpenActivityParams","isWebGamesPage","MSInputMethodContext","adsBannerModal","adsBannerModalClose","htmx","$worksheetItem","parentSubscriptionPastDueUntil","parentSignUpUrl","teacherSignUpUrl","parentSignUpModal","ajaxSetup","cache","beforeSend","csrfToken","setRequestHeader","sayswho","N","ua","Qs","queryObject","doRedirectsOnPageLoad","browserName","browserVersion","$mainBanner","mainBannerImgUrl","$pictureElement","$imgElementForIE","handleMainBannerImageLoad","selectParentTab","selectTeacherTab","predicate","list","thisArg","findIndex","$bottomAdsense","$footer","$plansModal","mobileFilterOverlay","filterCloseBtn","fadeOut","$loginPage","$logInModal","$kindsAcademyCom","noRedirectAttrName","schoolLoginForm","familyLoginForm","specialInputSelector","loginEmailInput","loginPasswordInput","$loginError","tabId","$resetForm","$mainMenuNavbar","$mainMenuDropdown","$appDropdownToggle","$appDropdownMenu","$appDropdown","openTabByGetParam","accountType","setEmailFromGetParam","providedEmail","handleLoginRedirectError","resetParsleyErrors","form","initLoginTooltip","toggleFormLoading","$submitBtn","hideLoginFormError","handleLoginError","$errorBlock","tabName","redirect_url","error_code","subject","password","loginParsleyForm","contentType","username","fwdUrl","reload","coupon","nextParam","nextUrl","origin","couponGetParam","has_parent_subscription","nextPath","emailParam","btoa","getParams","noNeedToRedirectFlag","matchMedia","slideToggle","$curURL","$appLinkHref","initAppsDropdown","$linkHref","getActivePointAppDropdownMenu","$document","addsFreeModalBtnClicked","$timer","formatNumberForDisplay","toLocaleString","minimumIntegerDigits","setTimerValue","secondsInterval","fullDaysLeft","fullHoursLeft","fullMinsLeft","secondsLeft","seconds","hoursRemain","minsRemain","secondsToDhms","timerData","timerSectionAttr","entries","timerElement","timerExpires","timerExpiresDate","timerInterval","dateFrom","dateUntil","dateFromToUTC","dateDiffUTC","countdown","setTimer","notification","$notificationDropdown","notificationMarkAsRead","$notificationContainer","$notificationActiveIcon","$notificationInActiveIcon","accSettingsMessagesBtn","$messagesContentList","messagePreviewText","$messagePreviewList","messageIdDataAttr","markAllAsReadBtn","messageBackBtn","$messageTopTitle","messageReadClassName","markMessageAsReadOnUI","messageId","currentMessageSelector","$messagePreviewItem","$headerMessageItem","sendMessagesReadRequest","messageIdsArray","ids","has_unread_messages","makeNotificationIconInactive","updateUrlWithMessageIdGetParam","newUrl","pushState","notReadMessagesIdsArray","$messageTextItem","$messageContentItem","$messageContentAllItems","$messageLink","showMessageById","$notReadPreviewMessageItems","openMessageOnPageLoad","$websiteAccountTypeModal","$websiteQuestionFavouritesModal","$websiteQuestionDoneModal","toggleApplyCouponBtn","couponInput","applyCouponBtn","couponBlockParams","emptyCouponClass","handleDropinToken","errorHandler","token","getSelectedOfferDetails","selectedOffer","amountOff","planAttr","userEmail","offerPeriod","backUrl","offerPeriodDisplay","planPeriod","planFullPrice","toFixed","planPriceWithDiscount","planFormattedNewPrice","planSlug","planBackUrl","planPeriodDisplay","getShippingPriceInCents","shippingCountriesSelect","getTotalPricesInCents","planFullPriceInCents","isTrialActive","isEbloxAdded","activeCoupon","mainSubscriptionPriceInCents","subscriptionPriceInCents","ebloxAndShippingPriceInCents","totalPriceInCents","ebloxAddonPrice","amountPriceInCents","priceAfterDiscount","priceFor3DSecure","threeDSecurePrice","threeDSecurePriceAfterDiscount","getPriceFor3ds","defineTrialMessagePlural","trialDuration","unit","$websitePlansModal","isSuccessStepShown","adFreeSubscription","planBtn","braintreeDropin","braintreeDropinInstance","$plansContainer","$purchaseContainer","backToPlansBtn","$backToPlansBtn","$websitePlansModalTitle","defaultModalTitle","isTwoPlansModal","$goToPaymentBtn","$submitPaymentBtn","$subscriptionError","$buySubscriptionSuccessStep","$subtitle","trialDurationAttr","priceAttr","successStepActive","$planPeriod","$fullPrice","$trialValue","$trialRow","$todayPrice","$renewCondition","twoPlansClassName","$plansModalLoading","$plansModalContent","toggleWebsitePlansLoading","showWebsitePlansNoFreePopup","isDefaultTitle","initBraintreeDropin","redirect","braintree","totalPriceInDollars","braintreeConf","dropin","createErr","isPaymentMethodRequestable","priceFor3DSecureStr","threeDSecureConf","requestPaymentMethod","requestPaymentMethodErr","clearSelectedPaymentMethod","payment_method_nonce","nonce","plan_slug","actionType","goToCompleteOnlineInTgc","can_download_pdf","handleCompleteOnline","errorResp","getTotalPriceInCents","priceInCents","ableToGetTrial","isTrialEnabled","goToPaymentErrorHandler","dropinTokenCallback","planPrice","planPriceString","trialDurationString","renderSecondStepUI","onDismissPlansModal","worksheetUtm","includes","skipOnboarding","redirectToTgcWithOpenWorksheetParams","referrer","teardown","isSignUpComplete","getScript","isPromo","subtitle","showSignUpModal","isWebsitePlansModalShow","HAS_PARENT_SUBSCRIPTION","isWebsitePlans","isWebsitePlansExists","onPageLoad","termsCheckbox","formSubmitBtn","$formError","$registrationModalSubmitBtn","$termsCheckbox","googleCaptchaToken","onRecaptchaExpire","getPayload","account_type","medium","campaign","website_account_type","loadRecaptcha","isChecked","expiredCallback","captchaDataSelector","onRECAPTCHAloadCallback","grecaptcha","RECAPTCHA_SITE_KEY","script","screen","initGoogleRecaptcha","$regForm","parsleyForm","websitePlanSlug","promoPlanSlug","$subscriptionPlans","$signUpSection","$signUpBtn","signUpForm","$signUpEmail","$signUpPassword","$signUpError","$mailingCheckbox","subscriptionPlansHash","activeClass","showCouponText","hideCouponText","$pageTitle","firstStepMainTitle","secondStepNoTrialTitle","$appInfoSection","$ebloxInfoSection","$reviewsSection","$buttonsBlockWrapper","firstStepClassName","isTrialRadioEnabled","offerTitle","submitText","isCouponEnabled","isOfferDefault","showOnboardingSteps","checkoutTextAttr","trial","noTrial","planInput","selectedPlanInput","secondStepClassName","prevSectionButton","$prevSectionButton","goToSignUpStepBtn","$goToSignUpStepBtn","$stepProgressBar","planInputWrapperSelector","$planFullPrice","$planTrialPeriod","$planDiscountRow","$planTrialRow","$planDiscount","$planTotalPrice","$planRenewCondition","$trialText","removedSubscriptions","$addonOnPaymentStep","$ebloxRow","$ebloxPrice","$shippingRow","$shippingPrice","$shippingForm","ebloxTooltipLink","$couponInputSection","$couponBlock","toggleCouponBlockBtn","$toggleCouponBlockBtn","$couponForm","$couponError","$couponInput","applyCoupon","$applyCoupon","removeCoupon","$removeCoupon","$couponMessage","$licenseActivationCodeModal","isSpecialCouponApplied","specialCouponTrialDuration","$trialNoteText","$firstSection","$signUpStepSection","$secondStepSection","section","isTrialActiveRadio","$isTrialActiveRadio","$isTrialActiveRadioLabel","$isTrialActiveRadioWrapper","$noteForm","$noteFormInput","parsleyNoteForm","isEbloxNoteInputSeen","$hasCommentsCheck","$subscriptionReviews","$reviewsCarousel","$reviewsSliderLoader","dropinInstance","initFirstSectionUI","toggleIsTrialSelectRadio","setTrialDurationToTrialRadioBtnLabel","setDefaultOfferSubmitText","toggleTrialNoteText","initTooltipLinkVisibility","applyProvidedCoupon","toggleIsCouponInputSection","plan","$planInputWrapper","initReviewSlider","labelText","getTrialDurationText","noTrialText","checkCouponApplicability","isInvalid","setMainTitle","sectionId","getPurchaseStepTitle","selectSection","handleProgressBar","setCheckoutBtnTitle","isTrialAvailable","$selectedPlanInput","getTrialSelectRadioSeenStatus","buttonsBlockClass","Promise","providedCoupon","removeEbloxDataUIFromPaymentStep","updateUIbyShippingPrice","formattedShippingPrice","getTotalPrices","setTotalPriceToUI","currencyPrice","preparePurchaseStep","offer","planTrialPeriod","setSelectedPlanDataToUI","formattedOfferPeriod","triggerGAEventOnGoToPayment","isStepsShownStr","toggleStepProgressBar","requestData","paymentMethodNonce","discount_id","trial_enabled","note","getPurchaseRequestData","triggerAnalyticsOnCheckout","proceedPurchaseFlow","prepareSignUpStep","getParentSignUpData","isSubscribedToMailing","subscribe_to_emails","buy_subscription_flow","signUpFormParsley","errorText","checked","teardownErr","doCheckIsCouponDistributorCode","post","amount_off","exclude_subscriptions","isCouponValid","description","has_trial","trial_duration","disableTrialApplyRadioBtn","errorObject","couponBlock","toggleCouponBlock"],"mappings":"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IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,IACV,IAAU,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,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","file":"skilled-worksheet_js.js","sourcesContent":["$(document).ready(() => {\n  const $mainBannerCarousel = $('[data-selector=\"main-banner-slider\"]');\n\n  if (!$mainBannerCarousel || !$mainBannerCarousel.length) return;\n\n  const $mainBannerContent = $('[data-selector=\"main-banner-content\"]');\n\n  // callback for the first time Slick initializes\n  $mainBannerCarousel.on('init', () => {\n    $mainBannerContent.removeClass('_loading');\n    $mainBannerCarousel.show();\n  });\n\n  $mainBannerCarousel.not('.slick-initialized').slick({\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    autoplay: true,\n    autoplaySpeed: 5000,\n    swipeToSlide: true,\n    adaptiveHeight: true\n  });\n});\n","$(function () {\n  window.Parsley.addValidator('password', {\n    requirementType: 'string',\n    validateString: function (value) {\n      const regex = new RegExp('(?=.*[a-zA-Z])(\\w*)(?=.{6,})');\n      return regex.test(value);\n    },\n    messages: {\n      en: 'Password should be at least 6 characters long and have 1 letter'\n    }\n  });\n\n\n  window.Parsley.addValidator('cardholderName', {\n    requirementType: 'string',\n    validateString: function (value) {\n      const regex = /\\w+\\s\\w+/;\n      return regex.test(value);\n    },\n    messages: {\n      en: 'Please provide cardholder\\'s first and last names'\n    }\n  });\n});\n","const $document = $(document);\n\n$document.ready(function () {\n  // eslint-disable-next-line no-console\n  console.log('skilled worksheet play');\n});\n","// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')","/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n    this.$target = target\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.4.1'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: alert.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.4.1'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    selector    = selector === '#' ? [] : selector\n    var $parent = $(document).find(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: button.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.4.1'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: carousel.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.4.1'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      if (typeof $next === 'object' && $next.length) {\n        $next[0].offsetWidth // force reflow\n      }\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    if (href) {\n      href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n    }\n\n    var target  = $this.attr('data-target') || href\n    var $target = $(document).find(target)\n\n    if (!$target.hasClass('carousel')) return\n\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: collapse.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.4.1'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(document).find(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(document).find(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.4.1'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector !== '#' ? $(document).find(selector) : null\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: modal.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.1'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.4.1'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    if (this.options.html) {\n      var typeContent = typeof content\n\n      if (this.options.sanitize) {\n        title = this.sanitizeHtml(title)\n\n        if (typeContent === 'string') {\n          content = this.sanitizeHtml(content)\n        }\n      }\n\n      $tip.find('.popover-title').html(title)\n      $tip.find('.popover-content').children().detach().end()[\n        typeContent === 'string' ? 'html' : 'append'\n      ](content)\n    } else {\n      $tip.find('.popover-title').text(title)\n      $tip.find('.popover-content').children().detach().end().text(content)\n    }\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n        o.content.call($e[0]) :\n        o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.4.1'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.4.1'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(document).find(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n          .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n  'use strict';\n\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n  var uriAttrs = [\n    'background',\n    'cite',\n    'href',\n    'itemtype',\n    'longdesc',\n    'poster',\n    'src',\n    'xlink:href'\n  ]\n\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  }\n\n  /**\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  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase()\n\n    if ($.inArray(attrName, allowedAttributeList) !== -1) {\n      if ($.inArray(attrName, uriAttrs) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n      }\n\n      return true\n    }\n\n    var regExp = $(allowedAttributeList).filter(function (index, value) {\n      return value instanceof RegExp\n    })\n\n    // Check if a regular expression validates the attribute.\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    // IE 8 and below don't support createHTMLDocument\n    if (!document.implementation || !document.implementation.createHTMLDocument) {\n      return unsafeHtml\n    }\n\n    var createdDocument = document.implementation.createHTMLDocument('sanitization')\n    createdDocument.body.innerHTML = unsafeHtml\n\n    var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n    var elements = $(createdDocument.body).find('*')\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var el = elements[i]\n      var elName = el.nodeName.toLowerCase()\n\n      if ($.inArray(elName, whitelistKeys) === -1) {\n        el.parentNode.removeChild(el)\n\n        continue\n      }\n\n      var attributeList = $.map(el.attributes, function (el) { return el })\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n      for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n        if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n          el.removeAttribute(attributeList[j].nodeName)\n        }\n      }\n    }\n\n    return createdDocument.body.innerHTML\n  }\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.4.1'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    },\n    sanitize : true,\n    sanitizeFn : null,\n    whiteList : DefaultWhitelist\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    var dataAttributes = this.$element.data()\n\n    for (var dataAttr in dataAttributes) {\n      if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n        delete dataAttributes[dataAttr]\n      }\n    }\n\n    options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    if (options.sanitize) {\n      options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    if (this.options.html) {\n      if (this.options.sanitize) {\n        title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n      }\n\n      $tip.find('.tooltip-inner').html(title)\n    } else {\n      $tip.find('.tooltip-inner').text(title)\n    }\n\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n  Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n    return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n  }\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // https://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t//     character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/*!\n* Parsley.js\n* Version 2.8.0 - built Wed, Sep 13th 2017, 11:04 pm\n* http://parsleyjs.org\n* Guillaume Potier - <guillaume@wisembly.com>\n* Marc-Andre Lafortune - <petroselinum@marc-andre.ca>\n* MIT Licensed\n*/\n\n// The source code below is generated by babel as\n// Parsley is written in ECMAScript 6\n//\nvar _slice = Array.prototype.slice;\n\nvar _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : global.parsley = factory(global.jQuery);\n})(this, function ($) {\n  'use strict';\n\n  var globalID = 1;\n  var pastWarnings = {};\n\n  var Utils = {\n    // Parsley DOM-API\n    // returns object from dom attributes and values\n    attr: function attr(element, namespace, obj) {\n      var i;\n      var attribute;\n      var attributes;\n      var regex = new RegExp('^' + namespace, 'i');\n\n      if ('undefined' === typeof obj) obj = {};else {\n        // Clear all own properties. This won't affect prototype's values\n        for (i in obj) {\n          if (obj.hasOwnProperty(i)) delete obj[i];\n        }\n      }\n\n      if (!element) return obj;\n\n      attributes = element.attributes;\n      for (i = attributes.length; i--;) {\n        attribute = attributes[i];\n\n        if (attribute && attribute.specified && regex.test(attribute.name)) {\n          obj[this.camelize(attribute.name.slice(namespace.length))] = this.deserializeValue(attribute.value);\n        }\n      }\n\n      return obj;\n    },\n\n    checkAttr: function checkAttr(element, namespace, _checkAttr) {\n      return element.hasAttribute(namespace + _checkAttr);\n    },\n\n    setAttr: function setAttr(element, namespace, attr, value) {\n      element.setAttribute(this.dasherize(namespace + attr), String(value));\n    },\n\n    getType: function getType(element) {\n      return element.getAttribute('type') || 'text';\n    },\n\n    generateID: function generateID() {\n      return '' + globalID++;\n    },\n\n    /** Third party functions **/\n    deserializeValue: function deserializeValue(value) {\n      var num;\n\n      try {\n        return value ? value == \"true\" || (value == \"false\" ? false : value == \"null\" ? null : !isNaN(num = Number(value)) ? num : /^[\\[\\{]/.test(value) ? JSON.parse(value) : value) : value;\n      } catch (e) {\n        return value;\n      }\n    },\n\n    // Zepto camelize function\n    camelize: function camelize(str) {\n      return str.replace(/-+(.)?/g, function (match, chr) {\n        return chr ? chr.toUpperCase() : '';\n      });\n    },\n\n    // Zepto dasherize function\n    dasherize: function dasherize(str) {\n      return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\\d])([A-Z])/g, '$1_$2').replace(/_/g, '-').toLowerCase();\n    },\n\n    warn: function warn() {\n      var _window$console;\n\n      if (window.console && 'function' === typeof window.console.warn) (_window$console = window.console).warn.apply(_window$console, arguments);\n    },\n\n    warnOnce: function warnOnce(msg) {\n      if (!pastWarnings[msg]) {\n        pastWarnings[msg] = true;\n        this.warn.apply(this, arguments);\n      }\n    },\n\n    _resetWarnings: function _resetWarnings() {\n      pastWarnings = {};\n    },\n\n    trimString: function trimString(string) {\n      return string.replace(/^\\s+|\\s+$/g, '');\n    },\n\n    parse: {\n      date: function date(string) {\n        var parsed = string.match(/^(\\d{4,})-(\\d\\d)-(\\d\\d)$/);\n        if (!parsed) return null;\n\n        var _parsed$map = parsed.map(function (x) {\n          return parseInt(x, 10);\n        });\n\n        var _parsed$map2 = _slicedToArray(_parsed$map, 4);\n\n        var _ = _parsed$map2[0];\n        var year = _parsed$map2[1];\n        var month = _parsed$map2[2];\n        var day = _parsed$map2[3];\n\n        var date = new Date(year, month - 1, day);\n        if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) return null;\n        return date;\n      },\n      string: function string(_string) {\n        return _string;\n      },\n      integer: function integer(string) {\n        if (isNaN(string)) return null;\n        return parseInt(string, 10);\n      },\n      number: function number(string) {\n        if (isNaN(string)) throw null;\n        return parseFloat(string);\n      },\n      'boolean': function _boolean(string) {\n        return !/^\\s*false\\s*$/i.test(string);\n      },\n      object: function object(string) {\n        return Utils.deserializeValue(string);\n      },\n      regexp: function regexp(_regexp) {\n        var flags = '';\n\n        // Test if RegExp is literal, if not, nothing to be done, otherwise, we need to isolate flags and pattern\n        if (/^\\/.*\\/(?:[gimy]*)$/.test(_regexp)) {\n          // Replace the regexp literal string with the first match group: ([gimy]*)\n          // If no flag is present, this will be a blank string\n          flags = _regexp.replace(/.*\\/([gimy]*)$/, '$1');\n          // Again, replace the regexp literal string with the first match group:\n          // everything excluding the opening and closing slashes and the flags\n          _regexp = _regexp.replace(new RegExp('^/(.*?)/' + flags + '$'), '$1');\n        } else {\n          // Anchor regexp:\n          _regexp = '^' + _regexp + '$';\n        }\n        return new RegExp(_regexp, flags);\n      }\n    },\n\n    parseRequirement: function parseRequirement(requirementType, string) {\n      var converter = this.parse[requirementType || 'string'];\n      if (!converter) throw 'Unknown requirement specification: \"' + requirementType + '\"';\n      var converted = converter(string);\n      if (converted === null) throw 'Requirement is not a ' + requirementType + ': \"' + string + '\"';\n      return converted;\n    },\n\n    namespaceEvents: function namespaceEvents(events, namespace) {\n      events = this.trimString(events || '').split(/\\s+/);\n      if (!events[0]) return '';\n      return $.map(events, function (evt) {\n        return evt + '.' + namespace;\n      }).join(' ');\n    },\n\n    difference: function difference(array, remove) {\n      // This is O(N^2), should be optimized\n      var result = [];\n      $.each(array, function (_, elem) {\n        if (remove.indexOf(elem) == -1) result.push(elem);\n      });\n      return result;\n    },\n\n    // Alter-ego to native Promise.all, but for jQuery\n    all: function all(promises) {\n      // jQuery treats $.when() and $.when(singlePromise) differently; let's avoid that and add spurious elements\n      return $.when.apply($, _toConsumableArray(promises).concat([42, 42]));\n    },\n\n    // Object.create polyfill, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill\n    objectCreate: Object.create || (function () {\n      var Object = function Object() {};\n      return function (prototype) {\n        if (arguments.length > 1) {\n          throw Error('Second argument not supported');\n        }\n        if (typeof prototype != 'object') {\n          throw TypeError('Argument must be an object');\n        }\n        Object.prototype = prototype;\n        var result = new Object();\n        Object.prototype = null;\n        return result;\n      };\n    })(),\n\n    _SubmitSelector: 'input[type=\"submit\"], button:submit'\n  };\n\n  // All these options could be overriden and specified directly in DOM using\n  // `data-parsley-` default DOM-API\n  // eg: `inputs` can be set in DOM using `data-parsley-inputs=\"input, textarea\"`\n  // eg: `data-parsley-stop-on-first-failing-constraint=\"false\"`\n\n  var Defaults = {\n    // ### General\n\n    // Default data-namespace for DOM API\n    namespace: 'data-parsley-',\n\n    // Supported inputs by default\n    inputs: 'input, textarea, select',\n\n    // Excluded inputs by default\n    excluded: 'input[type=button], input[type=submit], input[type=reset], input[type=hidden]',\n\n    // Stop validating field on highest priority failing constraint\n    priorityEnabled: true,\n\n    // ### Field only\n\n    // identifier used to group together inputs (e.g. radio buttons...)\n    multiple: null,\n\n    // identifier (or array of identifiers) used to validate only a select group of inputs\n    group: null,\n\n    // ### UI\n    // Enable\\Disable error messages\n    uiEnabled: true,\n\n    // Key events threshold before validation\n    validationThreshold: 3,\n\n    // Focused field on form validation error. 'first'|'last'|'none'\n    focus: 'first',\n\n    // event(s) that will trigger validation before first failure. eg: `input`...\n    trigger: false,\n\n    // event(s) that will trigger validation after first failure.\n    triggerAfterFailure: 'input',\n\n    // Class that would be added on every failing validation Parsley field\n    errorClass: 'parsley-error',\n\n    // Same for success validation\n    successClass: 'parsley-success',\n\n    // Return the `$element` that will receive these above success or error classes\n    // Could also be (and given directly from DOM) a valid selector like `'#div'`\n    classHandler: function classHandler(Field) {},\n\n    // Return the `$element` where errors will be appended\n    // Could also be (and given directly from DOM) a valid selector like `'#div'`\n    errorsContainer: function errorsContainer(Field) {},\n\n    // ul elem that would receive errors' list\n    errorsWrapper: '<ul class=\"parsley-errors-list\"></ul>',\n\n    // li elem that would receive error message\n    errorTemplate: '<li></li>'\n  };\n\n  var Base = function Base() {\n    this.__id__ = Utils.generateID();\n  };\n\n  Base.prototype = {\n    asyncSupport: true, // Deprecated\n\n    _pipeAccordingToValidationResult: function _pipeAccordingToValidationResult() {\n      var _this = this;\n\n      var pipe = function pipe() {\n        var r = $.Deferred();\n        if (true !== _this.validationResult) r.reject();\n        return r.resolve().promise();\n      };\n      return [pipe, pipe];\n    },\n\n    actualizeOptions: function actualizeOptions() {\n      Utils.attr(this.element, this.options.namespace, this.domOptions);\n      if (this.parent && this.parent.actualizeOptions) this.parent.actualizeOptions();\n      return this;\n    },\n\n    _resetOptions: function _resetOptions(initOptions) {\n      this.domOptions = Utils.objectCreate(this.parent.options);\n      this.options = Utils.objectCreate(this.domOptions);\n      // Shallow copy of ownProperties of initOptions:\n      for (var i in initOptions) {\n        if (initOptions.hasOwnProperty(i)) this.options[i] = initOptions[i];\n      }\n      this.actualizeOptions();\n    },\n\n    _listeners: null,\n\n    // Register a callback for the given event name\n    // Callback is called with context as the first argument and the `this`\n    // The context is the current parsley instance, or window.Parsley if global\n    // A return value of `false` will interrupt the calls\n    on: function on(name, fn) {\n      this._listeners = this._listeners || {};\n      var queue = this._listeners[name] = this._listeners[name] || [];\n      queue.push(fn);\n\n      return this;\n    },\n\n    // Deprecated. Use `on` instead\n    subscribe: function subscribe(name, fn) {\n      $.listenTo(this, name.toLowerCase(), fn);\n    },\n\n    // Unregister a callback (or all if none is given) for the given event name\n    off: function off(name, fn) {\n      var queue = this._listeners && this._listeners[name];\n      if (queue) {\n        if (!fn) {\n          delete this._listeners[name];\n        } else {\n          for (var i = queue.length; i--;) if (queue[i] === fn) queue.splice(i, 1);\n        }\n      }\n      return this;\n    },\n\n    // Deprecated. Use `off`\n    unsubscribe: function unsubscribe(name, fn) {\n      $.unsubscribeTo(this, name.toLowerCase());\n    },\n\n    // Trigger an event of the given name\n    // A return value of `false` interrupts the callback chain\n    // Returns false if execution was interrupted\n    trigger: function trigger(name, target, extraArg) {\n      target = target || this;\n      var queue = this._listeners && this._listeners[name];\n      var result;\n      var parentResult;\n      if (queue) {\n        for (var i = queue.length; i--;) {\n          result = queue[i].call(target, target, extraArg);\n          if (result === false) return result;\n        }\n      }\n      if (this.parent) {\n        return this.parent.trigger(name, target, extraArg);\n      }\n      return true;\n    },\n\n    asyncIsValid: function asyncIsValid(group, force) {\n      Utils.warnOnce(\"asyncIsValid is deprecated; please use whenValid instead\");\n      return this.whenValid({ group: group, force: force });\n    },\n\n    _findRelated: function _findRelated() {\n      return this.options.multiple ? $(this.parent.element.querySelectorAll('[' + this.options.namespace + 'multiple=\"' + this.options.multiple + '\"]')) : this.$element;\n    }\n  };\n\n  var convertArrayRequirement = function convertArrayRequirement(string, length) {\n    var m = string.match(/^\\s*\\[(.*)\\]\\s*$/);\n    if (!m) throw 'Requirement is not an array: \"' + string + '\"';\n    var values = m[1].split(',').map(Utils.trimString);\n    if (values.length !== length) throw 'Requirement has ' + values.length + ' values when ' + length + ' are needed';\n    return values;\n  };\n\n  var convertExtraOptionRequirement = function convertExtraOptionRequirement(requirementSpec, string, extraOptionReader) {\n    var main = null;\n    var extra = {};\n    for (var key in requirementSpec) {\n      if (key) {\n        var value = extraOptionReader(key);\n        if ('string' === typeof value) value = Utils.parseRequirement(requirementSpec[key], value);\n        extra[key] = value;\n      } else {\n        main = Utils.parseRequirement(requirementSpec[key], string);\n      }\n    }\n    return [main, extra];\n  };\n\n  // A Validator needs to implement the methods `validate` and `parseRequirements`\n\n  var Validator = function Validator(spec) {\n    $.extend(true, this, spec);\n  };\n\n  Validator.prototype = {\n    // Returns `true` iff the given `value` is valid according the given requirements.\n    validate: function validate(value, requirementFirstArg) {\n      if (this.fn) {\n        // Legacy style validator\n\n        if (arguments.length > 3) // If more args then value, requirement, instance...\n          requirementFirstArg = [].slice.call(arguments, 1, -1); // Skip first arg (value) and last (instance), combining the rest\n        return this.fn(value, requirementFirstArg);\n      }\n\n      if (Array.isArray(value)) {\n        if (!this.validateMultiple) throw 'Validator `' + this.name + '` does not handle multiple values';\n        return this.validateMultiple.apply(this, arguments);\n      } else {\n        var instance = arguments[arguments.length - 1];\n        if (this.validateDate && instance._isDateInput()) {\n          arguments[0] = Utils.parse.date(arguments[0]);\n          if (arguments[0] === null) return false;\n          return this.validateDate.apply(this, arguments);\n        }\n        if (this.validateNumber) {\n          if (isNaN(value)) return false;\n          arguments[0] = parseFloat(arguments[0]);\n          return this.validateNumber.apply(this, arguments);\n        }\n        if (this.validateString) {\n          return this.validateString.apply(this, arguments);\n        }\n        throw 'Validator `' + this.name + '` only handles multiple values';\n      }\n    },\n\n    // Parses `requirements` into an array of arguments,\n    // according to `this.requirementType`\n    parseRequirements: function parseRequirements(requirements, extraOptionReader) {\n      if ('string' !== typeof requirements) {\n        // Assume requirement already parsed\n        // but make sure we return an array\n        return Array.isArray(requirements) ? requirements : [requirements];\n      }\n      var type = this.requirementType;\n      if (Array.isArray(type)) {\n        var values = convertArrayRequirement(requirements, type.length);\n        for (var i = 0; i < values.length; i++) values[i] = Utils.parseRequirement(type[i], values[i]);\n        return values;\n      } else if ($.isPlainObject(type)) {\n        return convertExtraOptionRequirement(type, requirements, extraOptionReader);\n      } else {\n        return [Utils.parseRequirement(type, requirements)];\n      }\n    },\n    // Defaults:\n    requirementType: 'string',\n\n    priority: 2\n\n  };\n\n  var ValidatorRegistry = function ValidatorRegistry(validators, catalog) {\n    this.__class__ = 'ValidatorRegistry';\n\n    // Default Parsley locale is en\n    this.locale = 'en';\n\n    this.init(validators || {}, catalog || {});\n  };\n\n  var typeTesters = {\n    email: /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i,\n\n    // Follow https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers\n    number: /^-?(\\d*\\.)?\\d+(e[-+]?\\d+)?$/i,\n\n    integer: /^-?\\d+$/,\n\n    digits: /^\\d+$/,\n\n    alphanum: /^\\w+$/i,\n\n    date: {\n      test: function test(value) {\n        return Utils.parse.date(value) !== null;\n      }\n    },\n\n    url: new RegExp(\"^\" +\n    // protocol identifier\n    \"(?:(?:https?|ftp)://)?\" + // ** mod: make scheme optional\n    // user:pass authentication\n    \"(?:\\\\S+(?::\\\\S*)?@)?\" + \"(?:\" +\n    // IP address exclusion\n    // private & local networks\n    // \"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" +   // ** mod: allow local networks\n    // \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" +  // ** mod: allow local networks\n    // \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\" +  // ** mod: allow local networks\n    // IP address dotted notation octets\n    // excludes loopback network 0.0.0.0\n    // excludes reserved space >= 224.0.0.0\n    // excludes network & broacast addresses\n    // (first & last IP address of each class)\n    \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" + \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" + \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" + \"|\" +\n    // host name\n    '(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)' +\n    // domain name\n    '(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*' +\n    // TLD identifier\n    '(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))' + \")\" +\n    // port number\n    \"(?::\\\\d{2,5})?\" +\n    // resource path\n    \"(?:/\\\\S*)?\" + \"$\", 'i')\n  };\n  typeTesters.range = typeTesters.number;\n\n  // See http://stackoverflow.com/a/10454560/8279\n  var decimalPlaces = function decimalPlaces(num) {\n    var match = ('' + num).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n    if (!match) {\n      return 0;\n    }\n    return Math.max(0,\n    // Number of digits right of decimal point.\n    (match[1] ? match[1].length : 0) - (\n    // Adjust for scientific notation.\n    match[2] ? +match[2] : 0));\n  };\n\n  // parseArguments('number', ['1', '2']) => [1, 2]\n  var ValidatorRegistry__parseArguments = function ValidatorRegistry__parseArguments(type, args) {\n    return args.map(Utils.parse[type]);\n  };\n  // operatorToValidator returns a validating function for an operator function, applied to the given type\n  var ValidatorRegistry__operatorToValidator = function ValidatorRegistry__operatorToValidator(type, operator) {\n    return function (value) {\n      for (var _len = arguments.length, requirementsAndInput = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        requirementsAndInput[_key - 1] = arguments[_key];\n      }\n\n      requirementsAndInput.pop(); // Get rid of `input` argument\n      return operator.apply(undefined, [value].concat(_toConsumableArray(ValidatorRegistry__parseArguments(type, requirementsAndInput))));\n    };\n  };\n\n  var ValidatorRegistry__comparisonOperator = function ValidatorRegistry__comparisonOperator(operator) {\n    return {\n      validateDate: ValidatorRegistry__operatorToValidator('date', operator),\n      validateNumber: ValidatorRegistry__operatorToValidator('number', operator),\n      requirementType: operator.length <= 2 ? 'string' : ['string', 'string'], // Support operators with a 1 or 2 requirement(s)\n      priority: 30\n    };\n  };\n\n  ValidatorRegistry.prototype = {\n    init: function init(validators, catalog) {\n      this.catalog = catalog;\n      // Copy prototype's validators:\n      this.validators = _extends({}, this.validators);\n\n      for (var name in validators) this.addValidator(name, validators[name].fn, validators[name].priority);\n\n      window.Parsley.trigger('parsley:validator:init');\n    },\n\n    // Set new messages locale if we have dictionary loaded in ParsleyConfig.i18n\n    setLocale: function setLocale(locale) {\n      if ('undefined' === typeof this.catalog[locale]) throw new Error(locale + ' is not available in the catalog');\n\n      this.locale = locale;\n\n      return this;\n    },\n\n    // Add a new messages catalog for a given locale. Set locale for this catalog if set === `true`\n    addCatalog: function addCatalog(locale, messages, set) {\n      if ('object' === typeof messages) this.catalog[locale] = messages;\n\n      if (true === set) return this.setLocale(locale);\n\n      return this;\n    },\n\n    // Add a specific message for a given constraint in a given locale\n    addMessage: function addMessage(locale, name, message) {\n      if ('undefined' === typeof this.catalog[locale]) this.catalog[locale] = {};\n\n      this.catalog[locale][name] = message;\n\n      return this;\n    },\n\n    // Add messages for a given locale\n    addMessages: function addMessages(locale, nameMessageObject) {\n      for (var name in nameMessageObject) this.addMessage(locale, name, nameMessageObject[name]);\n\n      return this;\n    },\n\n    // Add a new validator\n    //\n    //    addValidator('custom', {\n    //        requirementType: ['integer', 'integer'],\n    //        validateString: function(value, from, to) {},\n    //        priority: 22,\n    //        messages: {\n    //          en: \"Hey, that's no good\",\n    //          fr: \"Aye aye, pas bon du tout\",\n    //        }\n    //    })\n    //\n    // Old API was addValidator(name, function, priority)\n    //\n    addValidator: function addValidator(name, arg1, arg2) {\n      if (this.validators[name]) Utils.warn('Validator \"' + name + '\" is already defined.');else if (Defaults.hasOwnProperty(name)) {\n        Utils.warn('\"' + name + '\" is a restricted keyword and is not a valid validator name.');\n        return;\n      }\n      return this._setValidator.apply(this, arguments);\n    },\n\n    hasValidator: function hasValidator(name) {\n      return !!this.validators[name];\n    },\n\n    updateValidator: function updateValidator(name, arg1, arg2) {\n      if (!this.validators[name]) {\n        Utils.warn('Validator \"' + name + '\" is not already defined.');\n        return this.addValidator.apply(this, arguments);\n      }\n      return this._setValidator.apply(this, arguments);\n    },\n\n    removeValidator: function removeValidator(name) {\n      if (!this.validators[name]) Utils.warn('Validator \"' + name + '\" is not defined.');\n\n      delete this.validators[name];\n\n      return this;\n    },\n\n    _setValidator: function _setValidator(name, validator, priority) {\n      if ('object' !== typeof validator) {\n        // Old style validator, with `fn` and `priority`\n        validator = {\n          fn: validator,\n          priority: priority\n        };\n      }\n      if (!validator.validate) {\n        validator = new Validator(validator);\n      }\n      this.validators[name] = validator;\n\n      for (var locale in validator.messages || {}) this.addMessage(locale, name, validator.messages[locale]);\n\n      return this;\n    },\n\n    getErrorMessage: function getErrorMessage(constraint) {\n      var message;\n\n      // Type constraints are a bit different, we have to match their requirements too to find right error message\n      if ('type' === constraint.name) {\n        var typeMessages = this.catalog[this.locale][constraint.name] || {};\n        message = typeMessages[constraint.requirements];\n      } else message = this.formatMessage(this.catalog[this.locale][constraint.name], constraint.requirements);\n\n      return message || this.catalog[this.locale].defaultMessage || this.catalog.en.defaultMessage;\n    },\n\n    // Kind of light `sprintf()` implementation\n    formatMessage: function formatMessage(string, parameters) {\n      if ('object' === typeof parameters) {\n        for (var i in parameters) string = this.formatMessage(string, parameters[i]);\n\n        return string;\n      }\n\n      return 'string' === typeof string ? string.replace(/%s/i, parameters) : '';\n    },\n\n    // Here is the Parsley default validators list.\n    // A validator is an object with the following key values:\n    //  - priority: an integer\n    //  - requirement: 'string' (default), 'integer', 'number', 'regexp' or an Array of these\n    //  - validateString, validateMultiple, validateNumber: functions returning `true`, `false` or a promise\n    // Alternatively, a validator can be a function that returns such an object\n    //\n    validators: {\n      notblank: {\n        validateString: function validateString(value) {\n          return (/\\S/.test(value)\n          );\n        },\n        priority: 2\n      },\n      required: {\n        validateMultiple: function validateMultiple(values) {\n          return values.length > 0;\n        },\n        validateString: function validateString(value) {\n          return (/\\S/.test(value)\n          );\n        },\n        priority: 512\n      },\n      type: {\n        validateString: function validateString(value, type) {\n          var _ref = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];\n\n          var _ref$step = _ref.step;\n          var step = _ref$step === undefined ? 'any' : _ref$step;\n          var _ref$base = _ref.base;\n          var base = _ref$base === undefined ? 0 : _ref$base;\n\n          var tester = typeTesters[type];\n          if (!tester) {\n            throw new Error('validator type `' + type + '` is not supported');\n          }\n          if (!tester.test(value)) return false;\n          if ('number' === type) {\n            if (!/^any$/i.test(step || '')) {\n              var nb = Number(value);\n              var decimals = Math.max(decimalPlaces(step), decimalPlaces(base));\n              if (decimalPlaces(nb) > decimals) // Value can't have too many decimals\n                return false;\n              // Be careful of rounding errors by using integers.\n              var toInt = function toInt(f) {\n                return Math.round(f * Math.pow(10, decimals));\n              };\n              if ((toInt(nb) - toInt(base)) % toInt(step) != 0) return false;\n            }\n          }\n          return true;\n        },\n        requirementType: {\n          '': 'string',\n          step: 'string',\n          base: 'number'\n        },\n        priority: 256\n      },\n      pattern: {\n        validateString: function validateString(value, regexp) {\n          return regexp.test(value);\n        },\n        requirementType: 'regexp',\n        priority: 64\n      },\n      minlength: {\n        validateString: function validateString(value, requirement) {\n          return value.length >= requirement;\n        },\n        requirementType: 'integer',\n        priority: 30\n      },\n      maxlength: {\n        validateString: function validateString(value, requirement) {\n          return value.length <= requirement;\n        },\n        requirementType: 'integer',\n        priority: 30\n      },\n      length: {\n        validateString: function validateString(value, min, max) {\n          return value.length >= min && value.length <= max;\n        },\n        requirementType: ['integer', 'integer'],\n        priority: 30\n      },\n      mincheck: {\n        validateMultiple: function validateMultiple(values, requirement) {\n          return values.length >= requirement;\n        },\n        requirementType: 'integer',\n        priority: 30\n      },\n      maxcheck: {\n        validateMultiple: function validateMultiple(values, requirement) {\n          return values.length <= requirement;\n        },\n        requirementType: 'integer',\n        priority: 30\n      },\n      check: {\n        validateMultiple: function validateMultiple(values, min, max) {\n          return values.length >= min && values.length <= max;\n        },\n        requirementType: ['integer', 'integer'],\n        priority: 30\n      },\n      min: ValidatorRegistry__comparisonOperator(function (value, requirement) {\n        return value >= requirement;\n      }),\n      max: ValidatorRegistry__comparisonOperator(function (value, requirement) {\n        return value <= requirement;\n      }),\n      range: ValidatorRegistry__comparisonOperator(function (value, min, max) {\n        return value >= min && value <= max;\n      }),\n      equalto: {\n        validateString: function validateString(value, refOrValue) {\n          var $reference = $(refOrValue);\n          if ($reference.length) return value === $reference.val();else return value === refOrValue;\n        },\n        priority: 256\n      }\n    }\n  };\n\n  var UI = {};\n\n  var diffResults = function diffResults(newResult, oldResult, deep) {\n    var added = [];\n    var kept = [];\n\n    for (var i = 0; i < newResult.length; i++) {\n      var found = false;\n\n      for (var j = 0; j < oldResult.length; j++) if (newResult[i].assert.name === oldResult[j].assert.name) {\n        found = true;\n        break;\n      }\n\n      if (found) kept.push(newResult[i]);else added.push(newResult[i]);\n    }\n\n    return {\n      kept: kept,\n      added: added,\n      removed: !deep ? diffResults(oldResult, newResult, true).added : []\n    };\n  };\n\n  UI.Form = {\n\n    _actualizeTriggers: function _actualizeTriggers() {\n      var _this2 = this;\n\n      this.$element.on('submit.Parsley', function (evt) {\n        _this2.onSubmitValidate(evt);\n      });\n      this.$element.on('click.Parsley', Utils._SubmitSelector, function (evt) {\n        _this2.onSubmitButton(evt);\n      });\n\n      // UI could be disabled\n      if (false === this.options.uiEnabled) return;\n\n      this.element.setAttribute('novalidate', '');\n    },\n\n    focus: function focus() {\n      this._focusedField = null;\n\n      if (true === this.validationResult || 'none' === this.options.focus) return null;\n\n      for (var i = 0; i < this.fields.length; i++) {\n        var field = this.fields[i];\n        if (true !== field.validationResult && field.validationResult.length > 0 && 'undefined' === typeof field.options.noFocus) {\n          this._focusedField = field.$element;\n          if ('first' === this.options.focus) break;\n        }\n      }\n\n      if (null === this._focusedField) return null;\n\n      return this._focusedField.focus();\n    },\n\n    _destroyUI: function _destroyUI() {\n      // Reset all event listeners\n      this.$element.off('.Parsley');\n    }\n\n  };\n\n  UI.Field = {\n\n    _reflowUI: function _reflowUI() {\n      this._buildUI();\n\n      // If this field doesn't have an active UI don't bother doing something\n      if (!this._ui) return;\n\n      // Diff between two validation results\n      var diff = diffResults(this.validationResult, this._ui.lastValidationResult);\n\n      // Then store current validation result for next reflow\n      this._ui.lastValidationResult = this.validationResult;\n\n      // Handle valid / invalid / none field class\n      this._manageStatusClass();\n\n      // Add, remove, updated errors messages\n      this._manageErrorsMessages(diff);\n\n      // Triggers impl\n      this._actualizeTriggers();\n\n      // If field is not valid for the first time, bind keyup trigger to ease UX and quickly inform user\n      if ((diff.kept.length || diff.added.length) && !this._failedOnce) {\n        this._failedOnce = true;\n        this._actualizeTriggers();\n      }\n    },\n\n    // Returns an array of field's error message(s)\n    getErrorsMessages: function getErrorsMessages() {\n      // No error message, field is valid\n      if (true === this.validationResult) return [];\n\n      var messages = [];\n\n      for (var i = 0; i < this.validationResult.length; i++) messages.push(this.validationResult[i].errorMessage || this._getErrorMessage(this.validationResult[i].assert));\n\n      return messages;\n    },\n\n    // It's a goal of Parsley that this method is no longer required [#1073]\n    addError: function addError(name) {\n      var _ref2 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n      var message = _ref2.message;\n      var assert = _ref2.assert;\n      var _ref2$updateClass = _ref2.updateClass;\n      var updateClass = _ref2$updateClass === undefined ? true : _ref2$updateClass;\n\n      this._buildUI();\n      this._addError(name, { message: message, assert: assert });\n\n      if (updateClass) this._errorClass();\n    },\n\n    // It's a goal of Parsley that this method is no longer required [#1073]\n    updateError: function updateError(name) {\n      var _ref3 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n      var message = _ref3.message;\n      var assert = _ref3.assert;\n      var _ref3$updateClass = _ref3.updateClass;\n      var updateClass = _ref3$updateClass === undefined ? true : _ref3$updateClass;\n\n      this._buildUI();\n      this._updateError(name, { message: message, assert: assert });\n\n      if (updateClass) this._errorClass();\n    },\n\n    // It's a goal of Parsley that this method is no longer required [#1073]\n    removeError: function removeError(name) {\n      var _ref4 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n      var _ref4$updateClass = _ref4.updateClass;\n      var updateClass = _ref4$updateClass === undefined ? true : _ref4$updateClass;\n\n      this._buildUI();\n      this._removeError(name);\n\n      // edge case possible here: remove a standard Parsley error that is still failing in this.validationResult\n      // but highly improbable cuz' manually removing a well Parsley handled error makes no sense.\n      if (updateClass) this._manageStatusClass();\n    },\n\n    _manageStatusClass: function _manageStatusClass() {\n      if (this.hasConstraints() && this.needsValidation() && true === this.validationResult) this._successClass();else if (this.validationResult.length > 0) this._errorClass();else this._resetClass();\n    },\n\n    _manageErrorsMessages: function _manageErrorsMessages(diff) {\n      if ('undefined' !== typeof this.options.errorsMessagesDisabled) return;\n\n      // Case where we have errorMessage option that configure an unique field error message, regardless failing validators\n      if ('undefined' !== typeof this.options.errorMessage) {\n        if (diff.added.length || diff.kept.length) {\n          this._insertErrorWrapper();\n\n          if (0 === this._ui.$errorsWrapper.find('.parsley-custom-error-message').length) this._ui.$errorsWrapper.append($(this.options.errorTemplate).addClass('parsley-custom-error-message'));\n\n          return this._ui.$errorsWrapper.addClass('filled').find('.parsley-custom-error-message').html(this.options.errorMessage);\n        }\n\n        return this._ui.$errorsWrapper.removeClass('filled').find('.parsley-custom-error-message').remove();\n      }\n\n      // Show, hide, update failing constraints messages\n      for (var i = 0; i < diff.removed.length; i++) this._removeError(diff.removed[i].assert.name);\n\n      for (i = 0; i < diff.added.length; i++) this._addError(diff.added[i].assert.name, { message: diff.added[i].errorMessage, assert: diff.added[i].assert });\n\n      for (i = 0; i < diff.kept.length; i++) this._updateError(diff.kept[i].assert.name, { message: diff.kept[i].errorMessage, assert: diff.kept[i].assert });\n    },\n\n    _addError: function _addError(name, _ref5) {\n      var message = _ref5.message;\n      var assert = _ref5.assert;\n\n      this._insertErrorWrapper();\n      this._ui.$errorsWrapper.addClass('filled').append($(this.options.errorTemplate).addClass('parsley-' + name).html(message || this._getErrorMessage(assert)));\n    },\n\n    _updateError: function _updateError(name, _ref6) {\n      var message = _ref6.message;\n      var assert = _ref6.assert;\n\n      this._ui.$errorsWrapper.addClass('filled').find('.parsley-' + name).html(message || this._getErrorMessage(assert));\n    },\n\n    _removeError: function _removeError(name) {\n      this._ui.$errorsWrapper.removeClass('filled').find('.parsley-' + name).remove();\n    },\n\n    _getErrorMessage: function _getErrorMessage(constraint) {\n      var customConstraintErrorMessage = constraint.name + 'Message';\n\n      if ('undefined' !== typeof this.options[customConstraintErrorMessage]) return window.Parsley.formatMessage(this.options[customConstraintErrorMessage], constraint.requirements);\n\n      return window.Parsley.getErrorMessage(constraint);\n    },\n\n    _buildUI: function _buildUI() {\n      // UI could be already built or disabled\n      if (this._ui || false === this.options.uiEnabled) return;\n\n      var _ui = {};\n\n      // Give field its Parsley id in DOM\n      this.element.setAttribute(this.options.namespace + 'id', this.__id__);\n\n      /** Generate important UI elements and store them in this **/\n      // $errorClassHandler is the $element that woul have parsley-error and parsley-success classes\n      _ui.$errorClassHandler = this._manageClassHandler();\n\n      // $errorsWrapper is a div that would contain the various field errors, it will be appended into $errorsContainer\n      _ui.errorsWrapperId = 'parsley-id-' + (this.options.multiple ? 'multiple-' + this.options.multiple : this.__id__);\n      _ui.$errorsWrapper = $(this.options.errorsWrapper).attr('id', _ui.errorsWrapperId);\n\n      // ValidationResult UI storage to detect what have changed bwt two validations, and update DOM accordingly\n      _ui.lastValidationResult = [];\n      _ui.validationInformationVisible = false;\n\n      // Store it in this for later\n      this._ui = _ui;\n    },\n\n    // Determine which element will have `parsley-error` and `parsley-success` classes\n    _manageClassHandler: function _manageClassHandler() {\n      // Class handled could also be determined by function given in Parsley options\n      if ('string' === typeof this.options.classHandler && $(this.options.classHandler).length) return $(this.options.classHandler);\n\n      // Class handled could also be determined by function given in Parsley options\n      var $handlerFunction = this.options.classHandler;\n\n      // It might also be the function name of a global function\n      if ('string' === typeof this.options.classHandler && 'function' === typeof window[this.options.classHandler]) $handlerFunction = window[this.options.classHandler];\n\n      if ('function' === typeof $handlerFunction) {\n        var $handler = $handlerFunction.call(this, this);\n\n        // If this function returned a valid existing DOM element, go for it\n        if ('undefined' !== typeof $handler && $handler.length) return $handler;\n      } else if ('object' === typeof $handlerFunction && $handlerFunction instanceof jQuery && $handlerFunction.length) {\n        return $handlerFunction;\n      } else if ($handlerFunction) {\n        Utils.warn('The class handler `' + $handlerFunction + '` does not exist in DOM nor as a global JS function');\n      }\n\n      return this._inputHolder();\n    },\n\n    _inputHolder: function _inputHolder() {\n      // if simple element (input, texatrea, select...) it will perfectly host the classes and precede the error container\n      if (!this.options.multiple || this.element.nodeName === 'SELECT') return this.$element;\n\n      // But if multiple element (radio, checkbox), that would be their parent\n      return this.$element.parent();\n    },\n\n    _insertErrorWrapper: function _insertErrorWrapper() {\n      var $errorsContainer = this.options.errorsContainer;\n\n      // Nothing to do if already inserted\n      if (0 !== this._ui.$errorsWrapper.parent().length) return this._ui.$errorsWrapper.parent();\n\n      if ('string' === typeof $errorsContainer) {\n        if ($($errorsContainer).length) return $($errorsContainer).append(this._ui.$errorsWrapper);else if ('function' === typeof window[$errorsContainer]) $errorsContainer = window[$errorsContainer];else Utils.warn('The errors container `' + $errorsContainer + '` does not exist in DOM nor as a global JS function');\n      }\n\n      if ('function' === typeof $errorsContainer) $errorsContainer = $errorsContainer.call(this, this);\n\n      if ('object' === typeof $errorsContainer && $errorsContainer.length) return $errorsContainer.append(this._ui.$errorsWrapper);\n\n      return this._inputHolder().after(this._ui.$errorsWrapper);\n    },\n\n    _actualizeTriggers: function _actualizeTriggers() {\n      var _this3 = this;\n\n      var $toBind = this._findRelated();\n      var trigger;\n\n      // Remove Parsley events already bound on this field\n      $toBind.off('.Parsley');\n      if (this._failedOnce) $toBind.on(Utils.namespaceEvents(this.options.triggerAfterFailure, 'Parsley'), function () {\n        _this3._validateIfNeeded();\n      });else if (trigger = Utils.namespaceEvents(this.options.trigger, 'Parsley')) {\n        $toBind.on(trigger, function (event) {\n          _this3._validateIfNeeded(event);\n        });\n      }\n    },\n\n    _validateIfNeeded: function _validateIfNeeded(event) {\n      var _this4 = this;\n\n      // For keyup, keypress, keydown, input... events that could be a little bit obstrusive\n      // do not validate if val length < min threshold on first validation. Once field have been validated once and info\n      // about success or failure have been displayed, always validate with this trigger to reflect every yalidation change.\n      if (event && /key|input/.test(event.type)) if (!(this._ui && this._ui.validationInformationVisible) && this.getValue().length <= this.options.validationThreshold) return;\n\n      if (this.options.debounce) {\n        window.clearTimeout(this._debounced);\n        this._debounced = window.setTimeout(function () {\n          return _this4.validate();\n        }, this.options.debounce);\n      } else this.validate();\n    },\n\n    _resetUI: function _resetUI() {\n      // Reset all event listeners\n      this._failedOnce = false;\n      this._actualizeTriggers();\n\n      // Nothing to do if UI never initialized for this field\n      if ('undefined' === typeof this._ui) return;\n\n      // Reset all errors' li\n      this._ui.$errorsWrapper.removeClass('filled').children().remove();\n\n      // Reset validation class\n      this._resetClass();\n\n      // Reset validation flags and last validation result\n      this._ui.lastValidationResult = [];\n      this._ui.validationInformationVisible = false;\n    },\n\n    _destroyUI: function _destroyUI() {\n      this._resetUI();\n\n      if ('undefined' !== typeof this._ui) this._ui.$errorsWrapper.remove();\n\n      delete this._ui;\n    },\n\n    _successClass: function _successClass() {\n      this._ui.validationInformationVisible = true;\n      this._ui.$errorClassHandler.removeClass(this.options.errorClass).addClass(this.options.successClass);\n    },\n    _errorClass: function _errorClass() {\n      this._ui.validationInformationVisible = true;\n      this._ui.$errorClassHandler.removeClass(this.options.successClass).addClass(this.options.errorClass);\n    },\n    _resetClass: function _resetClass() {\n      this._ui.$errorClassHandler.removeClass(this.options.successClass).removeClass(this.options.errorClass);\n    }\n  };\n\n  var Form = function Form(element, domOptions, options) {\n    this.__class__ = 'Form';\n\n    this.element = element;\n    this.$element = $(element);\n    this.domOptions = domOptions;\n    this.options = options;\n    this.parent = window.Parsley;\n\n    this.fields = [];\n    this.validationResult = null;\n  };\n\n  var Form__statusMapping = { pending: null, resolved: true, rejected: false };\n\n  Form.prototype = {\n    onSubmitValidate: function onSubmitValidate(event) {\n      var _this5 = this;\n\n      // This is a Parsley generated submit event, do not validate, do not prevent, simply exit and keep normal behavior\n      if (true === event.parsley) return;\n\n      // If we didn't come here through a submit button, use the first one in the form\n      var submitSource = this._submitSource || this.$element.find(Utils._SubmitSelector)[0];\n      this._submitSource = null;\n      this.$element.find('.parsley-synthetic-submit-button').prop('disabled', true);\n      if (submitSource && null !== submitSource.getAttribute('formnovalidate')) return;\n\n      window.Parsley._remoteCache = {};\n\n      var promise = this.whenValidate({ event: event });\n\n      if ('resolved' === promise.state() && false !== this._trigger('submit')) {\n        // All good, let event go through. We make this distinction because browsers\n        // differ in their handling of `submit` being called from inside a submit event [#1047]\n      } else {\n          // Rejected or pending: cancel this submit\n          event.stopImmediatePropagation();\n          event.preventDefault();\n          if ('pending' === promise.state()) promise.done(function () {\n            _this5._submit(submitSource);\n          });\n        }\n    },\n\n    onSubmitButton: function onSubmitButton(event) {\n      this._submitSource = event.currentTarget;\n    },\n    // internal\n    // _submit submits the form, this time without going through the validations.\n    // Care must be taken to \"fake\" the actual submit button being clicked.\n    _submit: function _submit(submitSource) {\n      if (false === this._trigger('submit')) return;\n      // Add submit button's data\n      if (submitSource) {\n        var $synthetic = this.$element.find('.parsley-synthetic-submit-button').prop('disabled', false);\n        if (0 === $synthetic.length) $synthetic = $('<input class=\"parsley-synthetic-submit-button\" type=\"hidden\">').appendTo(this.$element);\n        $synthetic.attr({\n          name: submitSource.getAttribute('name'),\n          value: submitSource.getAttribute('value')\n        });\n      }\n\n      this.$element.trigger(_extends($.Event('submit'), { parsley: true }));\n    },\n\n    // Performs validation on fields while triggering events.\n    // @returns `true` if all validations succeeds, `false`\n    // if a failure is immediately detected, or `null`\n    // if dependant on a promise.\n    // Consider using `whenValidate` instead.\n    validate: function validate(options) {\n      if (arguments.length >= 1 && !$.isPlainObject(options)) {\n        Utils.warnOnce('Calling validate on a parsley form without passing arguments as an object is deprecated.');\n\n        var _arguments = _slice.call(arguments);\n\n        var group = _arguments[0];\n        var force = _arguments[1];\n        var event = _arguments[2];\n\n        options = { group: group, force: force, event: event };\n      }\n      return Form__statusMapping[this.whenValidate(options).state()];\n    },\n\n    whenValidate: function whenValidate() {\n      var _Utils$all$done$fail$always,\n          _this6 = this;\n\n      var _ref7 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var group = _ref7.group;\n      var force = _ref7.force;\n      var event = _ref7.event;\n\n      this.submitEvent = event;\n      if (event) {\n        this.submitEvent = _extends({}, event, { preventDefault: function preventDefault() {\n            Utils.warnOnce(\"Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`\");\n            _this6.validationResult = false;\n          } });\n      }\n      this.validationResult = true;\n\n      // fire validate event to eventually modify things before every validation\n      this._trigger('validate');\n\n      // Refresh form DOM options and form's fields that could have changed\n      this._refreshFields();\n\n      var promises = this._withoutReactualizingFormOptions(function () {\n        return $.map(_this6.fields, function (field) {\n          return field.whenValidate({ force: force, group: group });\n        });\n      });\n\n      return (_Utils$all$done$fail$always = Utils.all(promises).done(function () {\n        _this6._trigger('success');\n      }).fail(function () {\n        _this6.validationResult = false;\n        _this6.focus();\n        _this6._trigger('error');\n      }).always(function () {\n        _this6._trigger('validated');\n      })).pipe.apply(_Utils$all$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult()));\n    },\n\n    // Iterate over refreshed fields, and stop on first failure.\n    // Returns `true` if all fields are valid, `false` if a failure is detected\n    // or `null` if the result depends on an unresolved promise.\n    // Prefer using `whenValid` instead.\n    isValid: function isValid(options) {\n      if (arguments.length >= 1 && !$.isPlainObject(options)) {\n        Utils.warnOnce('Calling isValid on a parsley form without passing arguments as an object is deprecated.');\n\n        var _arguments2 = _slice.call(arguments);\n\n        var group = _arguments2[0];\n        var force = _arguments2[1];\n\n        options = { group: group, force: force };\n      }\n      return Form__statusMapping[this.whenValid(options).state()];\n    },\n\n    // Iterate over refreshed fields and validate them.\n    // Returns a promise.\n    // A validation that immediately fails will interrupt the validations.\n    whenValid: function whenValid() {\n      var _this7 = this;\n\n      var _ref8 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var group = _ref8.group;\n      var force = _ref8.force;\n\n      this._refreshFields();\n\n      var promises = this._withoutReactualizingFormOptions(function () {\n        return $.map(_this7.fields, function (field) {\n          return field.whenValid({ group: group, force: force });\n        });\n      });\n      return Utils.all(promises);\n    },\n\n    refresh: function refresh() {\n      this._refreshFields();\n      return this;\n    },\n\n    // Reset UI\n    reset: function reset() {\n      // Form case: emit a reset event for each field\n      for (var i = 0; i < this.fields.length; i++) this.fields[i].reset();\n\n      this._trigger('reset');\n    },\n\n    // Destroy Parsley instance (+ UI)\n    destroy: function destroy() {\n      // Field case: emit destroy event to clean UI and then destroy stored instance\n      this._destroyUI();\n\n      // Form case: destroy all its fields and then destroy stored instance\n      for (var i = 0; i < this.fields.length; i++) this.fields[i].destroy();\n\n      this.$element.removeData('Parsley');\n      this._trigger('destroy');\n    },\n\n    _refreshFields: function _refreshFields() {\n      return this.actualizeOptions()._bindFields();\n    },\n\n    _bindFields: function _bindFields() {\n      var _this8 = this;\n\n      var oldFields = this.fields;\n\n      this.fields = [];\n      this.fieldsMappedById = {};\n\n      this._withoutReactualizingFormOptions(function () {\n        _this8.$element.find(_this8.options.inputs).not(_this8.options.excluded).each(function (_, element) {\n          var fieldInstance = new window.Parsley.Factory(element, {}, _this8);\n\n          // Only add valid and not excluded `Field` and `FieldMultiple` children\n          if (('Field' === fieldInstance.__class__ || 'FieldMultiple' === fieldInstance.__class__) && true !== fieldInstance.options.excluded) {\n            var uniqueId = fieldInstance.__class__ + '-' + fieldInstance.__id__;\n            if ('undefined' === typeof _this8.fieldsMappedById[uniqueId]) {\n              _this8.fieldsMappedById[uniqueId] = fieldInstance;\n              _this8.fields.push(fieldInstance);\n            }\n          }\n        });\n\n        $.each(Utils.difference(oldFields, _this8.fields), function (_, field) {\n          field.reset();\n        });\n      });\n      return this;\n    },\n\n    // Internal only.\n    // Looping on a form's fields to do validation or similar\n    // will trigger reactualizing options on all of them, which\n    // in turn will reactualize the form's options.\n    // To avoid calling actualizeOptions so many times on the form\n    // for nothing, _withoutReactualizingFormOptions temporarily disables\n    // the method actualizeOptions on this form while `fn` is called.\n    _withoutReactualizingFormOptions: function _withoutReactualizingFormOptions(fn) {\n      var oldActualizeOptions = this.actualizeOptions;\n      this.actualizeOptions = function () {\n        return this;\n      };\n      var result = fn();\n      this.actualizeOptions = oldActualizeOptions;\n      return result;\n    },\n\n    // Internal only.\n    // Shortcut to trigger an event\n    // Returns true iff event is not interrupted and default not prevented.\n    _trigger: function _trigger(eventName) {\n      return this.trigger('form:' + eventName);\n    }\n\n  };\n\n  var Constraint = function Constraint(parsleyField, name, requirements, priority, isDomConstraint) {\n    var validatorSpec = window.Parsley._validatorRegistry.validators[name];\n    var validator = new Validator(validatorSpec);\n    priority = priority || parsleyField.options[name + 'Priority'] || validator.priority;\n    isDomConstraint = true === isDomConstraint;\n\n    _extends(this, {\n      validator: validator,\n      name: name,\n      requirements: requirements,\n      priority: priority,\n      isDomConstraint: isDomConstraint\n    });\n    this._parseRequirements(parsleyField.options);\n  };\n\n  var capitalize = function capitalize(str) {\n    var cap = str[0].toUpperCase();\n    return cap + str.slice(1);\n  };\n\n  Constraint.prototype = {\n    validate: function validate(value, instance) {\n      var _validator;\n\n      return (_validator = this.validator).validate.apply(_validator, [value].concat(_toConsumableArray(this.requirementList), [instance]));\n    },\n\n    _parseRequirements: function _parseRequirements(options) {\n      var _this9 = this;\n\n      this.requirementList = this.validator.parseRequirements(this.requirements, function (key) {\n        return options[_this9.name + capitalize(key)];\n      });\n    }\n  };\n\n  var Field = function Field(field, domOptions, options, parsleyFormInstance) {\n    this.__class__ = 'Field';\n\n    this.element = field;\n    this.$element = $(field);\n\n    // Set parent if we have one\n    if ('undefined' !== typeof parsleyFormInstance) {\n      this.parent = parsleyFormInstance;\n    }\n\n    this.options = options;\n    this.domOptions = domOptions;\n\n    // Initialize some properties\n    this.constraints = [];\n    this.constraintsByName = {};\n    this.validationResult = true;\n\n    // Bind constraints\n    this._bindConstraints();\n  };\n\n  var parsley_field__statusMapping = { pending: null, resolved: true, rejected: false };\n\n  Field.prototype = {\n    // # Public API\n    // Validate field and trigger some events for mainly `UI`\n    // @returns `true`, an array of the validators that failed, or\n    // `null` if validation is not finished. Prefer using whenValidate\n    validate: function validate(options) {\n      if (arguments.length >= 1 && !$.isPlainObject(options)) {\n        Utils.warnOnce('Calling validate on a parsley field without passing arguments as an object is deprecated.');\n        options = { options: options };\n      }\n      var promise = this.whenValidate(options);\n      if (!promise) // If excluded with `group` option\n        return true;\n      switch (promise.state()) {\n        case 'pending':\n          return null;\n        case 'resolved':\n          return true;\n        case 'rejected':\n          return this.validationResult;\n      }\n    },\n\n    // Validate field and trigger some events for mainly `UI`\n    // @returns a promise that succeeds only when all validations do\n    // or `undefined` if field is not in the given `group`.\n    whenValidate: function whenValidate() {\n      var _whenValid$always$done$fail$always,\n          _this10 = this;\n\n      var _ref9 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var force = _ref9.force;\n      var group = _ref9.group;\n\n      // do not validate a field if not the same as given validation group\n      this.refresh();\n      if (group && !this._isInGroup(group)) return;\n\n      this.value = this.getValue();\n\n      // Field Validate event. `this.value` could be altered for custom needs\n      this._trigger('validate');\n\n      return (_whenValid$always$done$fail$always = this.whenValid({ force: force, value: this.value, _refreshed: true }).always(function () {\n        _this10._reflowUI();\n      }).done(function () {\n        _this10._trigger('success');\n      }).fail(function () {\n        _this10._trigger('error');\n      }).always(function () {\n        _this10._trigger('validated');\n      })).pipe.apply(_whenValid$always$done$fail$always, _toConsumableArray(this._pipeAccordingToValidationResult()));\n    },\n\n    hasConstraints: function hasConstraints() {\n      return 0 !== this.constraints.length;\n    },\n\n    // An empty optional field does not need validation\n    needsValidation: function needsValidation(value) {\n      if ('undefined' === typeof value) value = this.getValue();\n\n      // If a field is empty and not required, it is valid\n      // Except if `data-parsley-validate-if-empty` explicitely added, useful for some custom validators\n      if (!value.length && !this._isRequired() && 'undefined' === typeof this.options.validateIfEmpty) return false;\n\n      return true;\n    },\n\n    _isInGroup: function _isInGroup(group) {\n      if (Array.isArray(this.options.group)) return -1 !== $.inArray(group, this.options.group);\n      return this.options.group === group;\n    },\n\n    // Just validate field. Do not trigger any event.\n    // Returns `true` iff all constraints pass, `false` if there are failures,\n    // or `null` if the result can not be determined yet (depends on a promise)\n    // See also `whenValid`.\n    isValid: function isValid(options) {\n      if (arguments.length >= 1 && !$.isPlainObject(options)) {\n        Utils.warnOnce('Calling isValid on a parsley field without passing arguments as an object is deprecated.');\n\n        var _arguments3 = _slice.call(arguments);\n\n        var force = _arguments3[0];\n        var value = _arguments3[1];\n\n        options = { force: force, value: value };\n      }\n      var promise = this.whenValid(options);\n      if (!promise) // Excluded via `group`\n        return true;\n      return parsley_field__statusMapping[promise.state()];\n    },\n\n    // Just validate field. Do not trigger any event.\n    // @returns a promise that succeeds only when all validations do\n    // or `undefined` if the field is not in the given `group`.\n    // The argument `force` will force validation of empty fields.\n    // If a `value` is given, it will be validated instead of the value of the input.\n    whenValid: function whenValid() {\n      var _this11 = this;\n\n      var _ref10 = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n      var _ref10$force = _ref10.force;\n      var force = _ref10$force === undefined ? false : _ref10$force;\n      var value = _ref10.value;\n      var group = _ref10.group;\n      var _refreshed = _ref10._refreshed;\n\n      // Recompute options and rebind constraints to have latest changes\n      if (!_refreshed) this.refresh();\n      // do not validate a field if not the same as given validation group\n      if (group && !this._isInGroup(group)) return;\n\n      this.validationResult = true;\n\n      // A field without constraint is valid\n      if (!this.hasConstraints()) return $.when();\n\n      // Value could be passed as argument, needed to add more power to 'field:validate'\n      if ('undefined' === typeof value || null === value) value = this.getValue();\n\n      if (!this.needsValidation(value) && true !== force) return $.when();\n\n      var groupedConstraints = this._getGroupedConstraints();\n      var promises = [];\n      $.each(groupedConstraints, function (_, constraints) {\n        // Process one group of constraints at a time, we validate the constraints\n        // and combine the promises together.\n        var promise = Utils.all($.map(constraints, function (constraint) {\n          return _this11._validateConstraint(value, constraint);\n        }));\n        promises.push(promise);\n        if (promise.state() === 'rejected') return false; // Interrupt processing if a group has already failed\n      });\n      return Utils.all(promises);\n    },\n\n    // @returns a promise\n    _validateConstraint: function _validateConstraint(value, constraint) {\n      var _this12 = this;\n\n      var result = constraint.validate(value, this);\n      // Map false to a failed promise\n      if (false === result) result = $.Deferred().reject();\n      // Make sure we return a promise and that we record failures\n      return Utils.all([result]).fail(function (errorMessage) {\n        if (!(_this12.validationResult instanceof Array)) _this12.validationResult = [];\n        _this12.validationResult.push({\n          assert: constraint,\n          errorMessage: 'string' === typeof errorMessage && errorMessage\n        });\n      });\n    },\n\n    // @returns Parsley field computed value that could be overrided or configured in DOM\n    getValue: function getValue() {\n      var value;\n\n      // Value could be overriden in DOM or with explicit options\n      if ('function' === typeof this.options.value) value = this.options.value(this);else if ('undefined' !== typeof this.options.value) value = this.options.value;else value = this.$element.val();\n\n      // Handle wrong DOM or configurations\n      if ('undefined' === typeof value || null === value) return '';\n\n      return this._handleWhitespace(value);\n    },\n\n    // Reset UI\n    reset: function reset() {\n      this._resetUI();\n      return this._trigger('reset');\n    },\n\n    // Destroy Parsley instance (+ UI)\n    destroy: function destroy() {\n      // Field case: emit destroy event to clean UI and then destroy stored instance\n      this._destroyUI();\n      this.$element.removeData('Parsley');\n      this.$element.removeData('FieldMultiple');\n      this._trigger('destroy');\n    },\n\n    // Actualize options and rebind constraints\n    refresh: function refresh() {\n      this._refreshConstraints();\n      return this;\n    },\n\n    _refreshConstraints: function _refreshConstraints() {\n      return this.actualizeOptions()._bindConstraints();\n    },\n\n    refreshConstraints: function refreshConstraints() {\n      Utils.warnOnce(\"Parsley's refreshConstraints is deprecated. Please use refresh\");\n      return this.refresh();\n    },\n\n    /**\n    * Add a new constraint to a field\n    *\n    * @param {String}   name\n    * @param {Mixed}    requirements      optional\n    * @param {Number}   priority          optional\n    * @param {Boolean}  isDomConstraint   optional\n    */\n    addConstraint: function addConstraint(name, requirements, priority, isDomConstraint) {\n\n      if (window.Parsley._validatorRegistry.validators[name]) {\n        var constraint = new Constraint(this, name, requirements, priority, isDomConstraint);\n\n        // if constraint already exist, delete it and push new version\n        if ('undefined' !== this.constraintsByName[constraint.name]) this.removeConstraint(constraint.name);\n\n        this.constraints.push(constraint);\n        this.constraintsByName[constraint.name] = constraint;\n      }\n\n      return this;\n    },\n\n    // Remove a constraint\n    removeConstraint: function removeConstraint(name) {\n      for (var i = 0; i < this.constraints.length; i++) if (name === this.constraints[i].name) {\n        this.constraints.splice(i, 1);\n        break;\n      }\n      delete this.constraintsByName[name];\n      return this;\n    },\n\n    // Update a constraint (Remove + re-add)\n    updateConstraint: function updateConstraint(name, parameters, priority) {\n      return this.removeConstraint(name).addConstraint(name, parameters, priority);\n    },\n\n    // # Internals\n\n    // Internal only.\n    // Bind constraints from config + options + DOM\n    _bindConstraints: function _bindConstraints() {\n      var constraints = [];\n      var constraintsByName = {};\n\n      // clean all existing DOM constraints to only keep javascript user constraints\n      for (var i = 0; i < this.constraints.length; i++) if (false === this.constraints[i].isDomConstraint) {\n        constraints.push(this.constraints[i]);\n        constraintsByName[this.constraints[i].name] = this.constraints[i];\n      }\n\n      this.constraints = constraints;\n      this.constraintsByName = constraintsByName;\n\n      // then re-add Parsley DOM-API constraints\n      for (var name in this.options) this.addConstraint(name, this.options[name], undefined, true);\n\n      // finally, bind special HTML5 constraints\n      return this._bindHtml5Constraints();\n    },\n\n    // Internal only.\n    // Bind specific HTML5 constraints to be HTML5 compliant\n    _bindHtml5Constraints: function _bindHtml5Constraints() {\n      // html5 required\n      if (null !== this.element.getAttribute('required')) this.addConstraint('required', true, undefined, true);\n\n      // html5 pattern\n      if (null !== this.element.getAttribute('pattern')) this.addConstraint('pattern', this.element.getAttribute('pattern'), undefined, true);\n\n      // range\n      var min = this.element.getAttribute('min');\n      var max = this.element.getAttribute('max');\n      if (null !== min && null !== max) this.addConstraint('range', [min, max], undefined, true);\n\n      // HTML5 min\n      else if (null !== min) this.addConstraint('min', min, undefined, true);\n\n        // HTML5 max\n        else if (null !== max) this.addConstraint('max', max, undefined, true);\n\n      // length\n      if (null !== this.element.getAttribute('minlength') && null !== this.element.getAttribute('maxlength')) this.addConstraint('length', [this.element.getAttribute('minlength'), this.element.getAttribute('maxlength')], undefined, true);\n\n      // HTML5 minlength\n      else if (null !== this.element.getAttribute('minlength')) this.addConstraint('minlength', this.element.getAttribute('minlength'), undefined, true);\n\n        // HTML5 maxlength\n        else if (null !== this.element.getAttribute('maxlength')) this.addConstraint('maxlength', this.element.getAttribute('maxlength'), undefined, true);\n\n      // html5 types\n      var type = Utils.getType(this.element);\n\n      // Small special case here for HTML5 number: integer validator if step attribute is undefined or an integer value, number otherwise\n      if ('number' === type) {\n        return this.addConstraint('type', ['number', {\n          step: this.element.getAttribute('step') || '1',\n          base: min || this.element.getAttribute('value')\n        }], undefined, true);\n        // Regular other HTML5 supported types\n      } else if (/^(email|url|range|date)$/i.test(type)) {\n          return this.addConstraint('type', type, undefined, true);\n        }\n      return this;\n    },\n\n    // Internal only.\n    // Field is required if have required constraint without `false` value\n    _isRequired: function _isRequired() {\n      if ('undefined' === typeof this.constraintsByName.required) return false;\n\n      return false !== this.constraintsByName.required.requirements;\n    },\n\n    // Internal only.\n    // Shortcut to trigger an event\n    _trigger: function _trigger(eventName) {\n      return this.trigger('field:' + eventName);\n    },\n\n    // Internal only\n    // Handles whitespace in a value\n    // Use `data-parsley-whitespace=\"squish\"` to auto squish input value\n    // Use `data-parsley-whitespace=\"trim\"` to auto trim input value\n    _handleWhitespace: function _handleWhitespace(value) {\n      if (true === this.options.trimValue) Utils.warnOnce('data-parsley-trim-value=\"true\" is deprecated, please use data-parsley-whitespace=\"trim\"');\n\n      if ('squish' === this.options.whitespace) value = value.replace(/\\s{2,}/g, ' ');\n\n      if ('trim' === this.options.whitespace || 'squish' === this.options.whitespace || true === this.options.trimValue) value = Utils.trimString(value);\n\n      return value;\n    },\n\n    _isDateInput: function _isDateInput() {\n      var c = this.constraintsByName.type;\n      return c && c.requirements === 'date';\n    },\n\n    // Internal only.\n    // Returns the constraints, grouped by descending priority.\n    // The result is thus an array of arrays of constraints.\n    _getGroupedConstraints: function _getGroupedConstraints() {\n      if (false === this.options.priorityEnabled) return [this.constraints];\n\n      var groupedConstraints = [];\n      var index = {};\n\n      // Create array unique of priorities\n      for (var i = 0; i < this.constraints.length; i++) {\n        var p = this.constraints[i].priority;\n        if (!index[p]) groupedConstraints.push(index[p] = []);\n        index[p].push(this.constraints[i]);\n      }\n      // Sort them by priority DESC\n      groupedConstraints.sort(function (a, b) {\n        return b[0].priority - a[0].priority;\n      });\n\n      return groupedConstraints;\n    }\n\n  };\n\n  var parsley_field = Field;\n\n  var Multiple = function Multiple() {\n    this.__class__ = 'FieldMultiple';\n  };\n\n  Multiple.prototype = {\n    // Add new `$element` sibling for multiple field\n    addElement: function addElement($element) {\n      this.$elements.push($element);\n\n      return this;\n    },\n\n    // See `Field._refreshConstraints()`\n    _refreshConstraints: function _refreshConstraints() {\n      var fieldConstraints;\n\n      this.constraints = [];\n\n      // Select multiple special treatment\n      if (this.element.nodeName === 'SELECT') {\n        this.actualizeOptions()._bindConstraints();\n\n        return this;\n      }\n\n      // Gather all constraints for each input in the multiple group\n      for (var i = 0; i < this.$elements.length; i++) {\n\n        // Check if element have not been dynamically removed since last binding\n        if (!$('html').has(this.$elements[i]).length) {\n          this.$elements.splice(i, 1);\n          continue;\n        }\n\n        fieldConstraints = this.$elements[i].data('FieldMultiple')._refreshConstraints().constraints;\n\n        for (var j = 0; j < fieldConstraints.length; j++) this.addConstraint(fieldConstraints[j].name, fieldConstraints[j].requirements, fieldConstraints[j].priority, fieldConstraints[j].isDomConstraint);\n      }\n\n      return this;\n    },\n\n    // See `Field.getValue()`\n    getValue: function getValue() {\n      // Value could be overriden in DOM\n      if ('function' === typeof this.options.value) return this.options.value(this);else if ('undefined' !== typeof this.options.value) return this.options.value;\n\n      // Radio input case\n      if (this.element.nodeName === 'INPUT') {\n        var type = Utils.getType(this.element);\n        if (type === 'radio') return this._findRelated().filter(':checked').val() || '';\n\n        // checkbox input case\n        if (type === 'checkbox') {\n          var values = [];\n\n          this._findRelated().filter(':checked').each(function () {\n            values.push($(this).val());\n          });\n\n          return values;\n        }\n      }\n\n      // Select multiple case\n      if (this.element.nodeName === 'SELECT' && null === this.$element.val()) return [];\n\n      // Default case that should never happen\n      return this.$element.val();\n    },\n\n    _init: function _init() {\n      this.$elements = [this.$element];\n\n      return this;\n    }\n  };\n\n  var Factory = function Factory(element, options, parsleyFormInstance) {\n    this.element = element;\n    this.$element = $(element);\n\n    // If the element has already been bound, returns its saved Parsley instance\n    var savedparsleyFormInstance = this.$element.data('Parsley');\n    if (savedparsleyFormInstance) {\n\n      // If the saved instance has been bound without a Form parent and there is one given in this call, add it\n      if ('undefined' !== typeof parsleyFormInstance && savedparsleyFormInstance.parent === window.Parsley) {\n        savedparsleyFormInstance.parent = parsleyFormInstance;\n        savedparsleyFormInstance._resetOptions(savedparsleyFormInstance.options);\n      }\n\n      if ('object' === typeof options) {\n        _extends(savedparsleyFormInstance.options, options);\n      }\n\n      return savedparsleyFormInstance;\n    }\n\n    // Parsley must be instantiated with a DOM element or jQuery $element\n    if (!this.$element.length) throw new Error('You must bind Parsley on an existing element.');\n\n    if ('undefined' !== typeof parsleyFormInstance && 'Form' !== parsleyFormInstance.__class__) throw new Error('Parent instance must be a Form instance');\n\n    this.parent = parsleyFormInstance || window.Parsley;\n    return this.init(options);\n  };\n\n  Factory.prototype = {\n    init: function init(options) {\n      this.__class__ = 'Parsley';\n      this.__version__ = '2.8.0';\n      this.__id__ = Utils.generateID();\n\n      // Pre-compute options\n      this._resetOptions(options);\n\n      // A Form instance is obviously a `<form>` element but also every node that is not an input and has the `data-parsley-validate` attribute\n      if (this.element.nodeName === 'FORM' || Utils.checkAttr(this.element, this.options.namespace, 'validate') && !this.$element.is(this.options.inputs)) return this.bind('parsleyForm');\n\n      // Every other element is bound as a `Field` or `FieldMultiple`\n      return this.isMultiple() ? this.handleMultiple() : this.bind('parsleyField');\n    },\n\n    isMultiple: function isMultiple() {\n      var type = Utils.getType(this.element);\n      return type === 'radio' || type === 'checkbox' || this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple');\n    },\n\n    // Multiples fields are a real nightmare :(\n    // Maybe some refactoring would be appreciated here...\n    handleMultiple: function handleMultiple() {\n      var _this13 = this;\n\n      var name;\n      var multiple;\n      var parsleyMultipleInstance;\n\n      // Handle multiple name\n      this.options.multiple = this.options.multiple || (name = this.element.getAttribute('name')) || this.element.getAttribute('id');\n\n      // Special select multiple input\n      if (this.element.nodeName === 'SELECT' && null !== this.element.getAttribute('multiple')) {\n        this.options.multiple = this.options.multiple || this.__id__;\n        return this.bind('parsleyFieldMultiple');\n\n        // Else for radio / checkboxes, we need a `name` or `data-parsley-multiple` to properly bind it\n      } else if (!this.options.multiple) {\n          Utils.warn('To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.', this.$element);\n          return this;\n        }\n\n      // Remove special chars\n      this.options.multiple = this.options.multiple.replace(/(:|\\.|\\[|\\]|\\{|\\}|\\$)/g, '');\n\n      // Add proper `data-parsley-multiple` to siblings if we have a valid multiple name\n      if (name) {\n        $('input[name=\"' + name + '\"]').each(function (i, input) {\n          var type = Utils.getType(input);\n          if (type === 'radio' || type === 'checkbox') input.setAttribute(_this13.options.namespace + 'multiple', _this13.options.multiple);\n        });\n      }\n\n      // Check here if we don't already have a related multiple instance saved\n      var $previouslyRelated = this._findRelated();\n      for (var i = 0; i < $previouslyRelated.length; i++) {\n        parsleyMultipleInstance = $($previouslyRelated.get(i)).data('Parsley');\n        if ('undefined' !== typeof parsleyMultipleInstance) {\n\n          if (!this.$element.data('FieldMultiple')) {\n            parsleyMultipleInstance.addElement(this.$element);\n          }\n\n          break;\n        }\n      }\n\n      // Create a secret Field instance for every multiple field. It will be stored in `data('FieldMultiple')`\n      // And will be useful later to access classic `Field` stuff while being in a `FieldMultiple` instance\n      this.bind('parsleyField', true);\n\n      return parsleyMultipleInstance || this.bind('parsleyFieldMultiple');\n    },\n\n    // Return proper `Form`, `Field` or `FieldMultiple`\n    bind: function bind(type, doNotStore) {\n      var parsleyInstance;\n\n      switch (type) {\n        case 'parsleyForm':\n          parsleyInstance = $.extend(new Form(this.element, this.domOptions, this.options), new Base(), window.ParsleyExtend)._bindFields();\n          break;\n        case 'parsleyField':\n          parsleyInstance = $.extend(new parsley_field(this.element, this.domOptions, this.options, this.parent), new Base(), window.ParsleyExtend);\n          break;\n        case 'parsleyFieldMultiple':\n          parsleyInstance = $.extend(new parsley_field(this.element, this.domOptions, this.options, this.parent), new Multiple(), new Base(), window.ParsleyExtend)._init();\n          break;\n        default:\n          throw new Error(type + 'is not a supported Parsley type');\n      }\n\n      if (this.options.multiple) Utils.setAttr(this.element, this.options.namespace, 'multiple', this.options.multiple);\n\n      if ('undefined' !== typeof doNotStore) {\n        this.$element.data('FieldMultiple', parsleyInstance);\n\n        return parsleyInstance;\n      }\n\n      // Store the freshly bound instance in a DOM element for later access using jQuery `data()`\n      this.$element.data('Parsley', parsleyInstance);\n\n      // Tell the world we have a new Form or Field instance!\n      parsleyInstance._actualizeTriggers();\n      parsleyInstance._trigger('init');\n\n      return parsleyInstance;\n    }\n  };\n\n  var vernums = $.fn.jquery.split('.');\n  if (parseInt(vernums[0]) <= 1 && parseInt(vernums[1]) < 8) {\n    throw \"The loaded version of jQuery is too old. Please upgrade to 1.8.x or better.\";\n  }\n  if (!vernums.forEach) {\n    Utils.warn('Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim');\n  }\n  // Inherit `on`, `off` & `trigger` to Parsley:\n  var Parsley = _extends(new Base(), {\n    element: document,\n    $element: $(document),\n    actualizeOptions: null,\n    _resetOptions: null,\n    Factory: Factory,\n    version: '2.8.0'\n  });\n\n  // Supplement Field and Form with Base\n  // This way, the constructors will have access to those methods\n  _extends(parsley_field.prototype, UI.Field, Base.prototype);\n  _extends(Form.prototype, UI.Form, Base.prototype);\n  // Inherit actualizeOptions and _resetOptions:\n  _extends(Factory.prototype, Base.prototype);\n\n  // ### jQuery API\n  // `$('.elem').parsley(options)` or `$('.elem').psly(options)`\n  $.fn.parsley = $.fn.psly = function (options) {\n    if (this.length > 1) {\n      var instances = [];\n\n      this.each(function () {\n        instances.push($(this).parsley(options));\n      });\n\n      return instances;\n    }\n\n    // Return undefined if applied to non existing DOM element\n    if (this.length == 0) {\n      return;\n    }\n\n    return new Factory(this[0], options);\n  };\n\n  // ### Field and Form extension\n  // Ensure the extension is now defined if it wasn't previously\n  if ('undefined' === typeof window.ParsleyExtend) window.ParsleyExtend = {};\n\n  // ### Parsley config\n  // Inherit from ParsleyDefault, and copy over any existing values\n  Parsley.options = _extends(Utils.objectCreate(Defaults), window.ParsleyConfig);\n  window.ParsleyConfig = Parsley.options; // Old way of accessing global options\n\n  // ### Globals\n  window.Parsley = window.psly = Parsley;\n  Parsley.Utils = Utils;\n  window.ParsleyUtils = {};\n  $.each(Utils, function (key, value) {\n    if ('function' === typeof value) {\n      window.ParsleyUtils[key] = function () {\n        Utils.warnOnce('Accessing `window.ParsleyUtils` is deprecated. Use `window.Parsley.Utils` instead.');\n        return Utils[key].apply(Utils, arguments);\n      };\n    }\n  });\n\n  // ### Define methods that forward to the registry, and deprecate all access except through window.Parsley\n  var registry = window.Parsley._validatorRegistry = new ValidatorRegistry(window.ParsleyConfig.validators, window.ParsleyConfig.i18n);\n  window.ParsleyValidator = {};\n  $.each('setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator hasValidator'.split(' '), function (i, method) {\n    window.Parsley[method] = function () {\n      return registry[method].apply(registry, arguments);\n    };\n    window.ParsleyValidator[method] = function () {\n      var _window$Parsley;\n\n      Utils.warnOnce('Accessing the method \\'' + method + '\\' through Validator is deprecated. Simply call \\'window.Parsley.' + method + '(...)\\'');\n      return (_window$Parsley = window.Parsley)[method].apply(_window$Parsley, arguments);\n    };\n  });\n\n  // ### UI\n  // Deprecated global object\n  window.Parsley.UI = UI;\n  window.ParsleyUI = {\n    removeError: function removeError(instance, name, doNotUpdateClass) {\n      var updateClass = true !== doNotUpdateClass;\n      Utils.warnOnce('Accessing UI is deprecated. Call \\'removeError\\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');\n      return instance.removeError(name, { updateClass: updateClass });\n    },\n    getErrorsMessages: function getErrorsMessages(instance) {\n      Utils.warnOnce('Accessing UI is deprecated. Call \\'getErrorsMessages\\' on the instance directly.');\n      return instance.getErrorsMessages();\n    }\n  };\n  $.each('addError updateError'.split(' '), function (i, method) {\n    window.ParsleyUI[method] = function (instance, name, message, assert, doNotUpdateClass) {\n      var updateClass = true !== doNotUpdateClass;\n      Utils.warnOnce('Accessing UI is deprecated. Call \\'' + method + '\\' on the instance directly. Please comment in issue 1073 as to your need to call this method.');\n      return instance[method](name, { message: message, assert: assert, updateClass: updateClass });\n    };\n  });\n\n  // ### PARSLEY auto-binding\n  // Prevent it by setting `ParsleyConfig.autoBind` to `false`\n  if (false !== window.ParsleyConfig.autoBind) {\n    $(function () {\n      // Works only on `data-parsley-validate`.\n      if ($('[data-parsley-validate]').length) $('[data-parsley-validate]').parsley();\n    });\n  }\n\n  var o = $({});\n  var deprecated = function deprecated() {\n    Utils.warnOnce(\"Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley\");\n  };\n\n  // Returns an event handler that calls `fn` with the arguments it expects\n  function adapt(fn, context) {\n    // Store to allow unbinding\n    if (!fn.parsleyAdaptedCallback) {\n      fn.parsleyAdaptedCallback = function () {\n        var args = Array.prototype.slice.call(arguments, 0);\n        args.unshift(this);\n        fn.apply(context || o, args);\n      };\n    }\n    return fn.parsleyAdaptedCallback;\n  }\n\n  var eventPrefix = 'parsley:';\n  // Converts 'parsley:form:validate' into 'form:validate'\n  function eventName(name) {\n    if (name.lastIndexOf(eventPrefix, 0) === 0) return name.substr(eventPrefix.length);\n    return name;\n  }\n\n  // $.listen is deprecated. Use Parsley.on instead.\n  $.listen = function (name, callback) {\n    var context;\n    deprecated();\n    if ('object' === typeof arguments[1] && 'function' === typeof arguments[2]) {\n      context = arguments[1];\n      callback = arguments[2];\n    }\n\n    if ('function' !== typeof callback) throw new Error('Wrong parameters');\n\n    window.Parsley.on(eventName(name), adapt(callback, context));\n  };\n\n  $.listenTo = function (instance, name, fn) {\n    deprecated();\n    if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance');\n\n    if ('string' !== typeof name || 'function' !== typeof fn) throw new Error('Wrong parameters');\n\n    instance.on(eventName(name), adapt(fn));\n  };\n\n  $.unsubscribe = function (name, fn) {\n    deprecated();\n    if ('string' !== typeof name || 'function' !== typeof fn) throw new Error('Wrong arguments');\n    window.Parsley.off(eventName(name), fn.parsleyAdaptedCallback);\n  };\n\n  $.unsubscribeTo = function (instance, name) {\n    deprecated();\n    if (!(instance instanceof parsley_field) && !(instance instanceof Form)) throw new Error('Must give Parsley instance');\n    instance.off(eventName(name));\n  };\n\n  $.unsubscribeAll = function (name) {\n    deprecated();\n    window.Parsley.off(eventName(name));\n    $('form,input,textarea,select').each(function () {\n      var instance = $(this).data('Parsley');\n      if (instance) {\n        instance.off(eventName(name));\n      }\n    });\n  };\n\n  // $.emit is deprecated. Use jQuery events instead.\n  $.emit = function (name, instance) {\n    var _instance;\n\n    deprecated();\n    var instanceGiven = instance instanceof parsley_field || instance instanceof Form;\n    var args = Array.prototype.slice.call(arguments, instanceGiven ? 2 : 1);\n    args.unshift(eventName(name));\n    if (!instanceGiven) {\n      instance = window.Parsley;\n    }\n    (_instance = instance).trigger.apply(_instance, _toConsumableArray(args));\n  };\n\n  var pubsub = {};\n\n  $.extend(true, Parsley, {\n    asyncValidators: {\n      'default': {\n        fn: function fn(xhr) {\n          // By default, only status 2xx are deemed successful.\n          // Note: we use status instead of state() because responses with status 200\n          // but invalid messages (e.g. an empty body for content type set to JSON) will\n          // result in state() === 'rejected'.\n          return xhr.status >= 200 && xhr.status < 300;\n        },\n        url: false\n      },\n      reverse: {\n        fn: function fn(xhr) {\n          // If reverse option is set, a failing ajax request is considered successful\n          return xhr.status < 200 || xhr.status >= 300;\n        },\n        url: false\n      }\n    },\n\n    addAsyncValidator: function addAsyncValidator(name, fn, url, options) {\n      Parsley.asyncValidators[name] = {\n        fn: fn,\n        url: url || false,\n        options: options || {}\n      };\n\n      return this;\n    }\n\n  });\n\n  Parsley.addValidator('remote', {\n    requirementType: {\n      '': 'string',\n      'validator': 'string',\n      'reverse': 'boolean',\n      'options': 'object'\n    },\n\n    validateString: function validateString(value, url, options, instance) {\n      var data = {};\n      var ajaxOptions;\n      var csr;\n      var validator = options.validator || (true === options.reverse ? 'reverse' : 'default');\n\n      if ('undefined' === typeof Parsley.asyncValidators[validator]) throw new Error('Calling an undefined async validator: `' + validator + '`');\n\n      url = Parsley.asyncValidators[validator].url || url;\n\n      // Fill current value\n      if (url.indexOf('{value}') > -1) {\n        url = url.replace('{value}', encodeURIComponent(value));\n      } else {\n        data[instance.element.getAttribute('name') || instance.element.getAttribute('id')] = value;\n      }\n\n      // Merge options passed in from the function with the ones in the attribute\n      var remoteOptions = $.extend(true, options.options || {}, Parsley.asyncValidators[validator].options);\n\n      // All `$.ajax(options)` could be overridden or extended directly from DOM in `data-parsley-remote-options`\n      ajaxOptions = $.extend(true, {}, {\n        url: url,\n        data: data,\n        type: 'GET'\n      }, remoteOptions);\n\n      // Generate store key based on ajax options\n      instance.trigger('field:ajaxoptions', instance, ajaxOptions);\n\n      csr = $.param(ajaxOptions);\n\n      // Initialise querry cache\n      if ('undefined' === typeof Parsley._remoteCache) Parsley._remoteCache = {};\n\n      // Try to retrieve stored xhr\n      var xhr = Parsley._remoteCache[csr] = Parsley._remoteCache[csr] || $.ajax(ajaxOptions);\n\n      var handleXhr = function handleXhr() {\n        var result = Parsley.asyncValidators[validator].fn.call(instance, xhr, url, options);\n        if (!result) // Map falsy results to rejected promise\n          result = $.Deferred().reject();\n        return $.when(result);\n      };\n\n      return xhr.then(handleXhr, handleXhr);\n    },\n\n    priority: -1\n  });\n\n  Parsley.on('form:submit', function () {\n    Parsley._remoteCache = {};\n  });\n\n  Base.prototype.addAsyncValidator = function () {\n    Utils.warnOnce('Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`');\n    return Parsley.addAsyncValidator.apply(Parsley, arguments);\n  };\n\n  // This is included with the Parsley library itself,\n  // thus there is no use in adding it to your project.\n  Parsley.addMessages('en', {\n    defaultMessage: \"This value seems to be invalid.\",\n    type: {\n      email: \"This value should be a valid email.\",\n      url: \"This value should be a valid url.\",\n      number: \"This value should be a valid number.\",\n      integer: \"This value should be a valid integer.\",\n      digits: \"This value should be digits.\",\n      alphanum: \"This value should be alphanumeric.\"\n    },\n    notblank: \"This value should not be blank.\",\n    required: \"This value is required.\",\n    pattern: \"This value seems to be invalid.\",\n    min: \"This value should be greater than or equal to %s.\",\n    max: \"This value should be lower than or equal to %s.\",\n    range: \"This value should be between %s and %s.\",\n    minlength: \"This value is too short. It should have %s characters or more.\",\n    maxlength: \"This value is too long. It should have %s characters or fewer.\",\n    length: \"This value length is invalid. It should be between %s and %s characters long.\",\n    mincheck: \"You must select at least %s choices.\",\n    maxcheck: \"You must select %s choices or fewer.\",\n    check: \"You must select between %s and %s choices.\",\n    equalto: \"This value should be the same.\"\n  });\n\n  Parsley.setLocale('en');\n\n  /**\n   * inputevent - Alleviate browser bugs for input events\n   * https://github.com/marcandre/inputevent\n   * @version v0.0.3 - (built Thu, Apr 14th 2016, 5:58 pm)\n   * @author Marc-Andre Lafortune <github@marc-andre.ca>\n   * @license MIT\n   */\n\n  function InputEvent() {\n    var _this14 = this;\n\n    var globals = window || global;\n\n    // Slightly odd way construct our object. This way methods are force bound.\n    // Used to test for duplicate library.\n    _extends(this, {\n\n      // For browsers that do not support isTrusted, assumes event is native.\n      isNativeEvent: function isNativeEvent(evt) {\n        return evt.originalEvent && evt.originalEvent.isTrusted !== false;\n      },\n\n      fakeInputEvent: function fakeInputEvent(evt) {\n        if (_this14.isNativeEvent(evt)) {\n          $(evt.target).trigger('input');\n        }\n      },\n\n      misbehaves: function misbehaves(evt) {\n        if (_this14.isNativeEvent(evt)) {\n          _this14.behavesOk(evt);\n          $(document).on('change.inputevent', evt.data.selector, _this14.fakeInputEvent);\n          _this14.fakeInputEvent(evt);\n        }\n      },\n\n      behavesOk: function behavesOk(evt) {\n        if (_this14.isNativeEvent(evt)) {\n          $(document) // Simply unbinds the testing handler\n          .off('input.inputevent', evt.data.selector, _this14.behavesOk).off('change.inputevent', evt.data.selector, _this14.misbehaves);\n        }\n      },\n\n      // Bind the testing handlers\n      install: function install() {\n        if (globals.inputEventPatched) {\n          return;\n        }\n        globals.inputEventPatched = '0.0.3';\n        var _arr = ['select', 'input[type=\"checkbox\"]', 'input[type=\"radio\"]', 'input[type=\"file\"]'];\n        for (var _i = 0; _i < _arr.length; _i++) {\n          var selector = _arr[_i];\n          $(document).on('input.inputevent', selector, { selector: selector }, _this14.behavesOk).on('change.inputevent', selector, { selector: selector }, _this14.misbehaves);\n        }\n      },\n\n      uninstall: function uninstall() {\n        delete globals.inputEventPatched;\n        $(document).off('.inputevent');\n      }\n\n    });\n  };\n\n  var inputevent = new InputEvent();\n\n  inputevent.install();\n\n  var parsley = Parsley;\n\n  return parsley;\n});\n//# sourceMappingURL=parsley.js.map\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nmodule.exports = {\n    'default': 'RFC3986',\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    arrayLimit: 20,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    parameterLimit: 1000,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = {};\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n\n    for (var i = 0; i < parts.length; ++i) {\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder);\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder);\n            val = options.decoder(part.slice(pos + 1), defaults.decoder);\n        }\n        if (has.call(obj, key)) {\n            obj[key] = [].concat(obj[key]).concat(val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options) {\n    var leaf = val;\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (!options.parseArrays && cleanRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (cleanRoot !== '__proto__') {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys\n        // that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while ((segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options);\n};\n\nmodule.exports = function (str, opts) {\n    var options = opts ? utils.assign({}, opts) : {};\n\n    if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    options.ignoreQueryPrefix = options.ignoreQueryPrefix === true;\n    options.delimiter = typeof options.delimiter === 'string' || utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;\n    options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;\n    options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;\n    options.parseArrays = options.parseArrays !== false;\n    options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;\n    options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;\n    options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;\n    options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;\n    options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;\n    options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options);\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    return utils.compact(obj);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaults = {\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    formatter,\n    encodeValuesOnly\n) {\n    var obj = object;\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (skipNulls && obj[key] === null) {\n            continue;\n        }\n\n        if (isArray(obj)) {\n            pushToArray(values, stringify(\n                obj[key],\n                generateArrayPrefix(prefix, key),\n                generateArrayPrefix,\n                strictNullHandling,\n                skipNulls,\n                encoder,\n                filter,\n                sort,\n                allowDots,\n                serializeDate,\n                formatter,\n                encodeValuesOnly\n            ));\n        } else {\n            pushToArray(values, stringify(\n                obj[key],\n                prefix + (allowDots ? '.' + key : '[' + key + ']'),\n                generateArrayPrefix,\n                strictNullHandling,\n                skipNulls,\n                encoder,\n                filter,\n                sort,\n                allowDots,\n                serializeDate,\n                formatter,\n                encodeValuesOnly\n            ));\n        }\n    }\n\n    return values;\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = opts ? utils.assign({}, opts) : {};\n\n    if (options.encoder !== null && typeof options.encoder !== 'undefined' && typeof options.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;\n    var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;\n    var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;\n    var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;\n    var encoder = typeof options.encoder === 'function' ? options.encoder : defaults.encoder;\n    var sort = typeof options.sort === 'function' ? options.sort : null;\n    var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;\n    var serializeDate = typeof options.serializeDate === 'function' ? options.serializeDate : defaults.serializeDate;\n    var encodeValuesOnly = typeof options.encodeValuesOnly === 'boolean' ? options.encodeValuesOnly : defaults.encodeValuesOnly;\n    if (typeof options.format === 'undefined') {\n        options.format = formats['default'];\n    } else if (!Object.prototype.hasOwnProperty.call(formats.formatters, options.format)) {\n        throw new TypeError('Unknown format option provided.');\n    }\n    var formatter = formats.formatters[options.format];\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (options.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = options.arrayFormat;\n    } else if ('indices' in options) {\n        arrayFormat = options.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (sort) {\n        objKeys.sort(sort);\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            strictNullHandling,\n            skipNulls,\n            encode ? encoder : null,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            formatter,\n            encodeValuesOnly\n        ));\n    }\n\n    var joined = keys.join(delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    var obj;\n\n    while (queue.length) {\n        var item = queue.pop();\n        obj = item.obj[item.prop];\n\n        if (Array.isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n\n    return obj;\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (Array.isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (Array.isArray(target) && !Array.isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (Array.isArray(target) && Array.isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str) {\n    try {\n        return decodeURIComponent(str.replace(/\\+/g, ' '));\n    } catch (e) {\n        return str;\n    }\n};\n\nvar encode = function encode(str) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = typeof str === 'string' ? str : String(str);\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        /* eslint operator-linebreak: [2, \"before\"] */\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    return compactQueue(queue);\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (obj === null || typeof obj === 'undefined') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    merge: merge\n};\n","/*!\n * Select2 4.0.5\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  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=\"tree\"></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=\"treeitem\" 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 = $.data(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': 'treeitem',\n      'aria-selected': 'false'\n    };\n\n    if (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    $.data(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      self.highlightFirstItem();\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n      self.highlightFirstItem();\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 = $highlighted.data('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 te top, don't move further\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 = $this.data('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 = $(this).data('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 (this.$element.data('old-tabindex') != null) {\n      this._tabindex = this.$element.data('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\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-container';\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.focus();\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\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    var self = this;\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        var $this = $(this);\n\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = $this.data('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').attr('id', id);\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.focus();\n      }\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').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    $rendered.prop('title', selection.title || selection.text);\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 = $selection.data('data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    this.$selection.find('.select2-selection__rendered').empty();\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      $selection.prop('title', selection.title || selection.text);\n\n      $selection.data('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], function ($, KEYS) {\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 = $clear.data('data');\n\n    for (var d = 0; d < data.length; d++) {\n      var 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        return;\n      }\n    }\n\n    this.$element.val(this.placeholder.id).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 $remove = $(\n      '<span class=\"select2-selection__clear\">' +\n        '&times;' +\n      '</span>'\n    );\n    $remove.data('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=\"textbox\" 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    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\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      self.$search.attr('aria-activedescendant', params.id);\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 = $previousChoice.data('data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\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.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').innerWidth();\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    ];\n\n    var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting'];\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    '\\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    '\\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    '\\u03C9': '\\u03C9',\n    '\\u03C2': '\\u03C3'\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      $.removeData(this, 'data');\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    $.data(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = $.data($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    $.data($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (!$.isPlainObject(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    var data = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n\n    this.addOptions(this.convertToOptions(data));\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\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 ($request.status && $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 tag = this._lastTag;\n\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.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.query =\n    function (decorated, params, callback) {\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        decorated.call(self, params, callback);\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 implmented 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=\"textbox\" />' +\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    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\n      self.$search.focus();\n\n      window.setTimeout(function () {\n        self.$search.focus();\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n\n      self.$search.val('');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.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\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    }\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', function () {\n      var isLoadMoreVisible = $.contains(\n        document.documentElement,\n        self.$loadingMore[0]\n      );\n\n      if (self.loading || !isLoadMoreVisible) {\n        return;\n      }\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var loadingMoreOffset = self.$loadingMore.offset().top +\n        self.$loadingMore.outerHeight(false);\n\n      if (currentOffset + 50 >= loadingMoreOffset) {\n        self.loadMore();\n      }\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=\"treeitem\" 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    var setupResultsEvents = false;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      if (!setupResultsEvents) {\n        setupResultsEvents = true;\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    });\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._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      $(this).data('select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = $(this).data('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 calciulating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positoned 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 = $offsetParent.offset();\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\n], function () {\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 = $highlightedResults.data('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) {\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  };\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 (typeof options.language === 'string') {\n      // Check if the language is specified with a region\n      if (options.language.indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = options.language.split('-');\n        var baseLanguage = languageParts[0];\n\n        options.language = [options.language, baseLanguage];\n      } else {\n        options.language = [options.language];\n      }\n    }\n\n    if ($.isArray(options.language)) {\n      var languages = new Translation();\n      options.language.push('en');\n\n      var languageNames = options.language;\n\n      for (var l = 0; l < languageNames.length; l++) {\n        var name = languageNames[l];\n        var language = {};\n\n        try {\n          // Try to load it with the original name\n          language = Translation.loadPath(name);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            name = this.defaults.amdLanguageBase + name;\n            language = Translation.loadPath(name);\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 (options.debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + name + '\" could not be ' +\n                'automatically loaded. A fallback will be used instead.'\n              );\n            }\n\n            continue;\n          }\n        }\n\n        languages.extend(language);\n      }\n\n      options.translations = languages;\n    } else {\n      var baseTranslation = Translation.loadPath(\n        this.defaults.amdLanguageBase + 'en'\n      );\n      var customTranslation = new Translation(options.language);\n\n      customTranslation.extend(baseTranslation);\n\n      options.translations = customTranslation;\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: EnglishTranslation,\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: 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.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(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    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.language == null) {\n      if ($e.prop('lang')) {\n        this.options.language = $e.prop('lang').toLowerCase();\n      } else if ($e.closest('[lang]').prop('lang')) {\n        this.options.language = $e.closest('[lang]').prop('lang');\n      }\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 ($e.data('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      $e.data('data', $e.data('select2Tags'));\n      $e.data('tags', true);\n    }\n\n    if ($e.data('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', $e.data('ajaxUrl'));\n      $e.data('ajax--url', $e.data('ajaxUrl'));\n    }\n\n    var dataset = {};\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, $e.data());\n    } else {\n      dataset = $e.data();\n    }\n\n    var data = $.extend(true, {}, 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 ($element.data('select2') != null) {\n      $element.data('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    $element.data('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    $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    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    };\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', this.$element.data('old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\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    $container.data('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], function ($, _, Select2, Defaults) {\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 = $(this).data('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","/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.6.0\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n(function(factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n\n}(function($) {\n    'use strict';\n    var Slick = window.Slick || {};\n\n    Slick = (function() {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this, dataSettings;\n\n            _.defaults = {\n                accessibility: true,\n                adaptiveHeight: false,\n                appendArrows: $(element),\n                appendDots: $(element),\n                arrows: true,\n                asNavFor: null,\n                prevArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-prev\" aria-label=\"Previous\" tabindex=\"0\" role=\"button\">Previous</button>',\n                nextArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-next\" aria-label=\"Next\" tabindex=\"0\" role=\"button\">Next</button>',\n                autoplay: false,\n                autoplaySpeed: 3000,\n                centerMode: false,\n                centerPadding: '50px',\n                cssEase: 'ease',\n                customPaging: function(slider, i) {\n                    return $('<button type=\"button\" data-role=\"none\" role=\"button\" tabindex=\"0\" />').text(i + 1);\n                },\n                dots: false,\n                dotsClass: 'slick-dots',\n                draggable: true,\n                easing: 'linear',\n                edgeFriction: 0.35,\n                fade: false,\n                focusOnSelect: false,\n                infinite: true,\n                initialSlide: 0,\n                lazyLoad: 'ondemand',\n                mobileFirst: false,\n                pauseOnHover: true,\n                pauseOnFocus: true,\n                pauseOnDotsHover: false,\n                respondTo: 'window',\n                responsive: null,\n                rows: 1,\n                rtl: false,\n                slide: '',\n                slidesPerRow: 1,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                speed: 500,\n                swipe: true,\n                swipeToSlide: false,\n                touchMove: true,\n                touchThreshold: 5,\n                useCSS: true,\n                useTransform: true,\n                variableWidth: false,\n                vertical: false,\n                verticalSwiping: false,\n                waitForAnimate: true,\n                zIndex: 1000\n            };\n\n            _.initials = {\n                animating: false,\n                dragging: false,\n                autoPlayTimer: null,\n                currentDirection: 0,\n                currentLeft: null,\n                currentSlide: 0,\n                direction: 1,\n                $dots: null,\n                listWidth: null,\n                listHeight: null,\n                loadIndex: 0,\n                $nextArrow: null,\n                $prevArrow: null,\n                slideCount: null,\n                slideWidth: null,\n                $slideTrack: null,\n                $slides: null,\n                sliding: false,\n                slideOffset: 0,\n                swipeLeft: null,\n                $list: null,\n                touchObject: {},\n                transformsEnabled: false,\n                unslicked: false\n            };\n\n            $.extend(_, _.initials);\n\n            _.activeBreakpoint = null;\n            _.animType = null;\n            _.animProp = null;\n            _.breakpoints = [];\n            _.breakpointSettings = [];\n            _.cssTransitions = false;\n            _.focussed = false;\n            _.interrupted = false;\n            _.hidden = 'hidden';\n            _.paused = true;\n            _.positionProp = null;\n            _.respondTo = null;\n            _.rowCount = 1;\n            _.shouldClick = true;\n            _.$slider = $(element);\n            _.$slidesCache = null;\n            _.transformType = null;\n            _.transitionType = null;\n            _.visibilityChange = 'visibilitychange';\n            _.windowWidth = 0;\n            _.windowTimer = null;\n\n            dataSettings = $(element).data('slick') || {};\n\n            _.options = $.extend({}, _.defaults, settings, dataSettings);\n\n            _.currentSlide = _.options.initialSlide;\n\n            _.originalSettings = _.options;\n\n            if (typeof document.mozHidden !== 'undefined') {\n                _.hidden = 'mozHidden';\n                _.visibilityChange = 'mozvisibilitychange';\n            } else if (typeof document.webkitHidden !== 'undefined') {\n                _.hidden = 'webkitHidden';\n                _.visibilityChange = 'webkitvisibilitychange';\n            }\n\n            _.autoPlay = $.proxy(_.autoPlay, _);\n            _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n            _.changeSlide = $.proxy(_.changeSlide, _);\n            _.clickHandler = $.proxy(_.clickHandler, _);\n            _.selectHandler = $.proxy(_.selectHandler, _);\n            _.setPosition = $.proxy(_.setPosition, _);\n            _.swipeHandler = $.proxy(_.swipeHandler, _);\n            _.dragHandler = $.proxy(_.dragHandler, _);\n            _.keyHandler = $.proxy(_.keyHandler, _);\n\n            _.instanceUid = instanceUid++;\n\n            // A simple way to check for HTML strings\n            // Strict HTML recognition (must start with <)\n            // Extracted from jQuery v1.11 source\n            _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n\n            _.registerBreakpoints();\n            _.init(true);\n\n        }\n\n        return Slick;\n\n    }());\n\n    Slick.prototype.activateADA = function() {\n        var _ = this;\n\n        _.$slideTrack.find('.slick-active').attr({\n            'aria-hidden': 'false'\n        }).find('a, input, button, select').attr({\n            'tabindex': '0'\n        });\n\n    };\n\n    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            addBefore = index;\n            index = null;\n        } else if (index < 0 || (index >= _.slideCount)) {\n            return false;\n        }\n\n        _.unload();\n\n        if (typeof(index) === 'number') {\n            if (index === 0 && _.$slides.length === 0) {\n                $(markup).appendTo(_.$slideTrack);\n            } else if (addBefore) {\n                $(markup).insertBefore(_.$slides.eq(index));\n            } else {\n                $(markup).insertAfter(_.$slides.eq(index));\n            }\n        } else {\n            if (addBefore === true) {\n                $(markup).prependTo(_.$slideTrack);\n            } else {\n                $(markup).appendTo(_.$slideTrack);\n            }\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.animateHeight = function() {\n        var _ = this;\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.animate({\n                height: targetHeight\n            }, _.options.speed);\n        }\n    };\n\n    Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n        var animProps = {},\n            _ = this;\n\n        _.animateHeight();\n\n        if (_.options.rtl === true && _.options.vertical === false) {\n            targetLeft = -targetLeft;\n        }\n        if (_.transformsEnabled === false) {\n            if (_.options.vertical === false) {\n                _.$slideTrack.animate({\n                    left: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            } else {\n                _.$slideTrack.animate({\n                    top: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            }\n\n        } else {\n\n            if (_.cssTransitions === false) {\n                if (_.options.rtl === true) {\n                    _.currentLeft = -(_.currentLeft);\n                }\n                $({\n                    animStart: _.currentLeft\n                }).animate({\n                    animStart: targetLeft\n                }, {\n                    duration: _.options.speed,\n                    easing: _.options.easing,\n                    step: function(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' +\n                                now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' +\n                                now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function() {\n                        if (callback) {\n                            callback.call();\n                        }\n                    }\n                });\n\n            } else {\n\n                _.applyTransition();\n                targetLeft = Math.ceil(targetLeft);\n\n                if (_.options.vertical === false) {\n                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n                } else {\n                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n                }\n                _.$slideTrack.css(animProps);\n\n                if (callback) {\n                    setTimeout(function() {\n\n                        _.disableTransition();\n\n                        callback.call();\n                    }, _.options.speed);\n                }\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.getNavTarget = function() {\n\n        var _ = this,\n            asNavFor = _.options.asNavFor;\n\n        if ( asNavFor && asNavFor !== null ) {\n            asNavFor = $(asNavFor).not(_.$slider);\n        }\n\n        return asNavFor;\n\n    };\n\n    Slick.prototype.asNavFor = function(index) {\n\n        var _ = this,\n            asNavFor = _.getNavTarget();\n\n        if ( asNavFor !== null && typeof asNavFor === 'object' ) {\n            asNavFor.each(function() {\n                var target = $(this).slick('getSlick');\n                if(!target.unslicked) {\n                    target.slideHandler(index, true);\n                }\n            });\n        }\n\n    };\n\n    Slick.prototype.applyTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        if (_.options.fade === false) {\n            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n        } else {\n            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n        }\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.autoPlay = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        if ( _.slideCount > _.options.slidesToShow ) {\n            _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\n        }\n\n    };\n\n    Slick.prototype.autoPlayClear = function() {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n    };\n\n    Slick.prototype.autoPlayIterator = function() {\n\n        var _ = this,\n            slideTo = _.currentSlide + _.options.slidesToScroll;\n\n        if ( !_.paused && !_.interrupted && !_.focussed ) {\n\n            if ( _.options.infinite === false ) {\n\n                if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\n                    _.direction = 0;\n                }\n\n                else if ( _.direction === 0 ) {\n\n                    slideTo = _.currentSlide - _.options.slidesToScroll;\n\n                    if ( _.currentSlide - 1 === 0 ) {\n                        _.direction = 1;\n                    }\n\n                }\n\n            }\n\n            _.slideHandler( slideTo );\n\n        }\n\n    };\n\n    Slick.prototype.buildArrows = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true ) {\n\n            _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n            _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n            if( _.slideCount > _.options.slidesToShow ) {\n\n                _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n                _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n                if (_.htmlExpr.test(_.options.prevArrow)) {\n                    _.$prevArrow.prependTo(_.options.appendArrows);\n                }\n\n                if (_.htmlExpr.test(_.options.nextArrow)) {\n                    _.$nextArrow.appendTo(_.options.appendArrows);\n                }\n\n                if (_.options.infinite !== true) {\n                    _.$prevArrow\n                        .addClass('slick-disabled')\n                        .attr('aria-disabled', 'true');\n                }\n\n            } else {\n\n                _.$prevArrow.add( _.$nextArrow )\n\n                    .addClass('slick-hidden')\n                    .attr({\n                        'aria-disabled': 'true',\n                        'tabindex': '-1'\n                    });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.buildDots = function() {\n\n        var _ = this,\n            i, dot;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$slider.addClass('slick-dotted');\n\n            dot = $('<ul />').addClass(_.options.dotsClass);\n\n            for (i = 0; i <= _.getDotCount(); i += 1) {\n                dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n            }\n\n            _.$dots = dot.appendTo(_.options.appendDots);\n\n            _.$dots.find('li').first().addClass('slick-active').attr('aria-hidden', 'false');\n\n        }\n\n    };\n\n    Slick.prototype.buildOut = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slider\n                .children( _.options.slide + ':not(.slick-cloned)')\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function(index, element) {\n            $(element)\n                .attr('data-slick-index', index)\n                .data('originalStyling', $(element).attr('style') || '');\n        });\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = (_.slideCount === 0) ?\n            $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n            _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap(\n            '<div aria-live=\"polite\" class=\"slick-list\"/>').parent();\n        _.$slideTrack.css('opacity', 0);\n\n        if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n            _.options.slidesToScroll = 1;\n        }\n\n        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n        _.setupInfinite();\n\n        _.buildArrows();\n\n        _.buildDots();\n\n        _.updateDots();\n\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        if (_.options.draggable === true) {\n            _.$list.addClass('draggable');\n        }\n\n    };\n\n    Slick.prototype.buildRows = function() {\n\n        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n        newSlides = document.createDocumentFragment();\n        originalSlides = _.$slider.children();\n\n        if(_.options.rows > 1) {\n\n            slidesPerSection = _.options.slidesPerRow * _.options.rows;\n            numOfSlides = Math.ceil(\n                originalSlides.length / slidesPerSection\n            );\n\n            for(a = 0; a < numOfSlides; a++){\n                var slide = document.createElement('div');\n                for(b = 0; b < _.options.rows; b++) {\n                    var row = document.createElement('div');\n                    for(c = 0; c < _.options.slidesPerRow; c++) {\n                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n                        if (originalSlides.get(target)) {\n                            row.appendChild(originalSlides.get(target));\n                        }\n                    }\n                    slide.appendChild(row);\n                }\n                newSlides.appendChild(slide);\n            }\n\n            _.$slider.empty().append(newSlides);\n            _.$slider.children().children().children()\n                .css({\n                    'width':(100 / _.options.slidesPerRow) + '%',\n                    'display': 'inline-block'\n                });\n\n        }\n\n    };\n\n    Slick.prototype.checkResponsive = function(initial, forceUpdate) {\n\n        var _ = this,\n            breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\n        var sliderWidth = _.$slider.width();\n        var windowWidth = window.innerWidth || $(window).width();\n\n        if (_.respondTo === 'window') {\n            respondToWidth = windowWidth;\n        } else if (_.respondTo === 'slider') {\n            respondToWidth = sliderWidth;\n        } else if (_.respondTo === 'min') {\n            respondToWidth = Math.min(windowWidth, sliderWidth);\n        }\n\n        if ( _.options.responsive &&\n            _.options.responsive.length &&\n            _.options.responsive !== null) {\n\n            targetBreakpoint = null;\n\n            for (breakpoint in _.breakpoints) {\n                if (_.breakpoints.hasOwnProperty(breakpoint)) {\n                    if (_.originalSettings.mobileFirst === false) {\n                        if (respondToWidth < _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    } else {\n                        if (respondToWidth > _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    }\n                }\n            }\n\n            if (targetBreakpoint !== null) {\n                if (_.activeBreakpoint !== null) {\n                    if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n                        _.activeBreakpoint =\n                            targetBreakpoint;\n                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                            _.unslick(targetBreakpoint);\n                        } else {\n                            _.options = $.extend({}, _.originalSettings,\n                                _.breakpointSettings[\n                                    targetBreakpoint]);\n                            if (initial === true) {\n                                _.currentSlide = _.options.initialSlide;\n                            }\n                            _.refresh(initial);\n                        }\n                        triggerBreakpoint = targetBreakpoint;\n                    }\n                } else {\n                    _.activeBreakpoint = targetBreakpoint;\n                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                        _.unslick(targetBreakpoint);\n                    } else {\n                        _.options = $.extend({}, _.originalSettings,\n                            _.breakpointSettings[\n                                targetBreakpoint]);\n                        if (initial === true) {\n                            _.currentSlide = _.options.initialSlide;\n                        }\n                        _.refresh(initial);\n                    }\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            } else {\n                if (_.activeBreakpoint !== null) {\n                    _.activeBreakpoint = null;\n                    _.options = _.originalSettings;\n                    if (initial === true) {\n                        _.currentSlide = _.options.initialSlide;\n                    }\n                    _.refresh(initial);\n                    triggerBreakpoint = targetBreakpoint;\n                }\n            }\n\n            // only trigger breakpoints during an actual break. not on initialize.\n            if( !initial && triggerBreakpoint !== false ) {\n                _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n            }\n        }\n\n    };\n\n    Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n        var _ = this,\n            $target = $(event.currentTarget),\n            indexOffset, slideOffset, unevenOffset;\n\n        // If target is a link, prevent default action.\n        if($target.is('a')) {\n            event.preventDefault();\n        }\n\n        // If target is not the <li> element (ie: a child), find the <li>.\n        if(!$target.is('li')) {\n            $target = $target.closest('li');\n        }\n\n        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n        switch (event.data.message) {\n\n            case 'previous':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'next':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'index':\n                var index = event.data.index === 0 ? 0 :\n                    event.data.index || $target.index() * _.options.slidesToScroll;\n\n                _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n                $target.children().trigger('focus');\n                break;\n\n            default:\n                return;\n        }\n\n    };\n\n    Slick.prototype.checkNavigable = function(index) {\n\n        var _ = this,\n            navigables, prevNavigable;\n\n        navigables = _.getNavigableIndexes();\n        prevNavigable = 0;\n        if (index > navigables[navigables.length - 1]) {\n            index = navigables[navigables.length - 1];\n        } else {\n            for (var n in navigables) {\n                if (index < navigables[n]) {\n                    index = prevNavigable;\n                    break;\n                }\n                prevNavigable = navigables[n];\n            }\n        }\n\n        return index;\n    };\n\n    Slick.prototype.cleanUpEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots && _.$dots !== null) {\n\n            $('li', _.$dots)\n                .off('click.slick', _.changeSlide)\n                .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n        _.$slider.off('focus.slick blur.slick');\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n        }\n\n        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n        _.$list.off('click.slick', _.clickHandler);\n\n        $(document).off(_.visibilityChange, _.visibility);\n\n        _.cleanUpSlideEvents();\n\n        if (_.options.accessibility === true) {\n            _.$list.off('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n        }\n\n        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition);\n\n    };\n\n    Slick.prototype.cleanUpSlideEvents = function() {\n\n        var _ = this;\n\n        _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n        _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n    };\n\n    Slick.prototype.cleanUpRows = function() {\n\n        var _ = this, originalSlides;\n\n        if(_.options.rows > 1) {\n            originalSlides = _.$slides.children().children();\n            originalSlides.removeAttr('style');\n            _.$slider.empty().append(originalSlides);\n        }\n\n    };\n\n    Slick.prototype.clickHandler = function(event) {\n\n        var _ = this;\n\n        if (_.shouldClick === false) {\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n            event.preventDefault();\n        }\n\n    };\n\n    Slick.prototype.destroy = function(refresh) {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        _.touchObject = {};\n\n        _.cleanUpEvents();\n\n        $('.slick-cloned', _.$slider).detach();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n\n        if ( _.$prevArrow && _.$prevArrow.length ) {\n\n            _.$prevArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.prevArrow )) {\n                _.$prevArrow.remove();\n            }\n        }\n\n        if ( _.$nextArrow && _.$nextArrow.length ) {\n\n            _.$nextArrow\n                .removeClass('slick-disabled slick-arrow slick-hidden')\n                .removeAttr('aria-hidden aria-disabled tabindex')\n                .css('display','');\n\n            if ( _.htmlExpr.test( _.options.nextArrow )) {\n                _.$nextArrow.remove();\n            }\n\n        }\n\n\n        if (_.$slides) {\n\n            _.$slides\n                .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\n                .removeAttr('aria-hidden')\n                .removeAttr('data-slick-index')\n                .each(function(){\n                    $(this).attr('style', $(this).data('originalStyling'));\n                });\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slideTrack.detach();\n\n            _.$list.detach();\n\n            _.$slider.append(_.$slides);\n        }\n\n        _.cleanUpRows();\n\n        _.$slider.removeClass('slick-slider');\n        _.$slider.removeClass('slick-initialized');\n        _.$slider.removeClass('slick-dotted');\n\n        _.unslicked = true;\n\n        if(!refresh) {\n            _.$slider.trigger('destroy', [_]);\n        }\n\n    };\n\n    Slick.prototype.disableTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        transition[_.transitionType] = '';\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).css({\n                zIndex: _.options.zIndex\n            });\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 1\n            }, _.options.speed, _.options.easing, callback);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 1,\n                zIndex: _.options.zIndex\n            });\n\n            if (callback) {\n                setTimeout(function() {\n\n                    _.disableTransition(slideIndex);\n\n                    callback.call();\n                }, _.options.speed);\n            }\n\n        }\n\n    };\n\n    Slick.prototype.fadeSlideOut = function(slideIndex) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            }, _.options.speed, _.options.easing);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 0,\n                zIndex: _.options.zIndex - 2\n            });\n\n        }\n\n    };\n\n    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n        var _ = this;\n\n        if (filter !== null) {\n\n            _.$slidesCache = _.$slides;\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.focusHandler = function() {\n\n        var _ = this;\n\n        _.$slider\n            .off('focus.slick blur.slick')\n            .on('focus.slick blur.slick',\n                '*:not(.slick-arrow)', function(event) {\n\n            event.stopImmediatePropagation();\n            var $sf = $(this);\n\n            setTimeout(function() {\n\n                if( _.options.pauseOnFocus ) {\n                    _.focussed = $sf.is(':focus');\n                    _.autoPlay();\n                }\n\n            }, 0);\n\n        });\n    };\n\n    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n        var _ = this;\n        return _.currentSlide;\n\n    };\n\n    Slick.prototype.getDotCount = function() {\n\n        var _ = this;\n\n        var breakPoint = 0;\n        var counter = 0;\n        var pagerQty = 0;\n\n        if (_.options.infinite === true) {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToScroll;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        } else if (_.options.centerMode === true) {\n            pagerQty = _.slideCount;\n        } else if(!_.options.asNavFor) {\n            pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n        }else {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToScroll;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        }\n\n        return pagerQty - 1;\n\n    };\n\n    Slick.prototype.getLeft = function(slideIndex) {\n\n        var _ = this,\n            targetLeft,\n            verticalHeight,\n            verticalOffset = 0,\n            targetSlide;\n\n        _.slideOffset = 0;\n        verticalHeight = _.$slides.first().outerHeight(true);\n\n        if (_.options.infinite === true) {\n            if (_.slideCount > _.options.slidesToShow) {\n                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n                verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;\n            }\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n                    if (slideIndex > _.slideCount) {\n                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n                    } else {\n                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n                    }\n                }\n            }\n        } else {\n            if (slideIndex + _.options.slidesToShow > _.slideCount) {\n                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n            }\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = 0;\n            verticalOffset = 0;\n        }\n\n        if (_.options.centerMode === true && _.options.infinite === true) {\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n        } else if (_.options.centerMode === true) {\n            _.slideOffset = 0;\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n        }\n\n        if (_.options.vertical === false) {\n            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n        } else {\n            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n        }\n\n        if (_.options.variableWidth === true) {\n\n            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n            } else {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n            }\n\n            if (_.options.rtl === true) {\n                if (targetSlide[0]) {\n                    targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                } else {\n                    targetLeft =  0;\n                }\n            } else {\n                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n            }\n\n            if (_.options.centerMode === true) {\n                if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n                } else {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n                }\n\n                if (_.options.rtl === true) {\n                    if (targetSlide[0]) {\n                        targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n                    } else {\n                        targetLeft =  0;\n                    }\n                } else {\n                    targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n                }\n\n                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n            }\n        }\n\n        return targetLeft;\n\n    };\n\n    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n        var _ = this;\n\n        return _.options[option];\n\n    };\n\n    Slick.prototype.getNavigableIndexes = function() {\n\n        var _ = this,\n            breakPoint = 0,\n            counter = 0,\n            indexes = [],\n            max;\n\n        if (_.options.infinite === false) {\n            max = _.slideCount;\n        } else {\n            breakPoint = _.options.slidesToScroll * -1;\n            counter = _.options.slidesToScroll * -1;\n            max = _.slideCount * 2;\n        }\n\n        while (breakPoint < max) {\n            indexes.push(breakPoint);\n            breakPoint = counter + _.options.slidesToScroll;\n            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n        }\n\n        return indexes;\n\n    };\n\n    Slick.prototype.getSlick = function() {\n\n        return this;\n\n    };\n\n    Slick.prototype.getSlideCount = function() {\n\n        var _ = this,\n            slidesTraversed, swipedSlide, centerOffset;\n\n        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n        if (_.options.swipeToSlide === true) {\n            _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n                    swipedSlide = slide;\n                    return false;\n                }\n            });\n\n            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n            return slidesTraversed;\n\n        } else {\n            return _.options.slidesToScroll;\n        }\n\n    };\n\n    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'index',\n                index: parseInt(slide)\n            }\n        }, dontAnimate);\n\n    };\n\n    Slick.prototype.init = function(creation) {\n\n        var _ = this;\n\n        if (!$(_.$slider).hasClass('slick-initialized')) {\n\n            $(_.$slider).addClass('slick-initialized');\n\n            _.buildRows();\n            _.buildOut();\n            _.setProps();\n            _.startLoad();\n            _.loadSlider();\n            _.initializeEvents();\n            _.updateArrows();\n            _.updateDots();\n            _.checkResponsive(true);\n            _.focusHandler();\n\n        }\n\n        if (creation) {\n            _.$slider.trigger('init', [_]);\n        }\n\n        if (_.options.accessibility === true) {\n            _.initADA();\n        }\n\n        if ( _.options.autoplay ) {\n\n            _.paused = false;\n            _.autoPlay();\n\n        }\n\n    };\n\n    Slick.prototype.initADA = function() {\n        var _ = this;\n        _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n            'aria-hidden': 'true',\n            'tabindex': '-1'\n        }).find('a, input, button, select').attr({\n            'tabindex': '-1'\n        });\n\n        _.$slideTrack.attr('role', 'listbox');\n\n        _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\n            $(this).attr({\n                'role': 'option',\n                'aria-describedby': 'slick-slide' + _.instanceUid + i + ''\n            });\n        });\n\n        if (_.$dots !== null) {\n            _.$dots.attr('role', 'tablist').find('li').each(function(i) {\n                $(this).attr({\n                    'role': 'presentation',\n                    'aria-selected': 'false',\n                    'aria-controls': 'navigation' + _.instanceUid + i + '',\n                    'id': 'slick-slide' + _.instanceUid + i + ''\n                });\n            })\n                .first().attr('aria-selected', 'true').end()\n                .find('button').attr('role', 'button').end()\n                .closest('div').attr('role', 'toolbar');\n        }\n        _.activateADA();\n\n    };\n\n    Slick.prototype.initArrowEvents = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'previous'\n               }, _.changeSlide);\n            _.$nextArrow\n               .off('click.slick')\n               .on('click.slick', {\n                    message: 'next'\n               }, _.changeSlide);\n        }\n\n    };\n\n    Slick.prototype.initDotEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n            $('li', _.$dots).on('click.slick', {\n                message: 'index'\n            }, _.changeSlide);\n        }\n\n        if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {\n\n            $('li', _.$dots)\n                .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\n                .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initSlideEvents = function() {\n\n        var _ = this;\n\n        if ( _.options.pauseOnHover ) {\n\n            _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n            _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n        }\n\n    };\n\n    Slick.prototype.initializeEvents = function() {\n\n        var _ = this;\n\n        _.initArrowEvents();\n\n        _.initDotEvents();\n        _.initSlideEvents();\n\n        _.$list.on('touchstart.slick mousedown.slick', {\n            action: 'start'\n        }, _.swipeHandler);\n        _.$list.on('touchmove.slick mousemove.slick', {\n            action: 'move'\n        }, _.swipeHandler);\n        _.$list.on('touchend.slick mouseup.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n        _.$list.on('touchcancel.slick mouseleave.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n\n        _.$list.on('click.slick', _.clickHandler);\n\n        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n        if (_.options.accessibility === true) {\n            _.$list.on('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition);\n\n    };\n\n    Slick.prototype.initUI = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.show();\n            _.$nextArrow.show();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.show();\n\n        }\n\n    };\n\n    Slick.prototype.keyHandler = function(event) {\n\n        var _ = this;\n         //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n        if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n            if (event.keyCode === 37 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'next' :  'previous'\n                    }\n                });\n            } else if (event.keyCode === 39 && _.options.accessibility === true) {\n                _.changeSlide({\n                    data: {\n                        message: _.options.rtl === true ? 'previous' : 'next'\n                    }\n                });\n            }\n        }\n\n    };\n\n    Slick.prototype.lazyLoad = function() {\n\n        var _ = this,\n            loadRange, cloneRange, rangeStart, rangeEnd;\n\n        function loadImages(imagesScope) {\n\n            $('img[data-lazy]', imagesScope).each(function() {\n\n                var image = $(this),\n                    imageSource = $(this).attr('data-lazy'),\n                    imageToLoad = document.createElement('img');\n\n                imageToLoad.onload = function() {\n\n                    image\n                        .animate({ opacity: 0 }, 100, function() {\n                            image\n                                .attr('src', imageSource)\n                                .animate({ opacity: 1 }, 200, function() {\n                                    image\n                                        .removeAttr('data-lazy')\n                                        .removeClass('slick-loading');\n                                });\n                            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n                        });\n\n                };\n\n                imageToLoad.onerror = function() {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                };\n\n                imageToLoad.src = imageSource;\n\n            });\n\n        }\n\n        if (_.options.centerMode === true) {\n            if (_.options.infinite === true) {\n                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n                rangeEnd = rangeStart + _.options.slidesToShow + 2;\n            } else {\n                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n            }\n        } else {\n            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n            rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n            if (_.options.fade === true) {\n                if (rangeStart > 0) rangeStart--;\n                if (rangeEnd <= _.slideCount) rangeEnd++;\n            }\n        }\n\n        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n        loadImages(loadRange);\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-slide');\n            loadImages(cloneRange);\n        } else\n        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n            loadImages(cloneRange);\n        } else if (_.currentSlide === 0) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n            loadImages(cloneRange);\n        }\n\n    };\n\n    Slick.prototype.loadSlider = function() {\n\n        var _ = this;\n\n        _.setPosition();\n\n        _.$slideTrack.css({\n            opacity: 1\n        });\n\n        _.$slider.removeClass('slick-loading');\n\n        _.initUI();\n\n        if (_.options.lazyLoad === 'progressive') {\n            _.progressiveLazyLoad();\n        }\n\n    };\n\n    Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'next'\n            }\n        });\n\n    };\n\n    Slick.prototype.orientationChange = function() {\n\n        var _ = this;\n\n        _.checkResponsive();\n        _.setPosition();\n\n    };\n\n    Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n        _.paused = true;\n\n    };\n\n    Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n        var _ = this;\n\n        _.autoPlay();\n        _.options.autoplay = true;\n        _.paused = false;\n        _.focussed = false;\n        _.interrupted = false;\n\n    };\n\n    Slick.prototype.postSlide = function(index) {\n\n        var _ = this;\n\n        if( !_.unslicked ) {\n\n            _.$slider.trigger('afterChange', [_, index]);\n\n            _.animating = false;\n\n            _.setPosition();\n\n            _.swipeLeft = null;\n\n            if ( _.options.autoplay ) {\n                _.autoPlay();\n            }\n\n            if (_.options.accessibility === true) {\n                _.initADA();\n            }\n\n        }\n\n    };\n\n    Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'previous'\n            }\n        });\n\n    };\n\n    Slick.prototype.preventDefault = function(event) {\n\n        event.preventDefault();\n\n    };\n\n    Slick.prototype.progressiveLazyLoad = function( tryCount ) {\n\n        tryCount = tryCount || 1;\n\n        var _ = this,\n            $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\n            image,\n            imageSource,\n            imageToLoad;\n\n        if ( $imgsToLoad.length ) {\n\n            image = $imgsToLoad.first();\n            imageSource = image.attr('data-lazy');\n            imageToLoad = document.createElement('img');\n\n            imageToLoad.onload = function() {\n\n                image\n                    .attr( 'src', imageSource )\n                    .removeAttr('data-lazy')\n                    .removeClass('slick-loading');\n\n                if ( _.options.adaptiveHeight === true ) {\n                    _.setPosition();\n                }\n\n                _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\n                _.progressiveLazyLoad();\n\n            };\n\n            imageToLoad.onerror = function() {\n\n                if ( tryCount < 3 ) {\n\n                    /**\n                     * try to load the image 3 times,\n                     * leave a slight delay so we don't get\n                     * servers blocking the request.\n                     */\n                    setTimeout( function() {\n                        _.progressiveLazyLoad( tryCount + 1 );\n                    }, 500 );\n\n                } else {\n\n                    image\n                        .removeAttr( 'data-lazy' )\n                        .removeClass( 'slick-loading' )\n                        .addClass( 'slick-lazyload-error' );\n\n                    _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\n\n                    _.progressiveLazyLoad();\n\n                }\n\n            };\n\n            imageToLoad.src = imageSource;\n\n        } else {\n\n            _.$slider.trigger('allImagesLoaded', [ _ ]);\n\n        }\n\n    };\n\n    Slick.prototype.refresh = function( initializing ) {\n\n        var _ = this, currentSlide, lastVisibleIndex;\n\n        lastVisibleIndex = _.slideCount - _.options.slidesToShow;\n\n        // in non-infinite sliders, we don't want to go past the\n        // last visible index.\n        if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\n            _.currentSlide = lastVisibleIndex;\n        }\n\n        // if less slides than to show, go to start.\n        if ( _.slideCount <= _.options.slidesToShow ) {\n            _.currentSlide = 0;\n\n        }\n\n        currentSlide = _.currentSlide;\n\n        _.destroy(true);\n\n        $.extend(_, _.initials, { currentSlide: currentSlide });\n\n        _.init();\n\n        if( !initializing ) {\n\n            _.changeSlide({\n                data: {\n                    message: 'index',\n                    index: currentSlide\n                }\n            }, false);\n\n        }\n\n    };\n\n    Slick.prototype.registerBreakpoints = function() {\n\n        var _ = this, breakpoint, currentBreakpoint, l,\n            responsiveSettings = _.options.responsive || null;\n\n        if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\n\n            _.respondTo = _.options.respondTo || 'window';\n\n            for ( breakpoint in responsiveSettings ) {\n\n                l = _.breakpoints.length-1;\n                currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\n\n                if (responsiveSettings.hasOwnProperty(breakpoint)) {\n\n                    // loop through the breakpoints and cut out any existing\n                    // ones with the same breakpoint number, we don't want dupes.\n                    while( l >= 0 ) {\n                        if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\n                            _.breakpoints.splice(l,1);\n                        }\n                        l--;\n                    }\n\n                    _.breakpoints.push(currentBreakpoint);\n                    _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n\n                }\n\n            }\n\n            _.breakpoints.sort(function(a, b) {\n                return ( _.options.mobileFirst ) ? a-b : b-a;\n            });\n\n        }\n\n    };\n\n    Slick.prototype.reinit = function() {\n\n        var _ = this;\n\n        _.$slides =\n            _.$slideTrack\n                .children(_.options.slide)\n                .addClass('slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n            _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.currentSlide = 0;\n        }\n\n        _.registerBreakpoints();\n\n        _.setProps();\n        _.setupInfinite();\n        _.buildArrows();\n        _.updateArrows();\n        _.initArrowEvents();\n        _.buildDots();\n        _.updateDots();\n        _.initDotEvents();\n        _.cleanUpSlideEvents();\n        _.initSlideEvents();\n\n        _.checkResponsive(false, true);\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n        _.setPosition();\n        _.focusHandler();\n\n        _.paused = !_.options.autoplay;\n        _.autoPlay();\n\n        _.$slider.trigger('reInit', [_]);\n\n    };\n\n    Slick.prototype.resize = function() {\n\n        var _ = this;\n\n        if ($(window).width() !== _.windowWidth) {\n            clearTimeout(_.windowDelay);\n            _.windowDelay = window.setTimeout(function() {\n                _.windowWidth = $(window).width();\n                _.checkResponsive();\n                if( !_.unslicked ) { _.setPosition(); }\n            }, 50);\n        }\n    };\n\n    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            removeBefore = index;\n            index = removeBefore === true ? 0 : _.slideCount - 1;\n        } else {\n            index = removeBefore === true ? --index : index;\n        }\n\n        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n            return false;\n        }\n\n        _.unload();\n\n        if (removeAll === true) {\n            _.$slideTrack.children().remove();\n        } else {\n            _.$slideTrack.children(this.options.slide).eq(index).remove();\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.setCSS = function(position) {\n\n        var _ = this,\n            positionProps = {},\n            x, y;\n\n        if (_.options.rtl === true) {\n            position = -position;\n        }\n        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n        positionProps[_.positionProp] = position;\n\n        if (_.transformsEnabled === false) {\n            _.$slideTrack.css(positionProps);\n        } else {\n            positionProps = {};\n            if (_.cssTransitions === false) {\n                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n                _.$slideTrack.css(positionProps);\n            } else {\n                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n                _.$slideTrack.css(positionProps);\n            }\n        }\n\n    };\n\n    Slick.prototype.setDimensions = function() {\n\n        var _ = this;\n\n        if (_.options.vertical === false) {\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: ('0px ' + _.options.centerPadding)\n                });\n            }\n        } else {\n            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: (_.options.centerPadding + ' 0px')\n                });\n            }\n        }\n\n        _.listWidth = _.$list.width();\n        _.listHeight = _.$list.height();\n\n\n        if (_.options.vertical === false && _.options.variableWidth === false) {\n            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n        } else if (_.options.variableWidth === true) {\n            _.$slideTrack.width(5000 * _.slideCount);\n        } else {\n            _.slideWidth = Math.ceil(_.listWidth);\n            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n        }\n\n        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n    };\n\n    Slick.prototype.setFade = function() {\n\n        var _ = this,\n            targetLeft;\n\n        _.$slides.each(function(index, element) {\n            targetLeft = (_.slideWidth * index) * -1;\n            if (_.options.rtl === true) {\n                $(element).css({\n                    position: 'relative',\n                    right: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            } else {\n                $(element).css({\n                    position: 'relative',\n                    left: targetLeft,\n                    top: 0,\n                    zIndex: _.options.zIndex - 2,\n                    opacity: 0\n                });\n            }\n        });\n\n        _.$slides.eq(_.currentSlide).css({\n            zIndex: _.options.zIndex - 1,\n            opacity: 1\n        });\n\n    };\n\n    Slick.prototype.setHeight = function() {\n\n        var _ = this;\n\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.css('height', targetHeight);\n        }\n\n    };\n\n    Slick.prototype.setOption =\n    Slick.prototype.slickSetOption = function() {\n\n        /**\n         * accepts arguments in format of:\n         *\n         *  - for changing a single option's value:\n         *     .slick(\"setOption\", option, value, refresh )\n         *\n         *  - for changing a set of responsive options:\n         *     .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n         *\n         *  - for updating multiple values at once (not responsive)\n         *     .slick(\"setOption\", { 'option': value, ... }, refresh )\n         */\n\n        var _ = this, l, item, option, value, refresh = false, type;\n\n        if( $.type( arguments[0] ) === 'object' ) {\n\n            option =  arguments[0];\n            refresh = arguments[1];\n            type = 'multiple';\n\n        } else if ( $.type( arguments[0] ) === 'string' ) {\n\n            option =  arguments[0];\n            value = arguments[1];\n            refresh = arguments[2];\n\n            if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\n\n                type = 'responsive';\n\n            } else if ( typeof arguments[1] !== 'undefined' ) {\n\n                type = 'single';\n\n            }\n\n        }\n\n        if ( type === 'single' ) {\n\n            _.options[option] = value;\n\n\n        } else if ( type === 'multiple' ) {\n\n            $.each( option , function( opt, val ) {\n\n                _.options[opt] = val;\n\n            });\n\n\n        } else if ( type === 'responsive' ) {\n\n            for ( item in value ) {\n\n                if( $.type( _.options.responsive ) !== 'array' ) {\n\n                    _.options.responsive = [ value[item] ];\n\n                } else {\n\n                    l = _.options.responsive.length-1;\n\n                    // loop through the responsive object and splice out duplicates.\n                    while( l >= 0 ) {\n\n                        if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\n\n                            _.options.responsive.splice(l,1);\n\n                        }\n\n                        l--;\n\n                    }\n\n                    _.options.responsive.push( value[item] );\n\n                }\n\n            }\n\n        }\n\n        if ( refresh ) {\n\n            _.unload();\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.setPosition = function() {\n\n        var _ = this;\n\n        _.setDimensions();\n\n        _.setHeight();\n\n        if (_.options.fade === false) {\n            _.setCSS(_.getLeft(_.currentSlide));\n        } else {\n            _.setFade();\n        }\n\n        _.$slider.trigger('setPosition', [_]);\n\n    };\n\n    Slick.prototype.setProps = function() {\n\n        var _ = this,\n            bodyStyle = document.body.style;\n\n        _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n        if (_.positionProp === 'top') {\n            _.$slider.addClass('slick-vertical');\n        } else {\n            _.$slider.removeClass('slick-vertical');\n        }\n\n        if (bodyStyle.WebkitTransition !== undefined ||\n            bodyStyle.MozTransition !== undefined ||\n            bodyStyle.msTransition !== undefined) {\n            if (_.options.useCSS === true) {\n                _.cssTransitions = true;\n            }\n        }\n\n        if ( _.options.fade ) {\n            if ( typeof _.options.zIndex === 'number' ) {\n                if( _.options.zIndex < 3 ) {\n                    _.options.zIndex = 3;\n                }\n            } else {\n                _.options.zIndex = _.defaults.zIndex;\n            }\n        }\n\n        if (bodyStyle.OTransform !== undefined) {\n            _.animType = 'OTransform';\n            _.transformType = '-o-transform';\n            _.transitionType = 'OTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.MozTransform !== undefined) {\n            _.animType = 'MozTransform';\n            _.transformType = '-moz-transform';\n            _.transitionType = 'MozTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.webkitTransform !== undefined) {\n            _.animType = 'webkitTransform';\n            _.transformType = '-webkit-transform';\n            _.transitionType = 'webkitTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.msTransform !== undefined) {\n            _.animType = 'msTransform';\n            _.transformType = '-ms-transform';\n            _.transitionType = 'msTransition';\n            if (bodyStyle.msTransform === undefined) _.animType = false;\n        }\n        if (bodyStyle.transform !== undefined && _.animType !== false) {\n            _.animType = 'transform';\n            _.transformType = 'transform';\n            _.transitionType = 'transition';\n        }\n        _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\n    };\n\n\n    Slick.prototype.setSlideClasses = function(index) {\n\n        var _ = this,\n            centerOffset, allSlides, indexOffset, remainder;\n\n        allSlides = _.$slider\n            .find('.slick-slide')\n            .removeClass('slick-active slick-center slick-current')\n            .attr('aria-hidden', 'true');\n\n        _.$slides\n            .eq(index)\n            .addClass('slick-current');\n\n        if (_.options.centerMode === true) {\n\n            centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n            if (_.options.infinite === true) {\n\n                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n\n                    _.$slides\n                        .slice(index - centerOffset, index + centerOffset + 1)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    indexOffset = _.options.slidesToShow + index;\n                    allSlides\n                        .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n                if (index === 0) {\n\n                    allSlides\n                        .eq(allSlides.length - 1 - _.options.slidesToShow)\n                        .addClass('slick-center');\n\n                } else if (index === _.slideCount - 1) {\n\n                    allSlides\n                        .eq(_.options.slidesToShow)\n                        .addClass('slick-center');\n\n                }\n\n            }\n\n            _.$slides\n                .eq(index)\n                .addClass('slick-center');\n\n        } else {\n\n            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n\n                _.$slides\n                    .slice(index, index + _.options.slidesToShow)\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else if (allSlides.length <= _.options.slidesToShow) {\n\n                allSlides\n                    .addClass('slick-active')\n                    .attr('aria-hidden', 'false');\n\n            } else {\n\n                remainder = _.slideCount % _.options.slidesToShow;\n                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n\n                    allSlides\n                        .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                } else {\n\n                    allSlides\n                        .slice(indexOffset, indexOffset + _.options.slidesToShow)\n                        .addClass('slick-active')\n                        .attr('aria-hidden', 'false');\n\n                }\n\n            }\n\n        }\n\n        if (_.options.lazyLoad === 'ondemand') {\n            _.lazyLoad();\n        }\n\n    };\n\n    Slick.prototype.setupInfinite = function() {\n\n        var _ = this,\n            i, slideIndex, infiniteCount;\n\n        if (_.options.fade === true) {\n            _.options.centerMode = false;\n        }\n\n        if (_.options.infinite === true && _.options.fade === false) {\n\n            slideIndex = null;\n\n            if (_.slideCount > _.options.slidesToShow) {\n\n                if (_.options.centerMode === true) {\n                    infiniteCount = _.options.slidesToShow + 1;\n                } else {\n                    infiniteCount = _.options.slidesToShow;\n                }\n\n                for (i = _.slideCount; i > (_.slideCount -\n                        infiniteCount); i -= 1) {\n                    slideIndex = i - 1;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex - _.slideCount)\n                        .prependTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                for (i = 0; i < infiniteCount; i += 1) {\n                    slideIndex = i;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex + _.slideCount)\n                        .appendTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n                    $(this).attr('id', '');\n                });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.interrupt = function( toggle ) {\n\n        var _ = this;\n\n        if( !toggle ) {\n            _.autoPlay();\n        }\n        _.interrupted = toggle;\n\n    };\n\n    Slick.prototype.selectHandler = function(event) {\n\n        var _ = this;\n\n        var targetElement =\n            $(event.target).is('.slick-slide') ?\n                $(event.target) :\n                $(event.target).parents('.slick-slide');\n\n        var index = parseInt(targetElement.attr('data-slick-index'));\n\n        if (!index) index = 0;\n\n        if (_.slideCount <= _.options.slidesToShow) {\n\n            _.setSlideClasses(index);\n            _.asNavFor(index);\n            return;\n\n        }\n\n        _.slideHandler(index);\n\n    };\n\n    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n            _ = this, navTarget;\n\n        sync = sync || false;\n\n        if (_.animating === true && _.options.waitForAnimate === true) {\n            return;\n        }\n\n        if (_.options.fade === true && _.currentSlide === index) {\n            return;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            return;\n        }\n\n        if (sync === false) {\n            _.asNavFor(index);\n        }\n\n        targetSlide = index;\n        targetLeft = _.getLeft(targetSlide);\n        slideLeft = _.getLeft(_.currentSlide);\n\n        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        }\n\n        if ( _.options.autoplay ) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (targetSlide < 0) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n            } else {\n                animSlide = _.slideCount + targetSlide;\n            }\n        } else if (targetSlide >= _.slideCount) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = 0;\n            } else {\n                animSlide = targetSlide - _.slideCount;\n            }\n        } else {\n            animSlide = targetSlide;\n        }\n\n        _.animating = true;\n\n        _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n        oldSlide = _.currentSlide;\n        _.currentSlide = animSlide;\n\n        _.setSlideClasses(_.currentSlide);\n\n        if ( _.options.asNavFor ) {\n\n            navTarget = _.getNavTarget();\n            navTarget = navTarget.slick('getSlick');\n\n            if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\n                navTarget.setSlideClasses(_.currentSlide);\n            }\n\n        }\n\n        _.updateDots();\n        _.updateArrows();\n\n        if (_.options.fade === true) {\n            if (dontAnimate !== true) {\n\n                _.fadeSlideOut(oldSlide);\n\n                _.fadeSlide(animSlide, function() {\n                    _.postSlide(animSlide);\n                });\n\n            } else {\n                _.postSlide(animSlide);\n            }\n            _.animateHeight();\n            return;\n        }\n\n        if (dontAnimate !== true) {\n            _.animateSlide(targetLeft, function() {\n                _.postSlide(animSlide);\n            });\n        } else {\n            _.postSlide(animSlide);\n        }\n\n    };\n\n    Slick.prototype.startLoad = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.hide();\n            _.$nextArrow.hide();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.hide();\n\n        }\n\n        _.$slider.addClass('slick-loading');\n\n    };\n\n    Slick.prototype.swipeDirection = function() {\n\n        var xDist, yDist, r, swipeAngle, _ = this;\n\n        xDist = _.touchObject.startX - _.touchObject.curX;\n        yDist = _.touchObject.startY - _.touchObject.curY;\n        r = Math.atan2(yDist, xDist);\n\n        swipeAngle = Math.round(r * 180 / Math.PI);\n        if (swipeAngle < 0) {\n            swipeAngle = 360 - Math.abs(swipeAngle);\n        }\n\n        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n            return (_.options.rtl === false ? 'right' : 'left');\n        }\n        if (_.options.verticalSwiping === true) {\n            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n                return 'down';\n            } else {\n                return 'up';\n            }\n        }\n\n        return 'vertical';\n\n    };\n\n    Slick.prototype.swipeEnd = function(event) {\n\n        var _ = this,\n            slideCount,\n            direction;\n\n        _.dragging = false;\n        _.interrupted = false;\n        _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\n\n        if ( _.touchObject.curX === undefined ) {\n            return false;\n        }\n\n        if ( _.touchObject.edgeHit === true ) {\n            _.$slider.trigger('edge', [_, _.swipeDirection() ]);\n        }\n\n        if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\n\n            direction = _.swipeDirection();\n\n            switch ( direction ) {\n\n                case 'left':\n                case 'down':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\n                            _.currentSlide + _.getSlideCount();\n\n                    _.currentDirection = 0;\n\n                    break;\n\n                case 'right':\n                case 'up':\n\n                    slideCount =\n                        _.options.swipeToSlide ?\n                            _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\n                            _.currentSlide - _.getSlideCount();\n\n                    _.currentDirection = 1;\n\n                    break;\n\n                default:\n\n\n            }\n\n            if( direction != 'vertical' ) {\n\n                _.slideHandler( slideCount );\n                _.touchObject = {};\n                _.$slider.trigger('swipe', [_, direction ]);\n\n            }\n\n        } else {\n\n            if ( _.touchObject.startX !== _.touchObject.curX ) {\n\n                _.slideHandler( _.currentSlide );\n                _.touchObject = {};\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.swipeHandler = function(event) {\n\n        var _ = this;\n\n        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n            return;\n        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n            return;\n        }\n\n        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n            event.originalEvent.touches.length : 1;\n\n        _.touchObject.minSwipe = _.listWidth / _.options\n            .touchThreshold;\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.minSwipe = _.listHeight / _.options\n                .touchThreshold;\n        }\n\n        switch (event.data.action) {\n\n            case 'start':\n                _.swipeStart(event);\n                break;\n\n            case 'move':\n                _.swipeMove(event);\n                break;\n\n            case 'end':\n                _.swipeEnd(event);\n                break;\n\n        }\n\n    };\n\n    Slick.prototype.swipeMove = function(event) {\n\n        var _ = this,\n            edgeWasHit = false,\n            curLeft, swipeDirection, swipeLength, positionOffset, touches;\n\n        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n        if (!_.dragging || touches && touches.length !== 1) {\n            return false;\n        }\n\n        curLeft = _.getLeft(_.currentSlide);\n\n        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n        _.touchObject.swipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.swipeLength = Math.round(Math.sqrt(\n                Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n        }\n\n        swipeDirection = _.swipeDirection();\n\n        if (swipeDirection === 'vertical') {\n            return;\n        }\n\n        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n            event.preventDefault();\n        }\n\n        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n        if (_.options.verticalSwiping === true) {\n            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n        }\n\n\n        swipeLength = _.touchObject.swipeLength;\n\n        _.touchObject.edgeHit = false;\n\n        if (_.options.infinite === false) {\n            if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\n                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n                _.touchObject.edgeHit = true;\n            }\n        }\n\n        if (_.options.vertical === false) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        } else {\n            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n        }\n        if (_.options.verticalSwiping === true) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        }\n\n        if (_.options.fade === true || _.options.touchMove === false) {\n            return false;\n        }\n\n        if (_.animating === true) {\n            _.swipeLeft = null;\n            return false;\n        }\n\n        _.setCSS(_.swipeLeft);\n\n    };\n\n    Slick.prototype.swipeStart = function(event) {\n\n        var _ = this,\n            touches;\n\n        _.interrupted = true;\n\n        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n            _.touchObject = {};\n            return false;\n        }\n\n        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n            touches = event.originalEvent.touches[0];\n        }\n\n        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n        _.dragging = true;\n\n    };\n\n    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n        var _ = this;\n\n        if (_.$slidesCache !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.unload = function() {\n\n        var _ = this;\n\n        $('.slick-cloned', _.$slider).remove();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n\n        if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n            _.$prevArrow.remove();\n        }\n\n        if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n            _.$nextArrow.remove();\n        }\n\n        _.$slides\n            .removeClass('slick-slide slick-active slick-visible slick-current')\n            .attr('aria-hidden', 'true')\n            .css('width', '');\n\n    };\n\n    Slick.prototype.unslick = function(fromBreakpoint) {\n\n        var _ = this;\n        _.$slider.trigger('unslick', [_, fromBreakpoint]);\n        _.destroy();\n\n    };\n\n    Slick.prototype.updateArrows = function() {\n\n        var _ = this,\n            centerOffset;\n\n        centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n        if ( _.options.arrows === true &&\n            _.slideCount > _.options.slidesToShow &&\n            !_.options.infinite ) {\n\n            _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n            _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            if (_.currentSlide === 0) {\n\n                _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n\n                _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n                _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.updateDots = function() {\n\n        var _ = this;\n\n        if (_.$dots !== null) {\n\n            _.$dots\n                .find('li')\n                .removeClass('slick-active')\n                .attr('aria-hidden', 'true');\n\n            _.$dots\n                .find('li')\n                .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\n                .addClass('slick-active')\n                .attr('aria-hidden', 'false');\n\n        }\n\n    };\n\n    Slick.prototype.visibility = function() {\n\n        var _ = this;\n\n        if ( _.options.autoplay ) {\n\n            if ( document[_.hidden] ) {\n\n                _.interrupted = true;\n\n            } else {\n\n                _.interrupted = false;\n\n            }\n\n        }\n\n    };\n\n    $.fn.slick = function() {\n        var _ = this,\n            opt = arguments[0],\n            args = Array.prototype.slice.call(arguments, 1),\n            l = _.length,\n            i,\n            ret;\n        for (i = 0; i < l; i++) {\n            if (typeof opt == 'object' || typeof opt == 'undefined')\n                _[i].slick = new Slick(_[i], opt);\n            else\n                ret = _[i].slick[opt].apply(_[i].slick, args);\n            if (typeof ret != 'undefined') return ret;\n        }\n        return _;\n    };\n\n}));\n","/*!\n * smartbanner.js v1.19.0 <https://github.com/ain/smartbanner.js#readme>\n * Copyright © 2022 Ain Tohvri, contributors. Licensed under GPL-3.0.\n */\n(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);Object.defineProperty(Constructor,\"prototype\",{writable:false});return Constructor}var Bakery=function(){function Bakery(){_classCallCheck(this,Bakery)}_createClass(Bakery,null,[{key:\"getCookieExpiresString\",value:function getCookieExpiresString(hideTtl){var now=new Date;var expireTime=new Date(now.getTime()+hideTtl);return\"expires=\".concat(expireTime.toGMTString(),\";\")}},{key:\"bake\",value:function bake(hideTtl,hidePath){document.cookie=\"smartbanner_exited=1; \".concat(hideTtl?Bakery.getCookieExpiresString(hideTtl):\"\",\" path=\").concat(hidePath)}},{key:\"unbake\",value:function unbake(){document.cookie=\"smartbanner_exited=; expires=Thu, 01 Jan 1970 00:00:01 GMT;\"}},{key:\"baked\",get:function get(){var value=document.cookie.replace(/(?:(?:^|.*;\\s*)smartbanner_exited\\s*=\\s*([^;]*).*$)|^.*$/,\"$1\");return value===\"1\"}}]);return Bakery}();exports[\"default\"]=Bakery},{}],2:[function(require,module,exports){(function(global){(function(){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);Object.defineProperty(Constructor,\"prototype\",{writable:false});return Constructor}var Detector=function(){function Detector(){_classCallCheck(this,Detector)}_createClass(Detector,null,[{key:\"platform\",value:function platform(){var maxTouchPoints=window.navigator.maxTouchPoints;var userAgent=window.navigator.userAgent;if(/Android/i.test(userAgent)){return\"android\"}else if(maxTouchPoints&&maxTouchPoints>0||/iPhone|iPad|iPod/i.test(userAgent)){return\"ios\"}}},{key:\"userAgentMatchesRegex\",value:function userAgentMatchesRegex(regexString){return new RegExp(regexString).test(window.navigator.userAgent)}},{key:\"jQueryMobilePage\",value:function jQueryMobilePage(){return typeof global.$!==\"undefined\"&&global.$.mobile!==\"undefined\"&&document.querySelector(\".ui-page\")!==null}},{key:\"wrapperElement\",value:function wrapperElement(){var selector=Detector.jQueryMobilePage()?\".ui-page\":\"html\";return document.querySelectorAll(selector)}}]);return Detector}();exports[\"default\"]=Detector}).call(this)}).call(this,typeof global!==\"undefined\"?global:typeof self!==\"undefined\"?self:typeof window!==\"undefined\"?window:{})},{}],3:[function(require,module,exports){\"use strict\";var _smartbanner=_interopRequireDefault(require(\"./smartbanner.js\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var smartbanner;window.addEventListener(\"load\",function(){smartbanner=new _smartbanner[\"default\"];if(smartbanner.apiEnabled){window.smartbanner=smartbanner}else{smartbanner.publish()}})},{\"./smartbanner.js\":5}],4:[function(require,module,exports){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);Object.defineProperty(Constructor,\"prototype\",{writable:false});return Constructor}function valid(name){return name.indexOf(\"smartbanner:\")!==-1&&name.split(\":\")[1].length>0}function convertToCamelCase(name){var parts=name.split(\"-\");parts.map(function(part,index){if(index>0){parts[index]=part.charAt(0).toUpperCase()+part.substring(1)}});return parts.join(\"\")}var OptionParser=function(){function OptionParser(){_classCallCheck(this,OptionParser)}_createClass(OptionParser,[{key:\"parse\",value:function parse(){var metas=document.getElementsByTagName(\"meta\");var options={};Array.apply(null,metas).forEach(function(meta){var optionName=null;var name=meta.getAttribute(\"name\");var content=meta.getAttribute(\"content\");if(name&&content&&valid(name)&&content.length>0){optionName=name.split(\":\")[1];if(optionName.indexOf(\"-\")!==-1){optionName=convertToCamelCase(optionName)}options[optionName]=content}});return options}}]);return OptionParser}();exports[\"default\"]=OptionParser},{}],5:[function(require,module,exports){\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports[\"default\"]=void 0;var _optionparser=_interopRequireDefault(require(\"./optionparser.js\"));var _detector=_interopRequireDefault(require(\"./detector.js\"));var _bakery=_interopRequireDefault(require(\"./bakery.js\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);Object.defineProperty(Constructor,\"prototype\",{writable:false});return Constructor}var DEFAULT_PLATFORMS=\"android,ios\";var DEFAULT_CLOSE_LABEL=\"Close\";var datas={originalTop:\"data-smartbanner-original-top\",originalMarginTop:\"data-smartbanner-original-margin-top\"};function handleExitClick(event,self){self.exit();event.preventDefault()}function handleClickout(event,self){self.clickout()}function handleJQueryMobilePageLoad(event){if(!this.positioningDisabled){setContentPosition(event.data.height)}}function addEventListeners(self){var closeIcon=document.querySelector(\".js_smartbanner__exit\");closeIcon.addEventListener(\"click\",function(event){return handleExitClick(event,self)});var button=document.querySelector(\".js_smartbanner__button\");button.addEventListener(\"click\",function(event){return handleClickout(event,self)});if(_detector[\"default\"].jQueryMobilePage()){$(document).on(\"pagebeforeshow\",self,handleJQueryMobilePageLoad)}}function removeEventListeners(){if(_detector[\"default\"].jQueryMobilePage()){$(document).off(\"pagebeforeshow\",handleJQueryMobilePageLoad)}}function setContentPosition(value){var wrappers=_detector[\"default\"].wrapperElement();for(var i=0,l=wrappers.length,wrapper;i<l;i++){wrapper=wrappers[i];if(_detector[\"default\"].jQueryMobilePage()){if(wrapper.getAttribute(datas.originalTop)){continue}var top=parseFloat(getComputedStyle(wrapper).top);wrapper.setAttribute(datas.originalTop,isNaN(top)?0:top);wrapper.style.top=value+\"px\"}else{if(wrapper.getAttribute(datas.originalMarginTop)){continue}var margin=parseFloat(getComputedStyle(wrapper).marginTop);wrapper.setAttribute(datas.originalMarginTop,isNaN(margin)?0:margin);wrapper.style.marginTop=value+\"px\"}}}function restoreContentPosition(){var wrappers=_detector[\"default\"].wrapperElement();for(var i=0,l=wrappers.length,wrapper;i<l;i++){wrapper=wrappers[i];if(_detector[\"default\"].jQueryMobilePage()&&wrapper.getAttribute(datas.originalTop)){wrapper.style.top=wrapper.getAttribute(datas.originalTop)+\"px\"}else if(wrapper.getAttribute(datas.originalMarginTop)){wrapper.style.marginTop=wrapper.getAttribute(datas.originalMarginTop)+\"px\"}}}var SmartBanner=function(){function SmartBanner(){_classCallCheck(this,SmartBanner);var parser=new _optionparser[\"default\"];this.options=parser.parse();this.platform=_detector[\"default\"].platform();var event=new Event(\"smartbanner.init\");document.dispatchEvent(event)}_createClass(SmartBanner,[{key:\"originalTop\",get:function get(){var wrapper=_detector[\"default\"].wrapperElement()[0];return parseFloat(wrapper.getAttribute(datas.originalTop))}},{key:\"originalTopMargin\",get:function get(){var wrapper=_detector[\"default\"].wrapperElement()[0];return parseFloat(wrapper.getAttribute(datas.originalMarginTop))}},{key:\"priceSuffix\",get:function get(){if(this.platform===\"ios\"){return this.options.priceSuffixApple}else if(this.platform===\"android\"){return this.options.priceSuffixGoogle}return\"\"}},{key:\"icon\",get:function get(){if(this.platform===\"android\"){return this.options.iconGoogle}else{return this.options.iconApple}}},{key:\"buttonUrl\",get:function get(){if(this.platform===\"android\"){return this.options.buttonUrlGoogle}else if(this.platform===\"ios\"){return this.options.buttonUrlApple}return\"#\"}},{key:\"closeLabel\",get:function get(){return this.options.closeLabel!==undefined?this.options.closeLabel:DEFAULT_CLOSE_LABEL}},{key:\"html\",get:function get(){var modifier=!this.options.customDesignModifier?this.platform:this.options.customDesignModifier;return'<div class=\"smartbanner smartbanner--'.concat(modifier,' js_smartbanner\">\\n      <a href=\"javascript:void();\" class=\"smartbanner__exit js_smartbanner__exit\" aria-label=\"').concat(this.closeLabel,'\"></a>\\n      <div class=\"smartbanner__icon\" style=\"background-image: url(').concat(this.icon,');\"></div>\\n      <div class=\"smartbanner__info\">\\n        <div>\\n          <div class=\"smartbanner__info__title\">').concat(this.options.title,'</div>\\n          <div class=\"smartbanner__info__author\">').concat(this.options.author,'</div>\\n          <div class=\"smartbanner__info__price\">').concat(this.options.price).concat(this.priceSuffix,'</div>\\n        </div>\\n      </div>\\n      <a href=\"').concat(this.buttonUrl,'\" target=\"_blank\" class=\"smartbanner__button js_smartbanner__button\" rel=\"noopener\" aria-label=\"').concat(this.options.button,'\"><span class=\"smartbanner__button__label\">').concat(this.options.button,\"</span></a>\\n    </div>\")}},{key:\"height\",get:function get(){try{return document.querySelector(\".js_smartbanner\").offsetHeight}catch(error){return 0}}},{key:\"platformEnabled\",get:function get(){var enabledPlatforms=this.options.enabledPlatforms||DEFAULT_PLATFORMS;return enabledPlatforms&&enabledPlatforms.replace(/\\s+/g,\"\").split(\",\").indexOf(this.platform)!==-1}},{key:\"positioningDisabled\",get:function get(){return this.options.disablePositioning===\"true\"}},{key:\"apiEnabled\",get:function get(){return this.options.api===\"true\"}},{key:\"userAgentExcluded\",get:function get(){if(!this.options.excludeUserAgentRegex){return false}return _detector[\"default\"].userAgentMatchesRegex(this.options.excludeUserAgentRegex)}},{key:\"userAgentIncluded\",get:function get(){if(!this.options.includeUserAgentRegex){return false}return _detector[\"default\"].userAgentMatchesRegex(this.options.includeUserAgentRegex)}},{key:\"hideTtl\",get:function get(){return this.options.hideTtl?parseInt(this.options.hideTtl):false}},{key:\"hidePath\",get:function get(){return this.options.hidePath?this.options.hidePath:\"/\"}},{key:\"publish\",value:function publish(){if(Object.keys(this.options).length===0){throw new Error(\"No options detected. Please consult documentation.\")}if(_bakery[\"default\"].baked){return false}if(this.userAgentExcluded){return false}if(!(this.platformEnabled||this.userAgentIncluded)){return false}var bannerDiv=document.createElement(\"div\");document.querySelector(\"body\").appendChild(bannerDiv);bannerDiv.outerHTML=this.html;var event=new Event(\"smartbanner.view\");document.dispatchEvent(event);if(!this.positioningDisabled){setContentPosition(this.height)}addEventListeners(this)}},{key:\"exit\",value:function exit(){removeEventListeners();if(!this.positioningDisabled){restoreContentPosition()}var banner=document.querySelector(\".js_smartbanner\");document.querySelector(\"body\").removeChild(banner);var event=new Event(\"smartbanner.exit\");document.dispatchEvent(event);_bakery[\"default\"].bake(this.hideTtl,this.hidePath)}},{key:\"clickout\",value:function clickout(){var event=new Event(\"smartbanner.clickout\");document.dispatchEvent(event)}}]);return SmartBanner}();exports[\"default\"]=SmartBanner},{\"./bakery.js\":1,\"./detector.js\":2,\"./optionparser.js\":4}]},{},[3]);","/*\n * Toastr\n * Copyright 2012-2015\n * Authors: John Papa, Hans Fjällemark, and Tim Ferrell.\n * All Rights Reserved.\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\n * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php\n *\n * ARIA Support: Greta Krafsig\n *\n * Project: https://github.com/CodeSeven/toastr\n */\n/* global define */\n(function (define) {\n    define(['jquery'], function ($) {\n        return (function () {\n            var $container;\n            var listener;\n            var toastId = 0;\n            var toastType = {\n                error: 'error',\n                info: 'info',\n                success: 'success',\n                warning: 'warning'\n            };\n\n            var toastr = {\n                clear: clear,\n                remove: remove,\n                error: error,\n                getContainer: getContainer,\n                info: info,\n                options: {},\n                subscribe: subscribe,\n                success: success,\n                version: '2.1.4',\n                warning: warning\n            };\n\n            var previousToast;\n\n            return toastr;\n\n            ////////////////\n\n            function error(message, title, optionsOverride) {\n                return notify({\n                    type: toastType.error,\n                    iconClass: getOptions().iconClasses.error,\n                    message: message,\n                    optionsOverride: optionsOverride,\n                    title: title\n                });\n            }\n\n            function getContainer(options, create) {\n                if (!options) { options = getOptions(); }\n                $container = $('#' + options.containerId);\n                if ($container.length) {\n                    return $container;\n                }\n                if (create) {\n                    $container = createContainer(options);\n                }\n                return $container;\n            }\n\n            function info(message, title, optionsOverride) {\n                return notify({\n                    type: toastType.info,\n                    iconClass: getOptions().iconClasses.info,\n                    message: message,\n                    optionsOverride: optionsOverride,\n                    title: title\n                });\n            }\n\n            function subscribe(callback) {\n                listener = callback;\n            }\n\n            function success(message, title, optionsOverride) {\n                return notify({\n                    type: toastType.success,\n                    iconClass: getOptions().iconClasses.success,\n                    message: message,\n                    optionsOverride: optionsOverride,\n                    title: title\n                });\n            }\n\n            function warning(message, title, optionsOverride) {\n                return notify({\n                    type: toastType.warning,\n                    iconClass: getOptions().iconClasses.warning,\n                    message: message,\n                    optionsOverride: optionsOverride,\n                    title: title\n                });\n            }\n\n            function clear($toastElement, clearOptions) {\n                var options = getOptions();\n                if (!$container) { getContainer(options); }\n                if (!clearToast($toastElement, options, clearOptions)) {\n                    clearContainer(options);\n                }\n            }\n\n            function remove($toastElement) {\n                var options = getOptions();\n                if (!$container) { getContainer(options); }\n                if ($toastElement && $(':focus', $toastElement).length === 0) {\n                    removeToast($toastElement);\n                    return;\n                }\n                if ($container.children().length) {\n                    $container.remove();\n                }\n            }\n\n            // internal functions\n\n            function clearContainer (options) {\n                var toastsToClear = $container.children();\n                for (var i = toastsToClear.length - 1; i >= 0; i--) {\n                    clearToast($(toastsToClear[i]), options);\n                }\n            }\n\n            function clearToast ($toastElement, options, clearOptions) {\n                var force = clearOptions && clearOptions.force ? clearOptions.force : false;\n                if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {\n                    $toastElement[options.hideMethod]({\n                        duration: options.hideDuration,\n                        easing: options.hideEasing,\n                        complete: function () { removeToast($toastElement); }\n                    });\n                    return true;\n                }\n                return false;\n            }\n\n            function createContainer(options) {\n                $container = $('<div/>')\n                    .attr('id', options.containerId)\n                    .addClass(options.positionClass);\n\n                $container.appendTo($(options.target));\n                return $container;\n            }\n\n            function getDefaults() {\n                return {\n                    tapToDismiss: true,\n                    toastClass: 'toast',\n                    containerId: 'toast-container',\n                    debug: false,\n\n                    showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery\n                    showDuration: 300,\n                    showEasing: 'swing', //swing and linear are built into jQuery\n                    onShown: undefined,\n                    hideMethod: 'fadeOut',\n                    hideDuration: 1000,\n                    hideEasing: 'swing',\n                    onHidden: undefined,\n                    closeMethod: false,\n                    closeDuration: false,\n                    closeEasing: false,\n                    closeOnHover: true,\n\n                    extendedTimeOut: 1000,\n                    iconClasses: {\n                        error: 'toast-error',\n                        info: 'toast-info',\n                        success: 'toast-success',\n                        warning: 'toast-warning'\n                    },\n                    iconClass: 'toast-info',\n                    positionClass: 'toast-top-right',\n                    timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky\n                    titleClass: 'toast-title',\n                    messageClass: 'toast-message',\n                    escapeHtml: false,\n                    target: 'body',\n                    closeHtml: '<button type=\"button\">&times;</button>',\n                    closeClass: 'toast-close-button',\n                    newestOnTop: true,\n                    preventDuplicates: false,\n                    progressBar: false,\n                    progressClass: 'toast-progress',\n                    rtl: false\n                };\n            }\n\n            function publish(args) {\n                if (!listener) { return; }\n                listener(args);\n            }\n\n            function notify(map) {\n                var options = getOptions();\n                var iconClass = map.iconClass || options.iconClass;\n\n                if (typeof (map.optionsOverride) !== 'undefined') {\n                    options = $.extend(options, map.optionsOverride);\n                    iconClass = map.optionsOverride.iconClass || iconClass;\n                }\n\n                if (shouldExit(options, map)) { return; }\n\n                toastId++;\n\n                $container = getContainer(options, true);\n\n                var intervalId = null;\n                var $toastElement = $('<div/>');\n                var $titleElement = $('<div/>');\n                var $messageElement = $('<div/>');\n                var $progressElement = $('<div/>');\n                var $closeElement = $(options.closeHtml);\n                var progressBar = {\n                    intervalId: null,\n                    hideEta: null,\n                    maxHideTime: null\n                };\n                var response = {\n                    toastId: toastId,\n                    state: 'visible',\n                    startTime: new Date(),\n                    options: options,\n                    map: map\n                };\n\n                personalizeToast();\n\n                displayToast();\n\n                handleEvents();\n\n                publish(response);\n\n                if (options.debug && console) {\n                    console.log(response);\n                }\n\n                return $toastElement;\n\n                function escapeHtml(source) {\n                    if (source == null) {\n                        source = '';\n                    }\n\n                    return source\n                        .replace(/&/g, '&amp;')\n                        .replace(/\"/g, '&quot;')\n                        .replace(/'/g, '&#39;')\n                        .replace(/</g, '&lt;')\n                        .replace(/>/g, '&gt;');\n                }\n\n                function personalizeToast() {\n                    setIcon();\n                    setTitle();\n                    setMessage();\n                    setCloseButton();\n                    setProgressBar();\n                    setRTL();\n                    setSequence();\n                    setAria();\n                }\n\n                function setAria() {\n                    var ariaValue = '';\n                    switch (map.iconClass) {\n                        case 'toast-success':\n                        case 'toast-info':\n                            ariaValue =  'polite';\n                            break;\n                        default:\n                            ariaValue = 'assertive';\n                    }\n                    $toastElement.attr('aria-live', ariaValue);\n                }\n\n                function handleEvents() {\n                    if (options.closeOnHover) {\n                        $toastElement.hover(stickAround, delayedHideToast);\n                    }\n\n                    if (!options.onclick && options.tapToDismiss) {\n                        $toastElement.click(hideToast);\n                    }\n\n                    if (options.closeButton && $closeElement) {\n                        $closeElement.click(function (event) {\n                            if (event.stopPropagation) {\n                                event.stopPropagation();\n                            } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\n                                event.cancelBubble = true;\n                            }\n\n                            if (options.onCloseClick) {\n                                options.onCloseClick(event);\n                            }\n\n                            hideToast(true);\n                        });\n                    }\n\n                    if (options.onclick) {\n                        $toastElement.click(function (event) {\n                            options.onclick(event);\n                            hideToast();\n                        });\n                    }\n                }\n\n                function displayToast() {\n                    $toastElement.hide();\n\n                    $toastElement[options.showMethod](\n                        {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}\n                    );\n\n                    if (options.timeOut > 0) {\n                        intervalId = setTimeout(hideToast, options.timeOut);\n                        progressBar.maxHideTime = parseFloat(options.timeOut);\n                        progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n                        if (options.progressBar) {\n                            progressBar.intervalId = setInterval(updateProgress, 10);\n                        }\n                    }\n                }\n\n                function setIcon() {\n                    if (map.iconClass) {\n                        $toastElement.addClass(options.toastClass).addClass(iconClass);\n                    }\n                }\n\n                function setSequence() {\n                    if (options.newestOnTop) {\n                        $container.prepend($toastElement);\n                    } else {\n                        $container.append($toastElement);\n                    }\n                }\n\n                function setTitle() {\n                    if (map.title) {\n                        var suffix = map.title;\n                        if (options.escapeHtml) {\n                            suffix = escapeHtml(map.title);\n                        }\n                        $titleElement.append(suffix).addClass(options.titleClass);\n                        $toastElement.append($titleElement);\n                    }\n                }\n\n                function setMessage() {\n                    if (map.message) {\n                        var suffix = map.message;\n                        if (options.escapeHtml) {\n                            suffix = escapeHtml(map.message);\n                        }\n                        $messageElement.append(suffix).addClass(options.messageClass);\n                        $toastElement.append($messageElement);\n                    }\n                }\n\n                function setCloseButton() {\n                    if (options.closeButton) {\n                        $closeElement.addClass(options.closeClass).attr('role', 'button');\n                        $toastElement.prepend($closeElement);\n                    }\n                }\n\n                function setProgressBar() {\n                    if (options.progressBar) {\n                        $progressElement.addClass(options.progressClass);\n                        $toastElement.prepend($progressElement);\n                    }\n                }\n\n                function setRTL() {\n                    if (options.rtl) {\n                        $toastElement.addClass('rtl');\n                    }\n                }\n\n                function shouldExit(options, map) {\n                    if (options.preventDuplicates) {\n                        if (map.message === previousToast) {\n                            return true;\n                        } else {\n                            previousToast = map.message;\n                        }\n                    }\n                    return false;\n                }\n\n                function hideToast(override) {\n                    var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod;\n                    var duration = override && options.closeDuration !== false ?\n                        options.closeDuration : options.hideDuration;\n                    var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing;\n                    if ($(':focus', $toastElement).length && !override) {\n                        return;\n                    }\n                    clearTimeout(progressBar.intervalId);\n                    return $toastElement[method]({\n                        duration: duration,\n                        easing: easing,\n                        complete: function () {\n                            removeToast($toastElement);\n                            clearTimeout(intervalId);\n                            if (options.onHidden && response.state !== 'hidden') {\n                                options.onHidden();\n                            }\n                            response.state = 'hidden';\n                            response.endTime = new Date();\n                            publish(response);\n                        }\n                    });\n                }\n\n                function delayedHideToast() {\n                    if (options.timeOut > 0 || options.extendedTimeOut > 0) {\n                        intervalId = setTimeout(hideToast, options.extendedTimeOut);\n                        progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\n                        progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n                    }\n                }\n\n                function stickAround() {\n                    clearTimeout(intervalId);\n                    progressBar.hideEta = 0;\n                    $toastElement.stop(true, true)[options.showMethod](\n                        {duration: options.showDuration, easing: options.showEasing}\n                    );\n                }\n\n                function updateProgress() {\n                    var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;\n                    $progressElement.width(percentage + '%');\n                }\n            }\n\n            function getOptions() {\n                return $.extend({}, getDefaults(), toastr.options);\n            }\n\n            function removeToast($toastElement) {\n                if (!$container) { $container = getContainer(); }\n                if ($toastElement.is(':visible')) {\n                    return;\n                }\n                $toastElement.remove();\n                $toastElement = null;\n                if ($container.children().length === 0) {\n                    $container.remove();\n                    previousToast = undefined;\n                }\n            }\n\n        })();\n    });\n}(typeof define === 'function' && define.amd ? define : function (deps, factory) {\n    if (typeof module !== 'undefined' && module.exports) { //Node\n        module.exports = factory(require('jquery'));\n    } else {\n        window.toastr = factory(window.jQuery);\n    }\n}));\n","module.exports = jQuery;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/* eslint-disable max-len */\nexport const GAMES = {\n  CAR_PUZZLE: 'rush-hour-car-parking-puzzle'\n}\n\nexport const ENDPOINT = {\n  USER_PROFILE: '/api/user/profile/',\n  USER_RESET_PASSWORD: '/api/v2/user/password/',\n\n  BUY_SUBSCRIPTION_APP: '/api/braintree/buy-subscription-app/',\n  BUY_SUBSCRIPTION: '/api/braintree/buy-subscription/',\n  UPGRADE_SUBSCRIPTION: '/api/braintree/upgrade-subscription/',\n  COUPON_VALIDATE: '/api/braintree/coupon/validate/',\n  UPDATE_PAYMENT_METHOD: '/api/braintree/payment-method/',\n  BUY_PRODUCT: '/api/braintree/purchases/',\n  GET_BRAINTREE_TOKEN: '/api/braintree/get-token/',\n\n  GIFT_CODE_VALIDATE: '/api/gift/verify/',\n  GIFT_CODE_REDEEM: '/api/gift/redeem/',\n  GIFT_PURCHASE: '/api/gift/purchase/',\n\n  USER_LOGIN: '/api/v2/user/login/',\n  WAIT_LIST: '/api/v2/waitlist/',\n  SET_PASSWORD: '/api/v2/user/set-password/',\n\n  TEACHER_SIGN_UP: '/api/school/v2/teachers/',\n  KID_PROFILE_CREATE: '/api/school/v2/users/create/',\n\n  LMS_SUBSCRIPTION: '/api/lms/subscription/',\n  FEEDBACK: '/api/feedback/',\n  FEEDBACK_V2: '/api/v2/feedback/',\n  BLOG_LIKE: '/api/storytime/like/',\n  COMMENT: '/api/comment/',\n  WORKSHEET_RATING: '/api/worksheets/rating/',\n  QUIZ_RATING: '/api/v4/flashes/rating/',\n  INVOICE_PAYMENT: '/api/invoice-payment/',\n  GET_KIDS_REPORT_DATA: (offset) => `/api/v1/study-reports/kids/?tz_offset=${offset}`,\n  GET_KID_REPORT_DATA: (params, kidId) => `/api/v1/study-reports/kids/${kidId}/studying-time-spent/${params}`,\n  GET_COURSE_DETAILS: (courseId) => `/api/study/v3/course-detail/${courseId}/`,\n\n  MARK_AS_DONE: (id) => `/api/worksheets/${id}/accomplished/`,\n  ADD_TO_FAVORITE: (id) => `/api/worksheets/${id}/favorite/`,\n\n  CANCEL_SUBSCRIPTION: (merchant, id) => `/api/${window.merchant}/subscription/${id}/`,\n  NOTIFICATION_MARK_AS_READ: '/api/user-campaign-message/batch-mark-as-read/',\n  USER_SUBSCRIBE: '/api/user/subscribe/',\n  WORKSHEETS_PDF_STATUS: '/api/worksheets/pdf/',\n  WORKSHEET_CHECK_STATUS: '/api/worksheets/pdf/?commit=1',\n\n  // Skilled worksheets\n  GET_SKILLED_WORKSHEET: (id) => `/api/v1/skilled-worksheets/${id}/`,\n\n  // Classroom\n  CLASSROOM_JOIN: (id) => `/api/classrooms/${id}/members/`,\n  CLASSROOM_CODE_CHECK: '/api/classrooms/join/',\n  CLASSROOM_CREATE: '/api/classrooms/',\n  CLASSROOM_START: (id) => `/api/classrooms/${id}/start/`,\n  CLASSROOM_UPDATE: (id) => `/api/classrooms/${id}/`,\n  CLASSROOM_ADD_ACTIVITY: (classroomId) => `/api/classrooms/${classroomId}/activities/`,\n  WEBSITE_WORKSHEETS: '/api/study/v3/website-worksheets/?features=default,tf_regression,tick_v1,circle_v2,chessboard,coloring',\n  WEBSITE_DRILLS: '/api/study/v3/website-skilled-worksheet-subjects/?remove_root_subject=1',\n  GET_SUBJECTS_FOR_FILTER: '/api/worksheet/subjects/',\n\n  ADD_TASK_TO_SUBJECT: '/api/v1/skilled-worksheets/bulk/',\n\n  // Home library endpoints\n  WEBSITE_VIDEOS: '/api/study/v3/website-videos/',\n  WEBSITE_GAMES: '/api/study/v3/games/',\n  WEBSITE_ONLINE_GAMES: '/api/study/v3/online-games/',\n  WEBSITE_QUIZZES: '/api/v4/flashes/?all=1',\n  WEBSITE_LESSONS: '/api/study/v3/website-lessons/',\n  SUBJECT_CATEGORIES_MAPPING: '/api/segment/subject-categories-mapping/',\n  SUBJECTS_GRADE_EXCLUDING: '/api/segment/subjects-v2/grade-excluding/',\n};\n/* eslint-enable */\n\nexport const URLS = {\n  FREE_SIGN_UP: '/free-sign-up/',\n  WEB_GAMES_MATH_1GRADE_APP: '/web-games/math/first-grade/app/',\n  FREE_SIGN_UP_WORKSHEET: '/free-sign-up/welcome/',\n  SIGN_UP: '/sign-up/',\n  SIGN_UP_TEACHER: '/sign-up/teacher/',\n  DISTRIBUTOR_CODE_SUCCESS: '/activate-license/success/',\n  PARENT_SUBSCRIPTION_SUCCESS: 'subscription-success',\n  PARENT_SUBSCRIPTION_PLANS: 'subscription-plans',\n  HYBRID_LEARNING_PLATFORM: 'hybrid-learning-platform',\n  SIGN_UP_PARENT_COMPLETE: 'sign-up-parent',\n  SIGN_UP_PARENT_SUCCESS: '/sign-up/parent/success/',\n  KID_PROFILE_CREATE: '/kid-profile/create/',\n  GIFT_REDEEM_SUCCESS: '/gift/redeem/success/',\n  LEARNING_MATERIALS: '/learning-materials/',\n  GIFT_PURCHASE: 'gift-purchase',\n  TG_ONLINE: '/tg/',\n  CLASSROOM: '/classroom',\n  WORKSHEET_CHECK_BASE: '/worksheets-check',\n  WORKSHEET_CHECK: slug => `/worksheets-check/${slug}/`,\n  QUIZ_CHECK: slug => `/quiz-check/${slug}/`\n};\n\nexport const GET_PARAMS = {\n  // REDIRECT_TO_TGC is duplicated in kidsacademy/kidsacademy/worksheet-check/src/utils/utils.ts:77\n  OPEN_ACTIVITY_IN_TGC: 'ka_website.openActivityInTgc',\n  WORKSHEET_ID: 'ka_website.worksheetId',\n  LESSON_ID: 'ka_website.lessonId',\n  REDIRECT_TO_TGC: 'ka_website.toTGC',\n  SHOW_TGC_ONBOARDING: 'ka_website.showOnboarding',\n  AD_FREE_MODAL: 'adsFreeModal',\n  FROM_DISTRIBUTOR_SIGN_UP_FLOW: 'distributorCodeFlow',\n  EMAIL: 'email',\n  ACCOUNT_TYPE: 'type',\n  MAKE_REDIRECT: 'makeRedirect',\n  COUPON: 'coupon',\n  GRADE: 'grade',\n  SUBJECT: 'subject',\n  SKIP_ONBOARDING: 'skipOnboarding',\n  ERROR: 'error',\n  NEXT: 'next',\n  PLAN_TO_UPGRADE_SLUG: 'planToUpgradeSlug',\n  MESSAGE_ID: 'messageId',\n  TITLE: 'title',\n  IS_TGC: 'isTGC',\n  VERSION: 'v',\n  GAME_FULL_SCREEN_MODE: 'fullScreen',\n  DOWNLOAD_POPUP_LIMIT: 'downloadLimitPopup',\n  CAMPAIGN_ID: 'CampaignID'\n};\n\nexport const DEFAULT_GRADE_ID_FOR_TGC = 1;\n\nexport const LOCAL_STORAGE_KEYS = {\n  PASSED_SKILLED_WORKSHEET_LIST: 'passedSkilledWorksheetList',\n  WORKSHEET_LAST_DOWNLOAD_DATE: 'worksheetLastDownloadDate',\n  WORKSHEET_TRY_DOWNLOADED_COUNT: 'worksheetTryDownloadedCount',\n  WORKSHEET_ID: 'worksheetId',\n  WORKSHEET_SLUG: 'worksheetSlug',\n  WORKSHEET_TO_DOWNLOAD_DATA: 'worksheetToDownloadData',\n  WORKSHEET_ACTION: 'worksheetsAction',\n  PLACEMENT: 'placement',\n  WEBSITE_ACCOUNT_TYPE: 'websiteAccountType',\n  PARTNER_COUPON_CODE: 'partnerCouponCode',\n  IS_UI_TESTING_MODE: 'isTestRunning',\n  IS_SOUND_MUTED: 'isSoundMuted',\n  IS_BLOG_SUBSCRIBED: 'isBlogSubscribed',\n  POPUP_LAST_DISPLAY_DATE: 'lastPopupDisplayDate',\n  SUBSCRIPTION_POPUP_DISPLAY_COUNTER: 'subscriptionPopupDisplayCounter',\n  IS_SHOW_STEP_PROGRESS_BAR: 'isShowStepProgressBar',\n  SHOW_WEBSITE_PLANS_MODAL: 'showWebsitePlansModal',\n  SHOW_WEBSITE_PLANS_MODAL_PURCHASE: 'showWebsitePlansModalPurchase',\n  SHOW_PROMO_PLANS_MODAL_PURCHASE: 'showPromoPlansModalPurchase',\n  WEBSITE_PLANS_MODAL_PLAN_SLUG: 'websitePlansModalPlanSlug',\n  WEBSITE_PLANS_MODAL_EBLOX_ADDED: 'websitePlansModalEbloxAdded',\n  CHECK_AVAILABILITY_OF_PDF: 'checkAvailabilityOfPdf',\n  SHOW_WEB_GAMES_SUBSCRIPTION_MODAL: 'showWebGamesSubscriptionModal',\n  JOIN_KIDSACADEMY_FOR_FREE: 'joinKidsAcademyForFree'\n};\n\nexport const JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE = {\n  GAME: 'GAME',\n  COMPLETE_ONLINE: 'COMPLETE_ONLINE',\n  DEFAULT: 'DEFAULT'\n};\n\nexport const SUBSCRIPTION_TYPES = {\n  PARENT: '1',\n  SCHOOL: '2',\n  DISTRICT: '3'\n};\n\nexport const FEEDBACK_TYPES = {\n  REQUEST: 1,\n  SCHOOL_REQUEST: 2,\n  ISSUE_REPORT: 3,\n  QUESTION_FOR_EXPERT: 4,\n  QUOTE_REQUEST: 5,\n  // CONTENT_LICENSING: 6, need to add this to back-end\n};\n\nexport const CURRENCY = '$';\n\nexport const SUPPORT_EMAIL = 'accounts@kidsacademy.com';\n\nexport const ERROR_CODES = {\n  CAPTCHA_INVALID: 1400,\n  ALREADY_REGISTERED: 1110,\n  HAS_NO_SCHOOL_DISTRICT: 1104,\n  AUTH_STUDENT_USER: 1119,\n  // eslint-disable-next-line max-len\n  STUDENT_LIMIT_EXCEEDED: 1601  // max students already joined classroom (classroom was created by teacher without subscription)\n};\n\nexport const RESPONSE_CODES = {\n  1101: 'INVALID_DISTRICT',\n  1102: 'INVALID_SCHOOL',\n  1103: 'INVALID_USER',\n  1104: 'EMPTY_USER',\n  1119: 'AUTH_STUDENT_USER',\n  900: 'GIFT_CODE_INVALID',\n  1008: 'SUBSCRIPTION_EXISTS',\n  1117: 'INVALID_ACCOUNT_TYPE'\n};\n\nexport const SUBJECTS = {\n  INVALID_DISTRICT: 'District is not validated',\n  INVALID_SCHOOL: 'School is not validated',\n  INVALID_USER: 'User is not validated',\n  EMPTY_USER: 'User has no school and district',\n  GIFT_CODE_INVALID: '',\n  SUBSCRIPTION_EXISTS: '',\n  INVALID_ACCOUNT_TYPE: ''\n};\n\nexport const ACCOUNT_TYPES = {\n  PARENT: '0',\n  TEACHER: '1',\n  SCHOOL_ADMIN: '3',\n  DISTRICT: '2',\n  KID: '6'\n};\n\nexport const ACCOUNT_TYPES_STRING = {\n  PARENT: 'parent',\n  TEACHER: 'teacher',\n  DISTRICT: 'district'\n};\n\nexport const SUBJECTS_CONFIG = {\n  /* eslint-disable max-len */\n  prek: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {\n    name: 'The World Around Us',\n    id: 8\n  }, {name: 'Chess', id: 6}, {name: 'Art and Crafts', id: 9}],\n  gradek: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {name: 'Science', id: 3}, {\n    name: 'Reading',\n    id: 4\n  }, {name: 'Social Studies', id: 5}, {name: 'Chess', id: 6}],\n  grade1: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {name: 'Science', id: 3}, {\n    name: 'Reading',\n    id: 4\n  }, {name: 'Social Studies', id: 5}, {name: 'Chess', id: 6}],\n  grade2: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {\n    name: 'Science',\n    id: 3\n  }, {name: 'Social Studies', id: 5}, {name: 'Chess', id: 6}],\n  grade3: [{name: 'Math', id: 1}, {name: 'ELA', id: 2}, {\n    name: 'Science',\n    id: 3\n  }, {name: 'Social Studies', id: 5}, {name: 'Chess', id: 6}]\n  /* eslint-enable */\n};\n\nexport const ACCOUNT_SETTINGS_NAV_ITEM = {\n  REPORT: 'report'\n};\n\nexport const EBLOX_COUPONS = ['eblox', 'e-blox'];\n\nexport const PROMO_LANDINGS_URLS = [\n  '/online-learning-app-games-video-practice/',\n  '/1/',\n  '/2/',\n];\n\nexport const SUBJECTS_CATEGORIES_MAPPING = {\n  'Math': ['Math', 'Logic and Early Math'],\n  'English': ['English Language Arts', 'English as a Second Language'],\n  'World Around Us': ['World around Us'],\n  'Science': ['Science'],\n  'Social Studies': ['Social Studies'],\n  'Chess': ['Chess'],\n  'Art And Crafts': ['Arts'],\n  'Reading': ['Foundational Reading'],\n};\n\nexport const SUBJECTS_GRADES_MAPPING = {\n  'Math': [1, 2, 3, 5, 6],\n  'English': [1, 2, 3, 5, 6],\n  'World Around Us': [1],\n  'Science': [2, 3, 5, 6],\n  'Social Studies': [2, 3, 5, 6],\n  'Chess': [1, 2, 3, 5, 6],\n  'Art And Crafts': [1],\n  'Reading': [2, 3, 5, 6],\n};\n\n// eslint-disable-next-line max-len\nexport const MONTH_NAMES = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n\nexport const SUBSCRIPTION_CANCEL_REASON_IDS = {\n  OTHER: 3\n};\n\nexport const IFRAME_EVENTS = {\n  GAME_HINT_SHOWN: 'GAME_HINT_SHOWN',\n  GAME_SCORE: 'GAME_SCORE',\n  GAME_TIME_STARTED: 'GAME_TIME_STARTED',\n  GAME_TIME_CANCELLED: 'GAME_TIME_CANCELLED',\n  GAME_TIME_COMPLETED: 'GAME_TIME_COMPLETED',\n};\n\nexport const POST_HOG = {\n  PROJECT_ID: {\n    CLASSROOM: 'phc_KHhKCtPwhypuRp8t03IpkA0KT20AzZ0skCK5a9xnnGs',\n    TGC: 'phc_W2hlcR55zEcKOGNcD2VHQ2WKigsciqp5zNrH4ML4Zyx'\n  }\n};\n\nexport const IFRAME_POST_EVENTS = {\n  WEB_TOGGLE_SOUNDS: 'WEB_TOGGLE_SOUNDS'\n};\n\nexport const TGC_IFRAME_EVENTS = {\n  OPEN_ACTIVITY: 'OPEN_ACTIVITY',\n  GAME_INIT_STARTED: 'GAME_INIT_STARTED',\n  GAME_INIT_COMPLETED: 'GAME_INIT_COMPLETED',\n  GAME_SOUNDS_ACTIVATED: 'GAME_SOUNDS_ACTIVATED',\n  PURCHASE_INIT: 'PURCHASE_INIT',\n  PURCHASE_CANCELED: 'PURCHASE_CANCELED',\n  PURCHASE_COMPLETED: 'PURCHASE_COMPLETED',\n  USER_UPDATED: 'USER_UPDATED',\n  USER_REQUEST_EMAIL: 'USER_REQUEST_EMAIL'\n};\n\n// eslint-disable-next-line max-len\nexport const DROPIN_SCRIPT_URL = 'https://js.braintreegateway.com/web/dropin/1.46.0/js/dropin.min.js';\n\nexport const CUSTOM_MESSAGE = {\n  THREE_D_SECURE_ABORT: 'Purchase cancelled, please select another payment method',\n  BRAINTREE_CREATE_ERROR: 'Please try again.',\n};\n\n// subscription popup modal options\nexport const SUBSCRIPTION_POPUP = {\n  DEFAULT_DELAY: 10000,\n  SECOND_DISPLAY_DELAY: 120000,\n  DISPLAY_LIMIT: 2\n};\n\n// timeout to start download worksheet/show close popup btn\nexport const WORKSHEET_DOWNLOAD_DELAY = 10000;\n\n// time limit for loading spinner on start download elements\nexport const WORKSHEET_POPUP_INIT_LIMIT = 15000;\n\n// attribute representing monetization popup purchase step have been triggered\nexport const PURCHASE_STEP_TRIGGERED_ATTRIBUTE = 'data-purchase-triggered';\n\nexport const SUBSCRIPTION_PERIODS = {\n  LIFETIME: 'lifetime'\n};\n\nexport const SUBSCRIPTION_PERIOD_MAPPING = {\n  /* eslint-disable max-len */\n  'one_day': (price) => `<p>Renews at ${CURRENCY}${price} / day</p>`,\n  'half_yearly': (price) => `<p>Renews at ${CURRENCY}${price} / half year after free trial</p>`,\n  'monthly': (price) => `<p>Renews at ${CURRENCY}${price} / month after free trial</p>`,\n  'quarterly': (price) => `<p>Renews at ${CURRENCY}${price} / quarter after free trial</p>`,\n  'yearly': (price) => `<p>Renews at ${CURRENCY}${price} / year after free trial</p>`,\n  'lifetime': () => ''\n  /* eslint-enable */\n};\n\nexport const SECONDS_PER_DAY = 86400;\nexport const SECONDS_PER_HOUR = 3600;\nexport const SECONDS_PER_MINUTE = 60;\n\nexport const MAILING_LISTS = {\n  BLOG_POPUP: 'kidsacademy_newsletter',\n  TGC_LIST: 'kidsacademy_tgc_list'\n};\n\nexport const MODALS = {\n  FREE_SIGN_UP_FOR_DOWNLOAD_W: '#freeSignupForDownloadWorksheet',\n  ACCOUNT_TYPE_MODAL: '#websiteAccountTypeModal',\n  WEBSITE_SIGN_UP_MODAL: '#learning-resources-registration',\n  WEBSITE_QUESTION_FAVOURITES_MODAL: '#website-question-favourites-modal',\n  WEBSITE_PLANS_MODAL: '#website-plans-modal',\n  WEBSITE_CR_TG_PLANS_MODAL: '#website-cr-tg-plans-modal',\n  WEBSITE_QUESTION_DONE_MODAL: '#website-question-done-modal',\n  MONETIZATION: '#monetization-popup',\n  ADDS_FREE: '#addFreeModal',\n  WORKSHEET_IMAGE_POPUP: '#worksheetImagePopup',\n  WORKSHEET_IMAGE_POPUP_ID: (id) => `#worksheetImagePopup-${id}`,\n  QUIZ_IMAGE_POPUP: '#quizImagePopup',\n  TGC_SUBSCRIPTION_POPUP: '#tgcSubscriptionPopUp',\n  WEB_TGC_PAYWALL_POPUP: '#tgc-paywall-modal',\n  WEB_APP_PAYWALL_POPUP: '#web-app-paywall-modal',\n  WEB_TGC_LOGIN_MODAL: '#tgcLogInModal',\n  WEB_TGC_RESET_PASSWORD_MODAL: '#tgcResetPasswordModal',\n  TGC_PAYWALL_MODAL_NEW: '#tgc-paywall-modal-new',\n  JOIN_KA_FOR_FREE_MODAL: '#join-ka-for-free-modal',\n  SUBSCRIPTION_PROMO_MODAL: '#subscriptionPromoModal'\n};\n\nexport const WORKSHEET_ACTIONS = {\n  GO_TO_WORKSHEET_CHECK_IN_TGC: 'goToWorksheetCheckInTgc',\n  ADD_TO_FAVORITE: 'addToFavorite',\n  DELETE_FROM_FAVORITE: 'deleteFromFavorite',\n  MARK_AS_DONE: 'markAsDone',\n  UNMARK_AS_DONE: 'unmarkAsDone',\n  FAVORITE_FILTER: 'favoriteFilter',\n  DONE_FILTER: 'doneFilter',\n  INIT_WORKSHEET_DOWNLOAD: 'initDownload'\n};\n\nexport const PLACEMENTS = {\n  WORKSHEET_LIST_PAGE: 'worksheet-list-page',\n  WORKSHEET_DETAIL_PAGE: 'worksheet-page',\n  LESSON_DETAIL_PAGE: 'worksheet-lesson-page',\n  HOME_PAGE: 'home-page'\n};\n\nexport const WEBSITE_CUSTOM_EVENTS = {\n  DOWNLOAD_WORKSHEET: 'downloadWorksheet',\n  SHOW_PLANS_POPUP_NO_FREE: 'showPlansPopupNoFree',\n  RELOAD_HTMX_ADS_BANNERS: 'reloadHtmxAdsBanners'\n};\n\nexport const WEBSITE_LIMIT_STATUSES = {\n  ALLOWED: 'ALLOWED',\n  SHOW_PROMO_BANNER: 'SHOW_PROMO_BANNER',\n  DENIED: 'DENIED'\n};\n\nexport const URL_NAMES = {\n  WORKSHEET_ANSWERS: 'worksheet-answers'\n};\n\nexport const LANGUAGE_CODES = {\n  SPANISH: 'es',\n  ENGLISH: 'en'\n};\n\nexport const MIDDLE_WIDTH = 991;\n\n// export const MOBILE_WIDTH = 767;\n\n// export const SHOW_ADDS_FREE_MODAL_DELAY = 1000;\n\n\nexport const UTM = {\n  SOURCE: {\n    MOBI: 'kidsacademy-mobi',\n    COM: 'kidsacademy-com'\n  },\n  MEDIUM: {\n    VIDEO: 'video',\n    QUIZ: 'quiz',\n    WORKSHEET: 'worksheet',\n    GAME: 'game',\n    EDUCATORS: 'educators'\n  },\n  CAMPAIGN: {\n    LANDING: 'landing'\n  },\n  CONTENT: {\n    CATALOG: 'catalog',\n    ACTIVITY_PAGE: 'activity+page',\n    START_CLASSROOM: 'start+my+classroom'\n  }\n};\n\n/* web tgc onboarding events: /tg */\nexport const POST_HOG_PAGES = {\n  SUBSCRIPTION: 'Subscription',\n  ONBOARDING: 'Onboarding',\n};\n\n/* web tgc onboarding events: /tg */\nexport const POST_HOG_EVENTS = {\n  TRIAL: 'Trial',\n  SIGN_IN: 'Sign in',\n  PURCHASE: 'Purchase',\n  START_TRIAL_BTN: 'Start trial button',\n  PURCHASE_ERROR: 'Purchase error',\n  TGC_STEP_1: 'tgc step 1',\n  TGC_STEP_2: 'tgc step 2',\n  TGC_STEP_3: 'tgc step 3',\n  PAYWALL: 'Paywall',\n  SIGN_UP_OK: 'Sign up ok',\n  SIGN_UP_ERROR: 'Sign up error',\n};\n\nexport const HTTPS_PREFIX = () => {\n  let prefix = 'https://'; // prod & stage\n\n  const env = window.ENV ? window.ENV : window.boot.ENV;\n  if (env === 'dev') prefix = 'http://';\n  if (!env) prefix = 'https://';\n\n  return prefix;\n};\n\nexport const WORKSHEET_ACTION_TYPES = {\n  COMPLETE_ONLINE: 'completeOnline',\n  DOWNLOAD: 'download',\n  LEARN_ONLINE: 'learnOnline',\n};\n\nexport const IS_DOWNLOAD_WORKSHEET_FLOW = '_download-worksheet-flow';\n","import {\n  CURRENCY,\n  ENDPOINT,\n  ERROR_CODES,\n  LOCAL_STORAGE_KEYS,\n  WEBSITE_LIMIT_STATUSES,\n  SUPPORT_EMAIL,\n  WEBSITE_CUSTOM_EVENTS,\n  ACCOUNT_TYPES,\n  URLS,\n  JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE,\n  HTTPS_PREFIX,\n  GET_PARAMS,\n  PLACEMENTS,\n  WORKSHEET_ACTIONS,\n  WORKSHEET_ACTION_TYPES,\n  MODALS\n} from './config.js';\n\nexport const getBrowser = () => {\n  const userAgent = navigator.userAgent;\n  let tem;\n  let M = userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n  if (/trident/i.test(M[1])) {\n    tem = /\\brv[ :]+(\\d+)/g.exec(userAgent) || [];\n    return 'IE ' + (tem[1] || '');\n  }\n\n  if (M[1] === 'Chrome') {\n    tem = userAgent.match(/\\b(OPR|Edge)\\/(\\d+)/);\n    if (tem != null) return tem.slice(1).join(' ').replace('OPR', 'Opera');\n  }\n\n  M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n  if ((tem = userAgent.match(/version\\/(\\d+)/i)) != null) M.splice(1, 1, tem[1]);\n  return M.join(' ');\n};\n\nexport const toggleButtonLoading = ($button, isLoading, callback = () => {}) => {\n  if (!$button) return;\n  if (!$button.length) return;\n\n  const width = $button.width();\n\n  if (isLoading) {\n    $button.attr('data-value', $button.html());\n    $button.attr('data-position', $button.css('position'));\n    $button.attr('disabled', true);\n    $button.css('position', 'relative');\n    // eslint-disable-next-line max-len\n    $button.html('<div class=\"lds-ellipsis\" style=\"position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);\"><div></div><div></div><div></div><div></div></div>');\n    $button.width(width);\n  } else {\n    $button[0].style.removeProperty('width');\n    $button.html($button.attr('data-value'));\n    $button.css('position', $button.attr('data-position'));\n    $button.attr('disabled', false);\n  }\n  callback();\n};\n\nexport const capitalize = (string) => {\n  if (typeof string !== 'string') return '';\n  return string.charAt(0).toUpperCase() + string.slice(1);\n};\n\nexport const replaceEmailWithLink = (error, addLinkToEmail = true) => {\n  const emailLinkHref = `mailto:${SUPPORT_EMAIL}`;\n  const text1 = 'contact us';\n  const text2 = 'contact support';\n\n  // TODO add support for spanish lang\n\n  if (error.indexOf('@') > -1 && addLinkToEmail) {\n    const email = error.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi);\n    return error.replace(email[0], `<a href=\"mailto:${email[0]}\">${email[0]}</a>`);\n  }\n\n  if (error.toLowerCase().indexOf(text1) > -1 && addLinkToEmail) {\n    return error.replace(text1, `<a href=\"${emailLinkHref}\">${text1}</a>`);\n  }\n\n  if (error.toLowerCase().indexOf(text2) > -1 && addLinkToEmail) {\n    return error.replace(text2, `<a href=\"${emailLinkHref}\">${text2}</a>`);\n  }\n\n  return error;\n};\n\nexport const getError = (errorResponse, addLinkToEmail = true) => {\n  const emailLinkHref = `mailto:${SUPPORT_EMAIL}`;\n\n  const errorMsgs = {\n    en: `Something went wrong. Please <a href=\"${emailLinkHref}\">contact us</a>.`,\n    es: `Algo salió mal. Por favor  <a href=\"${emailLinkHref}\">contáctenos</a>.`\n  };\n\n  let defaultErrorMsg = errorMsgs[window.LANGUAGE_CODE];\n  if (!defaultErrorMsg) defaultErrorMsg = errorMsgs.en;\n\n  if (!errorResponse) return defaultErrorMsg;\n\n  let errors = '';\n\n  try {\n    errors = JSON.parse(errorResponse.responseText);\n  } catch (e) {\n    return defaultErrorMsg;\n  }\n\n  if (!errors) return defaultErrorMsg;\n  if (!errors.error) return defaultErrorMsg;\n\n  const updatedErrorText = replaceEmailWithLink(errors.error, addLinkToEmail);\n  return updatedErrorText;\n};\n\nexport const getErrorCode = (errorResponse) => {\n  if (!errorResponse) return null;\n  let error = null;\n\n  try {\n    error = JSON.parse(errorResponse.responseText);\n  } catch (e) {\n    return null;\n  }\n\n  if (!error) return null;\n  if (!error.error_code) return null;\n\n  return error.error_code;\n};\n\nexport const setUrlParam = (name, value) => {\n  if (history.pushState) {\n    const location = window.location;\n    const newUrl = `${location.protocol}//${location.host}${location.pathname}?${name}=${value}`;\n    window.history.pushState({path: newUrl}, '', newUrl);\n  }\n};\n\nexport const getUrlParam = (paramName) => {\n  if (typeof URLSearchParams === 'function') {\n    const paramValue = new URLSearchParams(window.location.search).get(paramName);\n    return paramValue;\n  }\n\n  // fallback for IE\n  const results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);\n  if (results == null) return null;\n  return decodeURI(results[1]) || null;\n};\n\nexport const deleteUrlParam = (paramName) => {\n  const url = new URL(window.location);\n  url.searchParams.delete(paramName);\n  history.replaceState(null, null, url);\n};\n\nexport const isBase64 = (str) => {\n  try {\n    return btoa(atob(str)) === str;\n  } catch (err) {\n    return false;\n  }\n};\n\nexport const fixPlusSymbolInProvidedEmail = (email) => {\n  return email.replace(' ', '+');\n};\n\nexport const scrollToHashedElement = (hash, {\n  callback = () => {},\n  scrollIntoViewDelay = 500,\n  scrollTimeout = 300\n}) => {\n  if (!hash) return;\n\n  const $header = $('header');\n  const isHeaderFixed = $header.length ? document.documentElement.clientWidth > 891 : false;\n  const heightToSubtract = isHeaderFixed ? $header.innerHeight() : 0;\n\n  setTimeout(() => {\n    const formattedHash = hash.substr(1);\n    const $elem = $(`[data-hash=\"${formattedHash}\"]`);\n\n    if ($elem.length) {\n      //need to subtract header height cause header for tablets is fixed\n      const elemOffset = $elem.offset().top;\n      const scrollTop = elemOffset - heightToSubtract;\n\n      $([document.documentElement, document.body]).animate(\n        {scrollTop},\n        scrollIntoViewDelay,\n        () => {\n          callback($elem);\n        }\n      );\n    }\n  }, scrollTimeout);\n};\n\n/*\n*  func param takes name of needed api function, e.g. 'playVideo'\n*  For a full list of possible functions, see:\n*  http://code.google.com/apis/youtube/js_api_reference.html\n*/\nexport const callYTPlayer = ($frame, func, args) => {\n  if (!($frame instanceof jQuery)) return;\n  const frameContainerId = $frame.attr('id');\n  const iframe = $frame[0];\n  if (iframe) {\n    // Frame exists,\n    iframe.contentWindow.postMessage(JSON.stringify({\n      'event': 'command',\n      'func': func,\n      'args': args || [],\n      'id': frameContainerId\n    }), '*');\n  }\n};\n\nexport const getYTVideoConfig = (videoId, onReadyHandler, $videoModal) => {\n  return {\n    width: '100%',\n    height: '300',\n    videoId: videoId,\n    playerVars: {\n      rel: 0\n    },\n    events: {\n      'onReady': onReadyHandler,\n      'onStateChange': function (state) {\n        if (state.data === window.YT.PlayerState.ENDED && $videoModal) {\n          $videoModal.modal('hide');\n        }\n      }\n    }\n  };\n};\n\nexport const initGoogleRecaptcha = (callback, expiredCallback = null) => {\n  if (!$('#google-recaptcha-container').length) return;\n\n  // add RECAPTCHA script tag to DOM\n  $(document).ready(() => {\n    const captchaDataSelector = 'google-recaptcha';\n    const $captchaDataSelector = $(`[data-selector=\"${captchaDataSelector}\"]`);\n    if ($captchaDataSelector.length) return; // prevent multiple recaptcha init\n\n    window.onRECAPTCHAloadCallback = () => {\n      try {\n        grecaptcha.render('google-recaptcha-container', {\n          'sitekey': window.RECAPTCHA_SITE_KEY,\n          'callback': callback,\n          'expired-callback': expiredCallback,\n          'error-callback': (error) => {\n            console.error(error); // eslint-disable-line no-console\n          },\n        });\n      } catch (error) {\n        console.error(error); // eslint-disable-line no-console\n      }\n    };\n\n    // create script tag\n    const script = document.createElement('script');\n    script.type = 'text/javascript';\n    script.setAttribute('src', 'https://www.google.com/recaptcha/api.js?onload=onRECAPTCHAloadCallback&render=explicit');\n    script.setAttribute('data-selector', captchaDataSelector);\n\n    // set size depends on device screen width\n    const deviceWidth = (window.innerWidth > 0) ? window.innerWidth : screen.width;\n    const minAvailableWidthForDesktopView = 460;\n    if (deviceWidth < minAvailableWidthForDesktopView) {\n      $('#google-recaptcha-container').attr('data-size', 'compact');\n    }\n\n    document.body.appendChild(script);\n  });\n};\n\nexport const handleCAPTCHAError = (errorResponse) => {\n  if (!errorResponse) return;\n\n  let error = {};\n\n  try {\n    error = JSON.parse(errorResponse.responseText);\n  } catch (e) {\n    return;\n  }\n\n  if (!error) return;\n\n  if (error.error_code === ERROR_CODES.CAPTCHA_INVALID\n    && grecaptcha\n    && typeof grecaptcha.reset == 'function') {\n    grecaptcha.reset();\n  }\n};\n\nexport const copyStringToBuffer = (stringToCopy) => {\n  if (!stringToCopy) return;\n\n  const el = document.createElement('textarea');\n\n  el.value = stringToCopy;\n  el.setAttribute('readonly', '');\n  el.style.position = 'absolute';\n  el.style.left = '-9999px';\n  document.body.appendChild(el);\n\n  const selected = document.getSelection().rangeCount > 0\n    ? document.getSelection().getRangeAt(0) : false;\n\n  el.select();\n  document.execCommand('copy');\n  document.body.removeChild(el);\n\n  if (selected) {\n    document.getSelection().removeAllRanges();\n    document.getSelection().addRange(selected);\n  }\n};\n\nexport const isASCII = (str) => {\n  return /^[\\x00-\\x7F]*$/.test(str);\n};\n\nexport const braintreeDropinConfig = (totalAmount, container = '#dropin-container') => {\n  const config = {\n    authorization: window.braintree_token,\n    container: container,\n    threeDSecure: true,\n    vaultManager: true,\n    card: {\n      cardholderName: {\n        required: true\n      },\n      overrides: {\n        styles: {\n          '.invalid': {\n            color: 'red'\n          }\n        }\n      }\n    },\n    paypal: {\n      flow: 'vault',\n      buttonStyle: {\n        size: 'medium'\n      }\n    },\n    paypalCredit: {\n      flow: 'vault',\n      buttonStyle: {\n        size: 'medium'\n      }\n    },\n    venmo: {},\n    applePay: {\n      displayName: 'Kids Academy Company',\n      paymentRequest: {\n        total: {\n          label: 'Kids Academy Talented & Gifted',\n          amount: totalAmount // should be in dollars (string): '152.99', '0.99'\n        },\n        // We recommend collecting billing address information, at minimum\n        // billing postal code, and passing that billing postal code with all\n        // Google Pay transactions as a best practice.\n        requiredBillingContactFields: []\n      },\n    },\n  };\n\n  if (window.ENV !== 'prod') {\n    config.googlePay = {\n      googlePayVersion: 2,\n      merchantId: '09638095500891200480',\n      transactionInfo: {\n        totalPriceStatus: 'FINAL',\n        totalPrice: totalAmount, // should be in dollars (string): '152.99', '0.99'\n        currencyCode: 'USD'\n      },\n      allowedPaymentMethods: [{\n        type: 'CARD',\n        parameters: {\n          // We recommend collecting and passing billing address information\n          // with all Google Pay transactions as a best practice.\n          billingAddressRequired: true,\n          billingAddressParameters: {\n            format: 'FULL'\n          }\n        }\n      }]\n    };\n  }\n\n  return config;\n};\n\nexport const threeDSecureConfig = (totalPrice) => {\n  const givenName = window.user && window.user.first_name;\n  const surname = window.user && window.user.last_name;\n  return {\n    amount: parseFloat(totalPrice),\n    email: window.user && window.user.email,\n    billingAddress: {\n      // ASCII-printable characters required, else will throw a validation error\n      givenName: isASCII(givenName) && givenName,\n      // ASCII-printable characters required, else will throw a validation error\n      surname: isASCII(surname) && surname\n    }\n  };\n};\n\nexport const getUserSources = (key) => {\n  if (!key) return '';\n  if (!window.sourcesOfUser) return '';\n  if (!window.sourcesOfUser.hasOwnProperty(key)) return '';\n\n  const result = window.sourcesOfUser[key];\n  if (result === 'None') return null;\n\n  return result;\n};\n\nexport const scrollToTop = () => {\n  const $body = $('body, html');\n  $body.animate({\n    scrollTop: 0\n  }, 500);\n};\n\nexport const getHumanReadablePrice = (priceInCents) => {\n  const result = (priceInCents / 100).toFixed(2).toString();\n  return `${CURRENCY}${result}`;\n};\n\n\nexport const isUiTestingMode = () => {\n  const value = localStorage.getItem(LOCAL_STORAGE_KEYS.IS_UI_TESTING_MODE);\n  const result = value === 'true';\n\n  return result;\n};\n\nexport const isAnySelected = ($elementsArray) => {\n  let isAnySelected = false;\n\n  $elementsArray.each(function (index, item) {\n    if (item.checked) isAnySelected = true;\n  });\n\n  return isAnySelected;\n};\n\n\nexport const isObjectEmpty = (obj) => {\n  if (Object.getOwnPropertyNames) {\n    return (Object.getOwnPropertyNames(obj).length === 0);\n  }\n\n  for (const key in obj) {\n    if (obj.hasOwnProperty(key)) return false;\n  }\n\n  return true;\n};\n\nexport const isBrowserSupportsWebp = (callback) => {\n  const imgHeight = 2;\n  const webP = new Image();\n  /* eslint-disable max-len */\n  webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\n\n  webP.onload = webP.onerror = () => {\n    callback(webP.height === imgHeight);\n  };\n};\n\nexport const dispatchCustomEvent = (name, data) => {\n  const event = new CustomEvent(name, {detail: data});\n  document.dispatchEvent(event);\n};\n\nexport const storage = {\n  set: (key, value) => {\n    localStorage.setItem(key, value);\n  },\n  get: (key, isDelete = false) => {\n    const result = localStorage.getItem(key);\n    if (isDelete) localStorage.removeItem(key);\n    return result;\n  },\n  delete: (key) => {\n    localStorage.removeItem(key);\n  }\n};\n\nexport const isFormValid = ($form) => {\n  const formParsley = $form.parsley();\n  formParsley.validate();\n\n  return formParsley.isValid();\n};\n\nexport const deleteGetParamFromUrl = (param) => {\n  const regex = new RegExp(`[\\\\?&]${param}=[^&]+`);\n\n  history.replaceState && history.replaceState(\n    // eslint-disable-next-line max-len\n    null, '', location.pathname + location.search.replace(regex, '').replace(/^&/, '?') + location.hash\n  );\n};\n\n/**\n * @param date\n * @returns {string} month dd, yyyy // example - June 1, 2020\n */\nexport const formatDate = (date) => {\n  /* eslint-disable max-len */\n  const formattedDate = new Date(date).toLocaleDateString({}, {\n    timeZone: 'UTC',\n    month: 'short',\n    day: 'numeric',\n    year: 'numeric'\n  });\n  return formattedDate;\n};\n\nexport const isThreeDSecureCanceled = (payload) => {\n  const {type, liabilityShifted: isThreeDSecurePassed} = payload;\n  return type === 'CreditCard' && !isThreeDSecurePassed;\n};\n\n/**\n * Returns a random integer between min (inclusive) and max (inclusive).\n * The value is no lower than min (or the next integer greater than min\n * if min isn't an integer) and no greater than max (or the next integer\n * lower than max if max isn't an integer).\n */\nexport const getRandomInt = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\n\nexport const toggleStepProgressBar = ($stepProgressBar, callback = () => {}) => {\n  if (storage.get(LOCAL_STORAGE_KEYS.IS_SHOW_STEP_PROGRESS_BAR) === 'True') {\n    $stepProgressBar.show();\n  } else {\n    $stepProgressBar.hide();\n  }\n\n  callback();\n};\n\nexport const processingPlurals = (number = null, singular = '', plural = '') => {\n  if (number === null) return singular;\n  const numberNum = parseInt(number);\n\n  if (numberNum === 0) return plural;\n  if (numberNum === 1) return singular;\n  if (numberNum > 1) return plural;\n};\n\nexport const initWorksheetDownload = (pdfLink, dontPostEvent = false) => {\n  if (!dontPostEvent) ga('send', 'event', 'PDF worksheet', 'download');\n\n  const isSafariBrowser = getBrowser().toLowerCase().includes('safari');\n\n  if (isSafariBrowser) {\n    window.location = pdfLink;\n\n    return;\n  }\n\n  window.open(pdfLink, '_blank');\n};\n\nexport const toggleMarkWorksheetAsDone = (worksheetId, isPostMethod = true, callback = () => {}) => {\n  $.ajax({\n    url: ENDPOINT.MARK_AS_DONE(worksheetId),\n    method: isPostMethod ? 'POST' : 'DELETE'\n  }).then(() => {\n    callback();\n  });\n};\n\nexport const toggleAddWorksheetToFavorite = (worksheetId, isPostMethod = true, callback = () => {}) => {\n  $.ajax({\n    url: ENDPOINT.ADD_TO_FAVORITE(worksheetId),\n    method: isPostMethod ? 'POST' : 'DELETE'\n  }).then(() => {\n    callback();\n  });\n};\n\nexport const handlePdfDownload = (startPdfDownload = () => {}) => {\n  $.ajax({\n      url: ENDPOINT.WORKSHEETS_PDF_STATUS,\n      method: 'GET'\n    }).then((response) => {\n      switch(response.can_download_pdf) {\n        case WEBSITE_LIMIT_STATUSES.SHOW_PROMO_BANNER:   // cause of KAWD-209 we do not get this status no more\n          // const $monetizationModal = $(MODALS.MONETIZATION);\n          // $monetizationModal.modal('show');\n\n          startPdfDownload();\n          break;\n        case WEBSITE_LIMIT_STATUSES.DENIED:\n          dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.SHOW_PLANS_POPUP_NO_FREE);\n          break;\n        case WEBSITE_LIMIT_STATUSES.ALLOWED:\n          startPdfDownload();\n          break;\n      }\n    }, (error) => {\n      // eslint-disable-next-line no-console\n      console.error('Worksheet download status check request is failed', error);\n    });\n};\n\nexport const handleCompleteOnline = (goToCompleteOnlineInTgc = () => {}) => {\n  $.ajax({\n      url: ENDPOINT.WORKSHEET_CHECK_STATUS,\n      method: 'GET'\n    }).then((response) => {\n      switch(response.can_download_pdf) {\n        case WEBSITE_LIMIT_STATUSES.SHOW_PROMO_BANNER:  // cause of KAWD-209 we do not get this status no more\n          // const $monetizationModal = $(MODALS.MONETIZATION);\n          // $monetizationModal.modal('show');\n\n          goToCompleteOnlineInTgc();\n          break;\n        case WEBSITE_LIMIT_STATUSES.DENIED:\n          dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.SHOW_PLANS_POPUP_NO_FREE);\n          break;\n        case WEBSITE_LIMIT_STATUSES.ALLOWED:\n          goToCompleteOnlineInTgc();\n          break;\n      }\n    }, (error) => {\n      // eslint-disable-next-line no-console\n      console.error('Worksheet download status check request is failed', error);\n    });\n};\n\nexport const redirectToCompleteOnlineInTGC = (slug, queryParams) => {\n  if (!slug) return;\n  const baseUrl = `/worksheets-check/${slug}/?${GET_PARAMS.REDIRECT_TO_TGC}=true&${GET_PARAMS.SHOW_TGC_ONBOARDING}=true`;\n  window.location = `${baseUrl}${queryParams ? `&${queryParams}` : ''}`;\n};\n\nexport const getPageUrlName = () => {\n  const result = $('body').attr('data-url');\n  if (result) return result;\n\n  return null;\n};\n\nexport const addActivityToClassroom = ({\n  activities = [],\n  utm\n}) => {\n  const searchParams = new URLSearchParams({\n    activities: JSON.stringify(activities),\n  });\n\n  // remove search params with empty string in value\n  const keysForDel = [];\n  searchParams.forEach((value, key) => {if (value === '') keysForDel.push(key);});\n  keysForDel.forEach(key => {searchParams.delete(key);});\n\n  let params = searchParams.toString() ? `?${searchParams.toString()}` : '';\n  if (utm) params = `${params}&${utm}`;\n\n  let domain = 'https://www.kidsacademy.com/'; // prod\n  const env = window.ENV ? window.ENV : window.boot.ENV;\n  if (env === 'stage') domain = 'https://www.kad-staging-com.net/';\n  if (env === 'dev') domain = 'http://localhost:8083/';\n\n  window.location.href = `${domain}classroom/${params}`;\n};\n\nexport const addSkilledWorksheetsToClassroom = ({\n  activityId,\n  gradeId,\n  utm\n}) => {\n  const searchParams = new URLSearchParams({\n    showSkilledWorksheetModal: 'true',\n    skilledWorksheetSubjectId: activityId,\n    gradeId: gradeId\n  });\n\n  if (utm) {\n    // Remove leading '?' if present\n    const cleanUtm = utm.startsWith('?') ? utm.substring(1) : utm;\n    const utmParams = new URLSearchParams(cleanUtm);\n    utmParams.forEach((value, key) => {\n      searchParams.append(key, value);\n    });\n  }\n\n  let domain = 'https://www.kidsacademy.com/'; // prod\n  const env = window.ENV ? window.ENV : window.boot.ENV;\n  if (env === 'stage') domain = 'https://www.kad-staging-com.net/';\n  if (env === 'dev') domain = 'http://localhost:8083/';\n\n  window.location.href = `${domain}classroom/?${searchParams.toString()}`;\n};\n\nexport const createClassroom = ({utm = ''}) => {\n  let domain = 'https://www.kidsacademy.com/'; // prod\n  const env = window.ENV ? window.ENV : window.boot.ENV;\n  if (env === 'stage') domain = 'https://www.kad-staging-com.net/';\n  if (env === 'dev') domain = 'http://localhost:8083/';\n\n  window.location.href = `${domain}classroom/${utm ? utm : ''}`;\n};\n\nexport const showJoinKidsAcademyModal = ({\n  type = JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE.DEFAULT,\n  title = 'Join Kids Academy for Free',\n  checkStorage = true,\n  teacherQueryParams = '',\n  parentQueryParams = '',\n  target,\n}) => {\n  const modalWasShown = JSON.parse(localStorage\n    .getItem(LOCAL_STORAGE_KEYS.JOIN_KIDSACADEMY_FOR_FREE));\n\n  if (modalWasShown && checkStorage) return;\n\n  // GA\n  let analyticEventType = 'Init_PopUp_KA_COM';\n  if (type === JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE.COMPLETE_ONLINE) {\n    analyticEventType = 'ComleteOnline_PopUp';\n  }\n  if (type === JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE.GAME) {\n    analyticEventType = 'StartGame_PopUp';\n  }\n  ga('send', 'event', analyticEventType, 'Show', 'Load');\n\n  const $joinKidsacademyForFreeModal = $(MODALS.JOIN_KA_FOR_FREE_MODAL);\n\n  $('[data-selector=\"join-kidsacademy-for-free-modal-title\"]').html(title);\n\n  const teacher = $('[data-selector=\"join-kidsacademy-teacher\"]');\n  const parent = $('[data-selector=\"join-kidsacademy-parent\"]');\n  const student = $('[data-selector=\"join-kidsacademy-student\"]');\n\n  const initialTeacherHref = teacher.attr('href');\n  const initialParentHref = parent.attr('href');\n  const initialTarget = teacher.attr('target');\n\n  if (target) {\n    teacher.attr('target', target);\n    parent.attr('target', target);\n  }\n\n  if(teacherQueryParams) teacher.attr('href', `${initialTeacherHref}&${teacherQueryParams}`);\n\n  if(parentQueryParams) parent.attr('href', `${initialParentHref}&${parentQueryParams}`);\n\n  $($joinKidsacademyForFreeModal).on('hidden.bs.modal', () => {\n    teacher.attr('href', initialTeacherHref);\n    parent.attr('href', initialParentHref);\n\n    teacher.attr('target', initialTarget);\n    parent.attr('target', initialTarget);\n\n    ga('send', 'event', analyticEventType, 'Close', 'Click');\n  });\n\n  $(teacher).on('click', () => {\n    ga('send', 'event', analyticEventType, '1-Teacher', 'Click');\n    $joinKidsacademyForFreeModal.modal('hide');\n  });\n\n  $(parent).on('click', () => {\n    ga('send', 'event', analyticEventType, '2-Parent', 'Click');\n    $joinKidsacademyForFreeModal.modal('hide');\n  });\n\n  $(student).on('click', () => {\n    ga('send', 'event', analyticEventType, '3-Student', 'Click');\n    $joinKidsacademyForFreeModal.modal('hide');\n  });\n\n  $joinKidsacademyForFreeModal.modal('show');\n\n  localStorage.setItem(\n    LOCAL_STORAGE_KEYS.JOIN_KIDSACADEMY_FOR_FREE,\n    JSON.stringify({isFinished: true})\n  );\n};\n\nexport const completeOnlineButtonHandler = ({ event, classroomUtms = {}, urlHandler = URLS.WORKSHEET_CHECK }) => {\n  const target = $(event.currentTarget);\n  const slug = target.attr('data-slug');\n  const gradeId = target.attr('data-grade-id');\n  const categorySlug = target.attr('data-category-slug');\n  const activityId = target.attr('data-activity-id');\n  const activityContentType = target.attr('data-activity-content-type');\n\n  // not auth > show modal\n  if (!window.isAuthenticated) {\n    event.preventDefault();\n    showJoinKidsAcademyModal({ type: JOIN_KIDSACADEMY_FOR_FREE_MODAL_TYPE.COMPLETE_ONLINE, checkStorage: false });\n    return;\n  }\n\n  // NO subscription teacher > classroom\n  if (window.accountType === ACCOUNT_TYPES.SCHOOL_ADMIN && window.lmsSubscriptionStatus !== 0) {\n    event.preventDefault();\n    addActivityToClassroom({\n      activities: [{ categorySlug, gradeId, activityId, activityContentType }],\n      utmSource: classroomUtms ? classroomUtms.utmSource : '',\n      utmMedium: classroomUtms ? classroomUtms.utmMedium : '',\n      utmContent: classroomUtms ? classroomUtms.utmContent : '',\n    });\n    return;\n  }\n\n  // NO subscription NOT teacher > .com/tg\n  if (window.accountType !== ACCOUNT_TYPES.SCHOOL_ADMIN && !window.hasValidParentSubscription) {\n    event.preventDefault();\n    window.location = HTTPS_PREFIX() + window.COM_DOMAIN_NAME + URLS.TG_ONLINE;\n    return;\n  }\n\n  // user with subscription\n  if (window.hasValidParentSubscription || window.lmsSubscriptionStatus === 0) {\n    event.preventDefault();\n    window.location = urlHandler(slug);\n  }\n};\n\nexport const redirectToTgcWithOpenWorksheetParams = ({worksheetId, utm, skipOnboarding = true}) => {\n  const page = `${URLS.TG_ONLINE}`;\n  const params = worksheetId && `?${GET_PARAMS.OPEN_ACTIVITY_IN_TGC}=true&${GET_PARAMS.WORKSHEET_ID}=${worksheetId}&${GET_PARAMS.SKIP_ONBOARDING}=${String(skipOnboarding)}`;\n\n  if (utm && utm.charAt() === '?') utm = utm.substring(1);\n\n  window.location = `${page}${params}&${utm}`;\n};\n\nexport const redirectToTgcWithOpenActivityParams = ({activityId, activityType, utm}) => {\n  const page = `${URLS.TG_ONLINE}`;\n  const params = activityType && activityId && `?${GET_PARAMS.OPEN_ACTIVITY_IN_TGC}=${activityType}_${activityId}&${GET_PARAMS.SKIP_ONBOARDING}=true`;\n  if (utm && utm.charAt() === '?') utm = utm.substring(1);\n\n  window.location = `${page}${params}&${utm}`;\n};\n\nexport const redirectToTgcWithOpenLessonParams = ({ gradeId, subjectId, lessonId, utm, getParams = false }) => {\n  const page = `${URLS.TG_ONLINE}`;\n  const params = gradeId && subjectId && lessonId && `${GET_PARAMS.OPEN_ACTIVITY_IN_TGC}=lesson_${lessonId}&${GET_PARAMS.GRADE}=${gradeId}&${GET_PARAMS.SUBJECT}=${subjectId}&${GET_PARAMS.SKIP_ONBOARDING}=true`;\n  if (utm && utm.charAt() === '?') utm = utm.substring(1);\n\n  if (getParams) return { page, params };\n\n  window.location = `${page}?${params}&${utm}`;\n};\n\nexport const handleCompleteOnlineListener = (e, queryParams) => {\n  e.preventDefault();\n\n  const worksheetId = $(e.currentTarget).attr('data-activity-id');\n  const worksheetSlug = $(e.currentTarget).attr('data-slug');\n\n  storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_ID, worksheetId);\n  storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_SLUG, worksheetSlug);\n  storage.set(LOCAL_STORAGE_KEYS.PLACEMENT, PLACEMENTS.WORKSHEET_LIST_PAGE);\n  storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION, WORKSHEET_ACTIONS.GO_TO_WORKSHEET_CHECK_IN_TGC);\n\n  redirectToCompleteOnlineInTGC(worksheetSlug, queryParams);\n};\n\nexport const updateWorksheetDownloadCount = (shouldDownloadBeCounted = false) => {\n  // download count/limit\n  let count = 0;\n\n  if (storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_TRY_DOWNLOADED_COUNT)) {\n    count = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_TRY_DOWNLOADED_COUNT);\n  }\n\n  if (shouldDownloadBeCounted) {\n    count = parseInt(count) + 1;\n    storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_TRY_DOWNLOADED_COUNT, count);\n  }\n\n  // last download date\n  let isAbleToDownload = false;\n\n  let worksheetLastDownloadDate = null;\n  if (storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_LAST_DOWNLOAD_DATE)) {\n    worksheetLastDownloadDate = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_LAST_DOWNLOAD_DATE);\n  }\n\n  const nowTimestamp = Date.now();\n  const worksheetLastDownloadTimestamp = parseInt(worksheetLastDownloadDate);\n  const oneDayInMilliseconds = 86400000;\n  if ((nowTimestamp - worksheetLastDownloadTimestamp) > oneDayInMilliseconds) {\n    // reset count/limit if one day already passed from the last download\n    count = 1;\n    storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_TRY_DOWNLOADED_COUNT, count);\n    isAbleToDownload = true;\n  }\n  if (shouldDownloadBeCounted) {\n    storage.set(LOCAL_STORAGE_KEYS.WORKSHEET_LAST_DOWNLOAD_DATE, nowTimestamp);\n  }\n\n  return {count, isAbleToDownload};\n};\n\n/**\n * @param e {Event}\n * @param type {String}\n * @param $button {jQuery}\n */\nexport const downloadWorksheetHandler = (e, type, $button) => {\n  if (e) e.preventDefault();\n\n  const crClassName =  '_cr';\n  const tgClassName = '_tg';\n\n  let $target = null;\n  if (e) $target = $(e.currentTarget);\n  if ($button) $target = $button;\n\n  if (!$target) return;\n\n  const utm = $target.attr('data-utm');\n  const worksheetId = $target.attr('data-id');\n  const btnDataSelectorValue = $target.attr('data-selector');\n\n  // HAS subscription\n  if (window.hasValidParentSubscription) {\n    if (type === WORKSHEET_ACTION_TYPES.DOWNLOAD) {\n      dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n      updateWorksheetDownloadCount(true);\n      return;\n    }\n\n    if (type === WORKSHEET_ACTION_TYPES.COMPLETE_ONLINE || type === WORKSHEET_ACTION_TYPES.LEARN_ONLINE) {\n      const worksheetSlug = $(e.currentTarget).attr('data-slug');\n      window.location = `/worksheets-check/${worksheetSlug}`;\n      return;\n    }\n  }\n\n  // NO subscription COMPLETE ONLINE / LEARN ONLINE btns\n  if (type === WORKSHEET_ACTION_TYPES.COMPLETE_ONLINE || type === WORKSHEET_ACTION_TYPES.LEARN_ONLINE) {\n    redirectToTgcWithOpenActivityParams({activityId: worksheetId, activityType: 'worksheet', utm});\n    return;\n  }\n\n  // NO subscription DOWNLOAD\n  if (type === WORKSHEET_ACTION_TYPES.DOWNLOAD) {\n    const {count, isAbleToDownload} = updateWorksheetDownloadCount(false);\n\n    // Authenticated\n    if (window.isLoggedIn) {\n      if (+count < 2 || isAbleToDownload) {\n        // download worksheet\n        dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n        updateWorksheetDownloadCount(true);\n        return;\n      }\n\n      if (+count >= 2 || !isAbleToDownload) {\n        // show modal with plans depends on type of user, if no type then show CR plan\n        if (window.websiteAccountType === 'parent') {\n          // show TG plan modal with 2 plans\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).modal('show');\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).removeClass(crClassName);\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).addClass(tgClassName);\n        } else if (window.websiteAccountType === 'teacher' || window.websiteAccountType === 'student' || true) {\n          // show CR plan modal with 2 plans\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).modal('show');\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).removeClass(tgClassName);\n          $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).addClass(crClassName);\n        }\n        return;\n      }\n      return;\n    }\n\n    // NOT Authenticated\n    $(MODALS.FREE_SIGN_UP_FOR_DOWNLOAD_W).attr('data-worksheet-id', worksheetId);\n    $(MODALS.FREE_SIGN_UP_FOR_DOWNLOAD_W).attr('data-worksheet-selector', btnDataSelectorValue);\n    $(MODALS.FREE_SIGN_UP_FOR_DOWNLOAD_W).modal('show');\n\n    ga('send', 'event', 'New-sign-up', 'New-sign-up-load', 'Load');\n  }\n};\n\nexport const isWorksheetCheckPage = () => {\n  if (window.location.href.indexOf(URLS.WORKSHEET_CHECK_BASE) > -1) return true;\n  return false;\n};\n\nexport const showSignUpModal = ({isPromo, planSlug, isEbloxAdded = false}) => {\n  // prepare WEBSITE_SIGN_UP_MODAL texts and buttons\n  $('[data-selector=\"learning-resources-registration-title\"]').html('Try Kids Academy Premium!');\n\n  const subtitle = $('[data-selector=\"learning-resources-registration-subtitle\"]');\n  subtitle.html('Enter your email and password to create an account.');\n  subtitle.addClass('modal-subtitle');\n\n  $('[data-selector=\"learning-resources-registration-login-btns\"]').hide();\n  $('[data-selector=\"social-btn-login\"]').hide();\n\n  // add attr to show purchase modal after user signed-up in WEBSITE_SIGN_UP_MODAL modal\n  if (isPromo) {\n    $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-promo-plans-slug', planSlug);\n    if (isEbloxAdded) $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-website-plans-eblox', 'true');\n  } else {\n    $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-website-plans-slug', planSlug);\n  }\n\n  // show auth modal\n  $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('show');\n};\n\nexport const debounce = (func, timeout = 300) => {\n    let timer;\n    return (...args) => {\n      clearTimeout(timer);\n      timer = setTimeout(() => { func.apply(this, args); }, timeout);\n    };\n  };\n\n  export const isWebGamesPage = () => {\n    if ($('[data-selector=\"web-games\"]').length) return true;\n    return false;\n  };\n","import Qs from 'qs';\nimport Cookies from 'js-cookie';\nimport {\n  deleteUrlParam,\n  getUrlParam,\n  showJoinKidsAcademyModal,\n  storage,\n  downloadWorksheetHandler\n} from '../utils';\nimport {\n  GET_PARAMS,\n  LOCAL_STORAGE_KEYS,\n  MODALS,\n  WEBSITE_CUSTOM_EVENTS,\n  WORKSHEET_ACTION_TYPES,\n  // MOBILE_WIDTH\n} from '../config';\nimport toastr from 'toastr/toastr';\n\n\nconst isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\nif (isIE11) $('body').addClass('_ie11');\n\nconst showAdsBannerModal = () => {\n  const adsBannerModal = $('[data-selector=\"ads-banner-modal\"]:not(.inline-monetization)');\n  const adsBannerModalClose = $('[data-selector=\"ads-banner-modal-close\"]');\n\n  if(!adsBannerModal) return;\n\n  adsBannerModal.modal('show');\n\n  $(adsBannerModalClose).on('click', () => { adsBannerModal.modal('hide'); });\n};\n\nconst reloadHtmxAdsBanners = () => {\n  const ads = document.querySelectorAll('[hx-get]');\n  ads.forEach((item) => { htmx.process(item); });\n};\n\ndocument.addEventListener('adsBannerModalLoaded', showAdsBannerModal);\ndocument.addEventListener(WEBSITE_CUSTOM_EVENTS.RELOAD_HTMX_ADS_BANNERS, reloadHtmxAdsBanners);\n\n$(document).ready(function () {\n  // const startWorksheetDownload = () => {\n  //   // start download process\n  //   const pdfLink = $(MODALS.FREE_SIGN_UP_FOR_DOWNLOAD_W_DATA).attr('data-href');\n  //   function downloadURI(uri, name) {\n  //     const link = document.createElement(\"a\");\n  //     link.download = name; // <- name instead of 'name'\n  //     link.href = uri;\n  //     link.click();\n  //     link.remove();\n  //   }\n  //\n  //   downloadURI(pdfLink, 'worksheet.pdf');\n  // };\n\n  const data = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_TO_DOWNLOAD_DATA, true);\n  if (data) {\n    const worksheetId = data.split('_')[0];\n    const selector = data.split('_')[1];\n\n    const $worksheetItem = worksheetId && selector ? $(`[data-selector=\"${selector}\"][data-id=\"${worksheetId}\"]`) : null;\n\n    if ($worksheetItem) {\n      setTimeout(() => {\n        downloadWorksheetHandler(null, WORKSHEET_ACTION_TYPES.DOWNLOAD, $worksheetItem);\n      }, 1);\n    }\n  }\n\n  // ui notification settings\n  toastr.options = {\n    'closeButton': true,\n    'debug': false,\n    'newestOnTop': true,\n    'progressBar': true,\n    'positionClass': 'toast-top-right',\n    'preventDuplicates': false,\n    'onclick': null,\n    'showDuration': '300',\n    'hideDuration': '10000',\n    'timeOut': '5000',\n    'extendedTimeOut': '7000',\n    'showEasing': 'swing',\n    'hideEasing': 'linear',\n    'showMethod': 'fadeIn',\n    'hideMethod': 'fadeOut'\n  };\n\n  if (window.parentSubscriptionPastDueUntil) {\n    const showModalDelay = 2000;\n\n    setTimeout(function () {\n      $('#updatePaymentMethodModal').modal('show');\n    }, showModalDelay);\n  }\n\n  // show ads free modal by url get param\n  const adFreeGetParamValue = getUrlParam(GET_PARAMS.AD_FREE_MODAL);\n  if (adFreeGetParamValue === 'true') $(MODALS.WEBSITE_PLANS_MODAL).modal('show');\n\n  $('#logInModal').on('hidden.bs.modal', function () {\n    deleteUrlParam(GET_PARAMS.MAKE_REDIRECT);\n  });\n\n  const signUpPageUrl = '/sign-up/';\n  const parentSignUpUrl = '/sign-up/?type=parent';\n  const teacherSignUpUrl = '/sign-up/?type=teacher';\n\n  const parentSignUpModal = 'signUpParentModal';\n  const teacherSignUpModal = 'signUpTeacherModal';\n  const signUpModal = 'signUpModal';\n\n  const parentSignUpModalHash = '#signUpModal';\n  const teacherSignUpModalHash = '#signUpTeacherModal';\n\n  /**\n   * Do some redirects to make old links works after remove sign up modal and add sign up page\n   */\n  function doRedirectsOnPageLoad() {\n    if (window.location.pathname === signUpPageUrl) return;\n\n    if (window.role === 'teacher') {\n      window.location = teacherSignUpUrl;\n      return;\n    }\n\n    if (typeof Qs === 'undefined') return;\n    if (!Qs) return;\n    if (typeof Qs.parse !== 'function') return;\n\n    const queryObject = Qs.parse(location.search.substr(1));\n\n    if (queryObject.email && queryObject.email.length\n      && queryObject.modal === parentSignUpModal) {\n      window.location = parentSignUpUrl + '&email=' + queryObject.email + '&step=2';\n      return;\n    }\n\n    switch(queryObject.modal) {\n      case parentSignUpModal:\n        window.location = parentSignUpUrl;\n        break;\n\n      case teacherSignUpModal:\n        window.location = teacherSignUpUrl;\n        break;\n\n      case signUpModal:\n        window.location = parentSignUpUrl;\n        break;\n    }\n  }\n\n  /**\n   *  Handle change url hash to make old links works after remove sign up modal and add sign up page\n   */\n  $(window).on('hashchange', function () {\n    switch (window.location.hash) {\n      case parentSignUpModalHash:\n        window.location = parentSignUpUrl;\n        break;\n\n      case teacherSignUpModalHash:\n        window.location = teacherSignUpUrl;\n        break;\n    }\n  });\n\n  $.ajaxSetup({\n    cache: false,\n    beforeSend: function (xhr) {\n      const csrfToken = Cookies.get('csrftoken');\n      xhr.setRequestHeader('X-CSRFToken', csrfToken);\n    }\n  });\n\n  navigator.sayswho = (function () {\n    // TODO move to utils\n    const N = navigator.appName, ua = navigator.userAgent;\n    let tem;\n    let M = ua.match(/(opera|chrome|safari|firefox|msie)\\/?\\s*(\\.?\\d+(\\.\\d+)*)/i);\n    if (M && (tem = ua.match(/version\\/([\\.\\d]+)/i)) != null) M[2] = tem[1];\n    M = M ? [M[1], M[2]] : [N, navigator.appVersion, '-?'];\n    return M;\n  })();\n  if (navigator.sayswho[0] == 'Firefox' && parseFloat(navigator.sayswho[1]) < 5) {\n    const pos = $('.menu .menu-blue').offset();\n    $('ul.menu li ul.dropdown-menu').css('top', '155px');\n    $('ul.menu li ul.dropdown-menu').css('left', (pos.left - 11) + 'px');\n  }\n\n  const width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n  if (width < 350) {\n    $('.menu-blue').find('.js-title').text('WORKSHEETS');\n  } else {\n    $('.menu-blue').find('.js-title').text('FREE WORKSHEETS');\n  }\n\n  /**\n   * For IE 6-9\n   * set banner image url for simple img tag, shows banner image\n   */\n  const handleMainBannerImageLoad = function () {\n    const browserName = navigator.sayswho[0];\n    const browserVersion = navigator.sayswho[1];\n\n    if (browserName === 'MSIE' && browserVersion === '6.0'\n      || browserName === 'MSIE' && browserVersion === '7.0'\n      || browserName === 'MSIE' && browserVersion === '9.0'\n    ) {\n      const $mainBanner = $('[data-selector*=\"website-banner\"]');\n      const $mainBannerImg = $mainBanner.find('[data-selector*=\"banner-img-element\"]');\n      const mainBannerImgUrl = $mainBannerImg.first().attr('src');\n      const $pictureElement = $mainBanner.find('[data-selector*=\"banner-picture-elem\"]');\n      const $imgElementForIE = $mainBanner.find('[data-selector*=\"banner-ie-image\"]');\n\n      $pictureElement.hide();\n      $imgElementForIE.attr('src', mainBannerImgUrl);\n      $imgElementForIE.show();\n    }\n  };\n\n\n  doRedirectsOnPageLoad();\n  handleMainBannerImageLoad();\n});\n\n\nwindow.selectParentTab = function () {\n  const openParentSignUpUrl = '/sign-up/?accountType=0';\n  window.location = openParentSignUpUrl;\n};\n\nwindow.selectTeacherTab = function () {\n  const openTeacherSignUpUrl = '/sign-up/?accountType=1';\n  window.location = openTeacherSignUpUrl;\n};\n\n\n/***\n *  polyfill of `Array.prototype.find` for IE 11\n */\nif (!Array.prototype.find) {\n  Array.prototype.find = function(predicate) {\n    if (this == null) {\n      throw new TypeError('Array.prototype.find called on null or undefined');\n    }\n    if (typeof predicate !== 'function') {\n      throw new TypeError('predicate must be a function');\n    }\n    const list = Object(this);\n    const length = list.length >>> 0;\n    const thisArg = arguments[1];\n    let value;\n\n    for (let i = 0; i < length; i++) {\n      value = list[i];\n      if (predicate.call(thisArg, value, i, list)) {\n        return value;\n      }\n    }\n    return undefined;\n  };\n}\n\n/***\n *  polyfill of `Array.prototype.findIndex` for IE 11\n */\nArray.prototype.findIndex = Array.prototype.findIndex || function(callback) {\n  if (this === null) {\n    throw new TypeError('Array.prototype.findIndex called on null or undefined');\n  } else if (typeof callback !== 'function') {\n    throw new TypeError('callback must be a function');\n  }\n  const list = Object(this);\n  // Makes sures is always has an positive integer as length.\n  const length = list.length >>> 0;\n  const thisArg = arguments[1];\n  for (let i = 0; i < length; i++) {\n    if ( callback.call(thisArg, list[i], i, list) ) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n/**\n * Hide bottom adsense\n */\n$(document).on('click', '[data-selector=\"bottom-adsense-close\"]', () => {\n  const $bottomAdsense = $('[data-selector=\"bottom-adsense\"]');\n  const $footer = $('[data-selector=\"footer\"]');\n  $bottomAdsense.hide();\n  $footer.removeClass('_has-adsense');\n});\n\n\n// document.addEventListener('DOMContentLoaded', function (_) {\n  // const DESKTOP = 'desktop';\n  // const MOBILE = 'mobile';\n  // const adsenseTypeAttr = 'data-adsense-type';\n  //\n  // const desktopAdsense = `[${adsenseTypeAttr}=\"${DESKTOP}\"]`;\n  // const mobileAdsense = `[${adsenseTypeAttr}=\"${MOBILE}\"]`;\n  // const $desktopAdsense = $(desktopAdsense);\n  // const $mobileAdsense = $(mobileAdsense);\n  //\n  // if (window.innerWidth <= MOBILE_WIDTH) {\n  //   // mobile\n  //   $desktopAdsense.each((_, elem) => {\n  //     elem.parentElement && elem.parentElement.removeChild(elem);\n  //   });\n  // } else {\n  //   // desktop\n  //   $mobileAdsense.each((_, elem) => {\n  //     elem.parentElement && elem.parentElement.removeChild(elem);\n  //   });\n  // }\n// });\n\nif ($('[data-url=\"ad-free-subscription\"]').length) {\n  ga('send', 'event', 'Add_free_subscriptions', 'Show', 'Load');\n\n  const $plansModal = $(MODALS.WEBSITE_PLANS_MODAL);\n  $plansModal.find('.close.custom-modal__close').hide();\n\n\n  $plansModal.modal({backdrop: 'static', keyboard: false});\n  $plansModal.modal('show');\n}\n\n\n(function () {\n/**\n * add/remove mobile filter grey overlay on learning resources pages\n */\nconst mobileFilterOverlay = '[data-selector=\"mobile-filter-overlay\"]';\nconst filterCloseBtn = '#filter-inner-close';\nconst filterOpenBtn = '#filters-mob-open';\n\n$(document)\n  .on('click', mobileFilterOverlay, () => {\n    $(filterCloseBtn).trigger('click');\n    $(mobileFilterOverlay).fadeOut();\n  })\n  .on('click', filterCloseBtn, () => {\n    $(mobileFilterOverlay).fadeOut();\n  })\n  .on('click', filterOpenBtn, () => {\n    const overlay = `<span style=\"position: fixed;\n                                  z-index: 2;\n                                  background: rgb(0 0 0 / 35%);\n                                  top: 0;\n                                  right: 0;\n                                  left: 0;\n                                  bottom: 0;\"\n                                  data-selector=\"mobile-filter-overlay\"\n                                  ></span>`;\n    $('body').append(overlay);\n  });\n}());\n\n\nconst homeJoinKidsAcademyModalButton = '[data-selector=\"show-join-kids-academy-modal\"]';\n$(document).on('click', homeJoinKidsAcademyModalButton, (e) => {\n  e.preventDefault();\n  showJoinKidsAcademyModal({ checkStorage: false });\n});\n","import {\n  ACCOUNT_TYPES_STRING,\n  ENDPOINT,\n  GET_PARAMS,\n  RESPONSE_CODES,\n  SUBJECTS,\n  URLS,\n  PROMO_LANDINGS_URLS,\n  ERROR_CODES,\n  LOCAL_STORAGE_KEYS,\n  MODALS,\n} from '../config';\nimport {\n  fixPlusSymbolInProvidedEmail,\n  getUrlParam,\n  deleteUrlParam,\n  replaceEmailWithLink,\n  toggleButtonLoading,\n  isFormValid,\n  isWebGamesPage,\n  storage,\n} from '../utils';\n\n\n$(document).ready(function () {\n  const $loginPage = $('[data-selector=\"log-in-page\"]');\n  const $logInModal = $('[data-selector=\"log-in-modal\"]');\n  const $kindsAcademyCom = $('[data-selector=\"kidsacademy-com-static\"]');\n\n  if (!$loginPage.length && !$logInModal.length && !$kindsAcademyCom.length) return;\n\n  const noRedirectAttrName = 'data-no-redirect';\n\n  const schoolLoginForm = '[data-selector=\"school-login-form\"]';\n  const familyLoginForm = '[data-selector=\"family-login-form\"]';\n\n  const specialInputSelector = '[data-selector=\"login-special-input\"]';\n  const loginEmailInput = '[data-selector=\"login-email-input\"]';\n  const loginPasswordInput = '[data-selector=\"login-password-input\"]';\n  const loginSubmitBtn = '[data-selector=\"login-submit-btn\"]';\n  const $loginError = tabId => $(`[data-selector=\"${tabId}-login-error\"]`);\n\n  const resetForm = '[data-selector=\"reset-form\"]';\n  const $resetForm = $(resetForm);\n  const resetSubmit = '[data-selector=\"reset-submit\"]';\n\n  const $mainMenuNavbar = $('[data-selector=\"main-menu-navbar\"]');\n  const $mainMenuDropdown = $('[data-selector=\"main-menu-dropdown\"]');\n  const menuResizeBreakpoint = '991px';\n\n  const $appDropdownToggle = $('[data-selector=\"app-dropdown-toggle\"]');\n  const $appDropdownMenu =  $('[data-selector=\"app-dropdown-menu\"]');\n  const $appDropdown = $('[data-selector=\"app-dropdown\"]');\n\n  const onPageLoad = () => {\n    openTabByGetParam();\n    setEmailFromGetParam();\n    initLoginTooltip();\n    handleLoginRedirectError();\n  };\n\n  const openTabByGetParam = () => {\n    const accountType = getUrlParam(GET_PARAMS.ACCOUNT_TYPE);\n    const $tabToOpen = $(`[data-tab=\"${accountType}\"]`);\n    $tabToOpen.tab('show');\n  };\n\n  const setEmailFromGetParam = () => {\n    const providedEmail = getUrlParam(GET_PARAMS.EMAIL);\n    if(!providedEmail) return;\n\n    const $familyEmailInput = $(loginEmailInput);\n    $familyEmailInput.each((_, elem) => {\n      $(elem).val(fixPlusSymbolInProvidedEmail(providedEmail));\n    });\n  };\n\n  const handleLoginRedirectError = () => {\n    const url = new URL(window.location.href);\n    const tabId = url.searchParams.get(GET_PARAMS.ACCOUNT_TYPE);\n    const error = url.searchParams.get(GET_PARAMS.ERROR);\n\n    if (tabId && tabId.length && error && error.length) {\n      const text = replaceEmailWithLink(error);\n      $loginError(tabId).html(text).show();\n    }\n  };\n\n  const resetParsleyErrors = () => {\n    $(familyLoginForm).each((_, form) => $(form).parsley().reset());\n    $(schoolLoginForm).each((_, form) => $(form).parsley().reset());\n  };\n\n  // init clever tooltip for login (login modal, login page)\n  const initLoginTooltip = () => {\n    $('[data-toggle=\"tooltip\"]').tooltip({\n      placement: 'auto bottom',\n      container: 'body'\n    });\n  };\n\n  const toggleFormLoading = ($form, isLoading) => {\n    const $submitBtn = $form.find(loginSubmitBtn);\n    toggleButtonLoading($submitBtn, isLoading);\n  };\n\n  const hideLoginFormError = () => {\n    $loginError(ACCOUNT_TYPES_STRING.PARENT).hide();\n    $loginError(ACCOUNT_TYPES_STRING.TEACHER).hide();\n  };\n\n  //handle form submit request errors\n  const handleLoginError = (error, $errorBlock, tabName) => {\n    if (error.redirect_url) {\n      window.location.href = error.redirect_url;\n      return;\n    }\n\n    $loginError(tabName).hide();\n    let errorMessage = '';\n\n    if (error && error.error && error.error_code) {\n      if (error.error_code === ERROR_CODES.HAS_NO_SCHOOL_DISTRICT) {\n        window.location.pathname = URLS.SIGN_UP_TEACHER;\n        return;\n\n      } else if (error.error_code === ERROR_CODES.AUTH_STUDENT_USER) {\n        errorMessage = `Website login is for teachers and administrators only.\n                        Students need to log on in the\n                        apps: <a href=\"/apps\">Click here for download links</a>`;\n\n      } else if (error.error.indexOf('contact support') > -1) {\n        let subject = SUBJECTS[RESPONSE_CODES[error.error_code]];\n        if (!subject) subject = '';\n        errorMessage = error.error.replace(\n          'contact support',\n          `<a href=\"mailto:info@kidsacademy.mobi?subject=${subject}\">contact support</a>`\n        );\n\n      } else {\n        errorMessage = 'Email or password is invalid';\n      }\n\n      $errorBlock.html(errorMessage);\n      $errorBlock.show();\n    }\n  };\n\n  const getActivePointAppDropdownMenu = () => {\n    const $curURL = document.location.pathname;\n    $appDropdownMenu.children().each(function() {\n      const $linkHref = $(this).find('a').attr('href');\n      if ($curURL.indexOf($linkHref) > -1 && $curURL.length === $linkHref.length) {\n\t\t\t  $(this).addClass('active');\n\t\t  } else {\n        $(this).removeClass('active');\n      }\n    });\n  };\n\n  const initAppsDropdown = () => {\n    const $curURL = document.location.pathname;\n    const $appLinkHref = $appDropdown.find('a').attr('href');\n\n    if ($curURL.indexOf($appLinkHref) > -1) {\n      $appDropdown.addClass('open');\n      $appDropdownMenu.show();\n    }\n  };\n\n  // handle family login form submit\n  $(document)\n    .on('submit', familyLoginForm, (e) => {\n      e.preventDefault();\n\n      const $form = $(e.target).closest(familyLoginForm);\n\n      // To prevent bot spamming we use solution from https://www.thryv.com/blog/honeypot-technique/\n      const hiddenInputVal = $form.find(specialInputSelector).val();\n      if (hiddenInputVal) return;\n\n      const email = $form.find(loginEmailInput).val();\n      const password = $form.find(loginPasswordInput).val();\n      const $errorBlock = $form.find($loginError(ACCOUNT_TYPES_STRING.PARENT));\n      const loginParsleyForm = $form.parsley();\n\n      loginParsleyForm.validate();\n      if (!loginParsleyForm.isValid()) return;\n\n      hideLoginFormError();\n      toggleFormLoading($form, true);\n\n      ga('send', 'event', 'Button', 'Login', 'Parent');\n\n      $.ajax({\n        url: ENDPOINT.USER_LOGIN,\n        contentType: 'application/json',\n        type: 'POST',\n        data: JSON.stringify({\n          username: email,\n          password: password\n        })\n      }).then((response) => {\n        if (response && response.error_code) {\n          handleLoginError(response, $errorBlock, ACCOUNT_TYPES_STRING.PARENT);\n          return;\n        }\n        if (window.fwdUrl) {\n          window.location.href = window.fwdUrl;\n          return;\n        }\n\n        if (isWebGamesPage()) {\n          // only for web games page\n          storage.set(LOCAL_STORAGE_KEYS.SHOW_WEB_GAMES_SUBSCRIPTION_MODAL, true);\n          return window.location.reload();\n        }\n\n        let coupon = getUrlParam(GET_PARAMS.COUPON);\n        const nextParam = getUrlParam(GET_PARAMS.NEXT);\n\n        if(!coupon && nextParam) {\n          const nextUrl = new URL(window.origin + nextParam);\n          coupon = new URLSearchParams(nextUrl.search).get(GET_PARAMS.COUPON);\n        }\n\n        const couponGetParam = coupon ? `${GET_PARAMS.COUPON}=${coupon}` : '';\n\n        // for users who logged in from modal on lp promo pages (worksheets, reading, math)\n        if (PROMO_LANDINGS_URLS.indexOf(location.pathname) > -1) {\n          if (response.has_parent_subscription) {\n            window.location = `${window.location.origin}/${URLS.PARENT_SUBSCRIPTION_SUCCESS}`;\n            return;\n          }\n\n          // reload the page if user doesnt has parent subscription\n          // (do not redirect user from current page)\n          window.location.reload();\n          return;\n        }\n\n        // if user logged in from promo subscription section\n        // (button that opens login modal and set GET_PARAMS.MAKE_REDIRECT param to url\n        // is in the error message in subscription-promo-payment)\n        if (getUrlParam(GET_PARAMS.MAKE_REDIRECT)) {\n          if (response.has_parent_subscription) {\n            window.location.href = `${window.location.origin}/${URLS.PARENT_SUBSCRIPTION_SUCCESS}`;\n            return;\n          }\n\n          if (couponGetParam) {\n            const nextPath = `${window.location.origin}/${URLS.PARENT_SUBSCRIPTION_PLANS}`;\n            window.location.href = `${nextPath}?${couponGetParam}`;\n            return;\n          }\n\n          // Don't redirect from page with promo subscription section\n          // in case user doesn't have any active subscriptions\n          if (!response.has_parent_subscription) {\n            deleteUrlParam(GET_PARAMS.MAKE_REDIRECT);\n            window.location.reload();\n            return;\n          }\n        }\n\n        if (response && response.redirect_url) {\n          const emailParam = `email=${btoa(email)}`;\n          const getParams = couponGetParam ? `?${couponGetParam}&${emailParam}` : `?${emailParam}`;\n          window.location.href = response.redirect_url + getParams;\n        }\n      }, (error) => {\n        toggleFormLoading($form, false);\n        handleLoginError(JSON.parse(error.responseText), $errorBlock, ACCOUNT_TYPES_STRING.PARENT);\n      });\n    })\n    // handle school login form submit\n    .on('submit', schoolLoginForm, (e) => {\n      e.preventDefault();\n\n      const $form = $(e.target).closest(schoolLoginForm);\n      // To prevent bot spamming we use solution from https://www.thryv.com/blog/honeypot-technique/\n      const hiddenInputVal = $form.find(specialInputSelector).val();\n      if (hiddenInputVal) return;\n\n      const noNeedToRedirectFlag = $logInModal.attr(noRedirectAttrName) === 'true';\n      const username = $form.find(loginEmailInput).val();\n      const password = $form.find(loginPasswordInput).val();\n      const $errorBlock = $loginError(ACCOUNT_TYPES_STRING.TEACHER);\n      const loginParsleyForm = $form.parsley();\n\n      loginParsleyForm.validate();\n      if (!loginParsleyForm.isValid()) return;\n\n      hideLoginFormError();\n      toggleFormLoading($form, true);\n\n      ga('send', 'event', 'Button', 'Login', 'Teacher');\n\n      $.ajax({\n        url: ENDPOINT.USER_LOGIN,\n        method: 'POST',\n        contentType: 'application/json',\n        data: JSON.stringify({username: username, password: password})\n      }).then((response) => {\n        if (response && response.error_code) {\n          handleLoginError(response, $errorBlock, ACCOUNT_TYPES_STRING.TEACHER);\n          return;\n        }\n\n        if (noNeedToRedirectFlag) {\n          location.reload();\n          return;\n        }\n\n        if (window.URLSearchParams) {\n          const searchParams = new URLSearchParams(window.location.search);\n          if (searchParams.has(GET_PARAMS.NEXT)) {\n            window.location.href = searchParams.get(GET_PARAMS.NEXT);\n            return;\n          }\n        }\n\n        if (response && response.redirect_url) window.location.href = response.redirect_url;\n      }, (error) => {\n        toggleFormLoading($form, false);\n        handleLoginError(JSON.parse(error.responseText), $errorBlock, ACCOUNT_TYPES_STRING.TEACHER);\n      });\n    })\n    //trigger on tab change event\n    .on('click', '[data-toggle=\"tab\"]', () => {\n      resetParsleyErrors();\n      hideLoginFormError();\n    })\n    // password & pincode reset\n    .on('click', resetSubmit, () => {\n      isFormValid($resetForm);\n    });\n\n  $logInModal.on('show.bs.modal', resetParsleyErrors);\n\n  $logInModal.on('hide.bs.modal', (e) => $(e.currentTarget).attr(noRedirectAttrName, false));\n\n  $mainMenuNavbar\n    .on('show.bs.collapse', () => {\n      if (window.matchMedia(`(max-width: ${menuResizeBreakpoint})`).matches) {\n        $mainMenuDropdown.addClass('open');\n      }\n    })\n    .on('hidden.bs.collapse', () => $mainMenuDropdown.removeClass('open'));\n\n  $(window).resize(() => {\n    if (window.matchMedia(`(max-width: ${menuResizeBreakpoint})`).matches) {\n      $mainMenuDropdown.addClass('open');\n      $appDropdown.addClass('open');\n      return;\n    }\n\n    if (window.matchMedia(`(min-width: ${menuResizeBreakpoint})`).matches) {\n      $mainMenuDropdown.removeClass('open');\n      $appDropdown.removeClass('open');\n    }\n  });\n\n  $appDropdownToggle.on('click', (e) => {\n    e.preventDefault();\n\n    if (window.matchMedia(`(max-width: ${menuResizeBreakpoint})`).matches) return;\n\n    if (!$appDropdown.hasClass('open')) {\n      $appDropdown.addClass('open');\n    } else {\n      $appDropdown.removeClass('open');\n    }\n\n    $appDropdownMenu.slideToggle();\n  });\n\n  initAppsDropdown();\n  getActivePointAppDropdownMenu();\n  onPageLoad();\n});\n\n\n/* eslint-disable max-len */\n// prevent mouse wheel click on download worksheet btn click\n$(document).on('auxclick', '[data-selector=\"learning-resources-download\"], [data-selector=\"download-worksheet-link\"]', (e) => {\n  if (e.button === 1) e.preventDefault();\n});\n/* eslint-enable max-len */\n","import {\n  MODALS,\n  MIDDLE_WIDTH,\n  // SHOW_ADDS_FREE_MODAL_DELAY\n} from '../config';\nconst $document = $(document);\n\n$document.ready(function () {\n  const $header = $('[data-selector=\"header\"]');\n  if (!$header.length) return;\n\n  $('#show-tgc-paywall').on('click', () => {\n    $(MODALS.TGC_PAYWALL_MODAL_NEW).modal('show');\n  });\n\n  const addsFreeHeaderBtn = '[data-selector=\"add-free-header-btn\"]';\n  const addsFreeModalBtn = '[data-selector=\"add-free-modal-btn\"]';\n  const headerAppDropdownToggleBtn = '[data-selector=\"app-dropdown-toggle\"]';\n  const headerAppDropdownArrow = '[data-selector=\"header-app-dropdown-arrow\"]';\n  const headerDropdownList = '[data-selector=\"header-dropdown-list\"]';\n  const mainMenuDropdown = '[data-selector=\"main-menu-dropdown\"]';\n\n  const appDropdown = '[data-selector=\"app-dropdown\"]';\n  const appDropdownMenu = '[data-selector=\"app-dropdown-menu\"]';\n  let addsFreeModalBtnClicked = false;\n\n  $document\n    .on('click', headerAppDropdownToggleBtn, (e) => {\n      e.stopPropagation();\n      e.preventDefault();\n\n      if (window.innerWidth <= MIDDLE_WIDTH) {\n        const $btn = $(e.currentTarget);\n        $btn.find(headerAppDropdownArrow).toggleClass('_closed');\n\n        // toggle slide apps menu\n        const $appDropdownMenu = $btn.closest(appDropdown).find(appDropdownMenu);\n        $appDropdownMenu.slideToggle();\n\n        if (!$appDropdownMenu.length) {\n          const $headerDropdownList = $btn.closest(mainMenuDropdown).find(headerDropdownList);\n          $headerDropdownList.slideToggle();\n        }\n      }\n    })\n    .on('click', addsFreeHeaderBtn, () => {\n      ga('send', 'event', 'Ad-Free Click', 'Ad-Free Click', 'Click');\n      $(MODALS.WEBSITE_PLANS_MODAL).modal('show');\n    })\n    .on('click', addsFreeModalBtn, () => {\n      addsFreeModalBtnClicked = true;\n      ga('send', 'event', 'Adsence_PopUp', 'Ad-Free Click', 'Click');\n      $(MODALS.ADDS_FREE).modal('hide');\n    });\n\n  $(MODALS.ADDS_FREE).on('hidden.bs.modal', () => {\n    if (!addsFreeModalBtnClicked) return;\n    $(MODALS.WEBSITE_PLANS_MODAL).modal('show');\n  });\n\n  // setTimeout(() => {\n  //   const currentUrl = $('[data-url]').attr('data-url');\n  //   if (currentUrl !== 'sitemap') return;\n  //\n  //   $(MODALS.ADDS_FREE).modal('show');\n  //   ga('send', 'event', 'Adsence_PopUp', 'Show', 'Load');\n  // }, SHOW_ADDS_FREE_MODAL_DELAY);\n});\n","import {\n  SECONDS_PER_DAY,\n  SECONDS_PER_HOUR,\n  SECONDS_PER_MINUTE\n} from '../config';\n\n$(document).ready(() => {\n  const $timer = $('[data-selector=\"main-banner-timer\"]');\n  if (!$timer.length) return;\n\n  const timerExpiresAttr = 'data-expires';\n\n  //timer panel sections' attributes\n  const days = 'main-banner-timer-days';\n  const hours = 'main-banner-timer-hours';\n  const minutes = 'main-banner-timer-mins';\n  const seconds = 'main-banner-timer-secs';\n\n\n  const formatNumberForDisplay = (string) => {\n    return string.toLocaleString('en-US', {\n      minimumIntegerDigits: 2\n    });\n  };\n\n  const secondsToDhms = (seconds) => {\n    const fullDaysLeft = Math.floor(seconds / SECONDS_PER_DAY);\n    const hoursRemain = seconds % SECONDS_PER_DAY;\n    const fullHoursLeft = Math.floor(hoursRemain / SECONDS_PER_HOUR);\n    const minsRemain = hoursRemain % SECONDS_PER_HOUR;\n    const fullMinsLeft = Math.floor(minsRemain / SECONDS_PER_MINUTE);\n    const secondsLeft = minsRemain % SECONDS_PER_MINUTE;\n\n    return {\n      fullDaysLeft,\n      fullHoursLeft,\n      fullMinsLeft,\n      secondsLeft\n    };\n  };\n\n  const setTimerValue = ($timer, secondsInterval) => {\n    const {fullDaysLeft, fullHoursLeft, fullMinsLeft, secondsLeft} = secondsToDhms(secondsInterval);\n    const timerData = {\n        [days]: formatNumberForDisplay(fullDaysLeft),\n        [hours]: formatNumberForDisplay(fullHoursLeft),\n        [minutes]: formatNumberForDisplay(fullMinsLeft),\n        [seconds]: formatNumberForDisplay(secondsLeft)\n      };\n\n    for (const [timerSectionAttr, value] of Object.entries(timerData)) {\n      $timer.find(`[data-selector=${timerSectionAttr}]`).text(value);\n    }\n  };\n\n  const setTimer = ($timer, timerInterval) => {\n    let secondsLeft = Math.floor(timerInterval / 1000);\n\n    setTimerValue($timer, secondsLeft); // set timer immediately the first time to avoid delay\n    const countdown = setInterval(() => {\n      if (--secondsLeft <= 0) clearInterval(countdown);\n\n      setTimerValue($timer, secondsLeft);\n    }, 1000);\n  };\n\n  const dateDiffUTC = (dateFrom, dateUntil) => {\n    const dateFromToUTC = new Date(dateFrom.toUTCString());\n    const dateUntilToUTC = new Date(dateUntil.toUTCString());\n    return dateUntilToUTC - dateFromToUTC;\n  };\n\n  const handleTimerInit = (index, timerElement) => {\n    const $timer = $(timerElement);\n    const timerExpires = $timer.attr(timerExpiresAttr);\n    const timerExpiresDate = new Date(timerExpires);\n\n    const timerInterval = timerExpiresDate ? dateDiffUTC(new Date(), timerExpiresDate) : null;\n\n    !timerInterval || timerInterval <= 0\n      ? setTimerValue($timer, 0)\n      : setTimer($timer, timerInterval);\n  };\n\n  $timer.each(handleTimerInit.bind(this));\n});\n","import {\n  ENDPOINT,\n  GET_PARAMS\n} from '../config';\nimport Qs from 'qs';\nimport {deleteGetParamFromUrl} from '../utils';\n\n\n$(document).ready(function () {\n  const notification = '[data-selector=\"notification\"]';\n  const $notification = $(notification);\n  if (!$notification.length) return;\n\n  const headerUserDropDown = '[data-selector=\"header-user-dropdown\"]';\n\n  const notificationDropdownClose = '[data-selector=\"notification-close-btn\"]';\n  const notificationDropdownToggleBtn = '[data-selector=\"notification-toggle-btn\"]';\n  const $notificationDropdown = $('[data-selector=\"notification-dropdown\"]');\n  const notificationMarkAsRead = '[data-selector=\"notification-mark-all-as-read\"]';\n  const notificationMessageLink = '[data-selector=\"notification-message-link\"]';\n  const $notificationContainer = $('[data-selector=\"header-notification\"]');\n  const $notificationActiveIcon = $('[data-selector=\"notification-active-icon\"]');\n  const $notificationInActiveIcon = $('[data-selector=\"notification-inactive-icon\"]');\n\n  const accSettingsMessagesBtn = '[data-selector=\"account-settings-my-messages-btn\"]';\n  const $messagesContentList = $('[data-selector=\"messages-content-list\"]');\n  const messagePreviewText = '[data-selector=\"message-preview-text\"]';\n  const $messagePreviewList = $('[data-selector=\"message-preview-list\"]');\n  const messageIdDataAttr = 'data-message-id';\n  const allNotReaderMessageIdsDataAttr = 'data-all-messages-ids';\n  const markAllAsReadBtn = '[data-selector=\"messages-mark-all-as-read-btn\"]';\n  const messageBackBtn = '[data-selector=\"messages-back-btn\"]';\n  const $messageTopTitle = $('[data-selector=\"messages-top-title\"]');\n\n  const messageReadClassName = '_is-read';\n\n\n  const showMessageById = (messageId) => {\n    const currentMessageSelector = `[${messageIdDataAttr}=\"${messageId}\"]`;\n    const $messagePreviewItem = $messagePreviewList.find(currentMessageSelector);\n\n    $messagePreviewItem.click();\n  };\n\n  const markMessageAsReadOnUI = (messageId) => {\n    const currentMessageSelector = `[${messageIdDataAttr}=\"${messageId}\"]`;\n    const $messagePreviewItem = $messagePreviewList.find(currentMessageSelector);\n    const $headerMessageItem = $notificationContainer.find(currentMessageSelector);\n\n    $messagePreviewItem.addClass(messageReadClassName);\n    $headerMessageItem.addClass(messageReadClassName);\n  };\n\n  const openMessageOnPageLoad = () => {\n    const queryObject = Qs.parse(location.search.substr(1));\n    const messageId = queryObject[GET_PARAMS.MESSAGE_ID];\n    if (!messageId) return;\n\n    messageId.replace('/','');\n    const currentMessageSelector = `[${messageIdDataAttr}=\"${messageId}\"]`;\n    const $messagePreviewItem = $messagePreviewList.find(currentMessageSelector);\n    $messagePreviewItem.click();\n  };\n\n  const sendMessagesReadRequest = (messageIdsArray=null) => {\n    $.ajax({\n      url: ENDPOINT.NOTIFICATION_MARK_AS_READ,\n      type: 'POST',\n      contentType: 'application/json',\n      data: JSON.stringify({ids: messageIdsArray})\n    }).then((response) => {\n      if (!response.has_unread_messages) {\n        $(markAllAsReadBtn).hide();\n        $(notificationMarkAsRead).hide();\n        makeNotificationIconInactive();\n      }\n    });\n  };\n\n  const makeNotificationIconInactive = () => {\n    $notificationActiveIcon.hide();\n    $notificationInActiveIcon.show();\n  };\n\n  const updateUrlWithMessageIdGetParam = (messageId) => {\n    if (window.history.replaceState) {\n      // eslint-disable-next-line max-len\n      const newUrl = `${location.origin}${location.pathname}?${GET_PARAMS.MESSAGE_ID}=${messageId}/#my-messages`;\n      history.pushState({}, null, newUrl);\n    }\n  };\n\n\n  $(document)\n    // header \"mark all as read\" btn click\n    .on('click', notificationMarkAsRead, () => {\n      const notReadMessagesIdsArray = $notificationContainer\n                                        .attr(allNotReaderMessageIdsDataAttr)\n                                        .split(' ');\n      notReadMessagesIdsArray.splice(-1,1); // remove extra/empty array item (last)\n      notReadMessagesIdsArray.forEach((id) => {markMessageAsReadOnUI(id);});\n\n      sendMessagesReadRequest(null);\n      makeNotificationIconInactive();\n    })\n    // my account. message preview item click\n    .on('click', messagePreviewText, (e) => {\n      const $messageTextItem = $(e.currentTarget);\n      const messageId = $messageTextItem.attr(messageIdDataAttr);\n      const currentMessageSelector = `[${messageIdDataAttr}=\"${messageId}\"]`;\n      const $messageContentItem = $messagesContentList.find(currentMessageSelector);\n      const $messageContentAllItems = $messagesContentList.find(`[${messageIdDataAttr}]`);\n\n      $messagePreviewList.hide();\n      $messageContentAllItems.hide();\n      $messageContentItem.show();\n      $(messageBackBtn).show();\n      $messageTopTitle.hide();\n      $(markAllAsReadBtn).hide();\n\n      if (!$messageTextItem.hasClass(messageReadClassName)) {\n        markMessageAsReadOnUI(messageId);\n        sendMessagesReadRequest([messageId]);\n      }\n\n      updateUrlWithMessageIdGetParam(messageId);\n    })\n    // header. message item click\n    .on('click', notificationMessageLink, (e) => {\n      // prevent page reload, and just show message\n      if ($(accSettingsMessagesBtn).length) {\n        e.preventDefault();\n        $(accSettingsMessagesBtn).click();\n        const $messageLink = $(e.currentTarget);\n        const messageId = $messageLink.attr(messageIdDataAttr);\n\n        if (!$messageLink.hasClass(messageReadClassName)) {\n          markMessageAsReadOnUI(messageId);\n          sendMessagesReadRequest([messageId]);\n        }\n\n        updateUrlWithMessageIdGetParam(messageId);\n        showMessageById(messageId);\n      }\n\n      $notificationDropdown.hide();\n    })\n    // header. dropdown hide btn\n    .on('click', notificationDropdownClose, () => {\n      $notificationDropdown.hide();\n    })\n    // header. dropdown show/hide btn click\n    .on('click', notificationDropdownToggleBtn, () => {\n      $notificationDropdown.toggle();\n    })\n    // click on any elem except notification dropdown to hide the dropdown\n    .on('click', (e) => {\n      e.stopPropagation();\n      if (!$(e.target).closest(notification).length) $notificationDropdown.hide();\n    })\n    // acc settings. \"mark all as read\" btn click\n    .on('click', markAllAsReadBtn, () => {\n      const messagePreviewItems = $(messagePreviewText);\n      const $notReadPreviewMessageItems = messagePreviewItems.not(`.${messageReadClassName}`);\n      const notReadMessagesIdsArray = [];\n\n      $notReadPreviewMessageItems.each((i, message) => {\n        notReadMessagesIdsArray.push($(message).attr(messageIdDataAttr));\n      });\n\n      notReadMessagesIdsArray.forEach((id) => {markMessageAsReadOnUI(id);});\n\n      sendMessagesReadRequest(null);\n      makeNotificationIconInactive();\n      $notificationDropdown.hide();\n      $(markAllAsReadBtn).html('');\n    })\n    // acc settings. my-messages nav btn click\n    .on('click', accSettingsMessagesBtn, () => {\n      $(messageBackBtn).click();\n      deleteGetParamFromUrl(GET_PARAMS.MESSAGE_ID);\n      ga('send', 'event', 'Account settings', 'Message Page', 'Visit');\n    })\n    // acc settings. back to messages preview btn click\n    .on('click', messageBackBtn, () => {\n      const $messageContentAllItems = $messagesContentList.find(`[${messageIdDataAttr}]`);\n      $messagePreviewList.show();\n      $messageContentAllItems.hide();\n      $(messageBackBtn).hide();\n      $messageTopTitle.show();\n      $(markAllAsReadBtn).show();\n      deleteGetParamFromUrl(GET_PARAMS.MESSAGE_ID);\n    })\n    .on('click', headerUserDropDown, () => {\n      $notificationDropdown.hide();\n    });\n\n  openMessageOnPageLoad();\n});\n","import {\n  LOCAL_STORAGE_KEYS,\n  MODALS\n} from '../config';\nimport {storage} from '../utils';\n\n\n$(document).ready( () => {\n  const $websiteAccountTypeModal = $(MODALS.ACCOUNT_TYPE_MODAL);\n  if (!$websiteAccountTypeModal.length) return;\n\n  const websiteAccountTypeRadio = '[data-selector=\"website-signup-radio\"]';\n\n  const resetWebsiteAccountTypeModal = () => {\n    $websiteAccountTypeModal.find('input').each((index, item) => {\n      $(item).prop('checked', false);\n    });\n  };\n\n  $(document)\n    .on('change', websiteAccountTypeRadio, (e) => {\n      $websiteAccountTypeModal.modal('hide');\n      resetWebsiteAccountTypeModal();\n\n      const accountType = e.target.value;\n      switch(accountType) {\n        case 'parent':\n          ga('send', 'event', 'Monetization3_PopUp_Init', 'Parent', 'Click');\n          break;\n        case 'teacher':\n          ga('send', 'event', 'Monetization3_PopUp_Init', 'Teacher', 'Click');\n          break;\n        case 'student':\n          ga('send', 'event', 'Monetization3_PopUp_Init', 'Student', 'Click');\n          break;\n      }\n\n      storage.set(LOCAL_STORAGE_KEYS.WEBSITE_ACCOUNT_TYPE, accountType);\n\n      $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('show');\n    });\n\n  $(MODALS.ACCOUNT_TYPE_MODAL).on('shown.bs.modal', () => {\n    ga('send', 'event', 'Monetization3_PopUp_Init', 'PopUp_Shown', 'Load');\n  });\n});\n","import {MODALS} from '../config';\n\n$(document).ready(function () {\n  const confirmRegistrationBtnSelector = '[data-selector=\"confirm-registration\"]';\n  const $websiteAccountTypeModal = $(MODALS.ACCOUNT_TYPE_MODAL);\n  const $websiteQuestionFavouritesModal = $(MODALS.WEBSITE_QUESTION_FAVOURITES_MODAL);\n  const $websiteQuestionDoneModal = $(MODALS.WEBSITE_QUESTION_DONE_MODAL);\n\n  $(document)\n    .on('click', confirmRegistrationBtnSelector, () => {\n      $websiteQuestionDoneModal.modal('hide');\n      $websiteQuestionFavouritesModal.modal('hide');\n\n      $(MODALS.WORKSHEET_IMAGE_POPUP).modal('hide');\n      $websiteAccountTypeModal.modal('show');\n    });\n});\n","import {\n  CURRENCY,\n  ENDPOINT,\n  GET_PARAMS\n} from '../config';\n\n\nexport const toggleApplyCouponBtn = (couponInput, applyCouponBtn, couponBlockParams) => {\n  const { emptyCouponClass } = couponBlockParams;\n\n  if (couponInput.val()) {\n    applyCouponBtn.removeClass(emptyCouponClass);\n    return;\n  }\n\n  applyCouponBtn.addClass(emptyCouponClass);\n};\n\nexport const toggleCouponBlock = (couponBlock, toggleCouponBlockBtn, couponBlockParams) => {\n  const { activeClass, showCouponText, hideCouponText } = couponBlockParams;\n  // hide coupon block\n  if (couponBlock.hasClass(activeClass)) {\n    couponBlock.removeClass(activeClass);\n    toggleCouponBlockBtn.html(showCouponText);\n    couponBlock.hide();\n    return;\n  }\n\n  // show coupon block\n  couponBlock.show();\n  toggleCouponBlockBtn.html(hideCouponText);\n  couponBlock.addClass(activeClass);\n};\n\n// check is coupon a distributor code\nexport const doCheckIsCouponDistributorCode = (coupon) =>\n  $.ajax({\n    url: ENDPOINT.GIFT_CODE_VALIDATE,\n    contentType: 'application/json',\n    type: 'POST',\n    data: JSON.stringify({\n      code: coupon\n    })\n  });\n\nexport const handleDropinToken = (callback = () => {}, errorHandler = () => {}) => {\n  if (window.braintree_token) {\n    callback();\n    return null;\n  }\n\n  $.ajax({\n    url: ENDPOINT.GET_BRAINTREE_TOKEN,\n    contentType: 'application/json',\n    type: 'GET'\n  }).then((data) => {\n      window.braintree_token = data.token;\n      callback();\n    }, (err) => {\n      errorHandler(err);\n    });\n};\n\nexport const getSelectedOfferDetails = (selectedOffer, amountOff=0, planAttr, userEmail=null) => {\n  const { slug, offerPeriod, price, backUrl, offerPeriodDisplay } = planAttr;\n  const planPeriod = selectedOffer.attr(offerPeriod);\n  const planFullPrice = (selectedOffer.attr(price) / 100).toFixed(2);\n  const planPriceWithDiscount = (planFullPrice - amountOff).toFixed(2);\n  const planNewPrice = planPriceWithDiscount < 0 ? 0 : planPriceWithDiscount;\n  const planFormattedNewPrice = parseFloat(planNewPrice).toFixed(2);\n  const planSlug = selectedOffer.attr(slug);\n  const planBackUrl = userEmail\n    ? selectedOffer.attr(backUrl) + `?${GET_PARAMS.EMAIL}=${encodeURIComponent(userEmail)}`\n    : selectedOffer.attr(backUrl);\n  const planPeriodDisplay = selectedOffer.attr(offerPeriodDisplay) || planPeriod;\n\n  return {\n    planPeriod,\n    planFullPrice,\n    planFormattedNewPrice,\n    planSlug,\n    planBackUrl,\n    planPeriodDisplay\n  };\n};\n\nexport const getShippingPriceInCents = (shippingCountriesSelect) => {\n  const result = parseInt($(shippingCountriesSelect).find('option:selected').attr('data-price'));\n  return result;\n};\n\nconst getEbloxPriceInCents = () => {\n  const result = parseInt(ebloxAddonPrice);\n  return result;\n};\n\nexport const getTotalPricesInCents = (\n  planFullPriceInCents,\n  isTrialActive=false,\n  isEbloxAdded=false,\n  activeCoupon=false,\n  amountOff=0,\n  shippingCountriesSelect\n) => {\n  const mainSubscriptionPriceInCents = parseFloat(planFullPriceInCents);\n  let subscriptionPriceInCents = mainSubscriptionPriceInCents;\n  let ebloxAndShippingPriceInCents = 0;\n  let totalPriceInCents = 0;\n\n  if (isTrialActive) subscriptionPriceInCents = 0;\n\n  if (isEbloxAdded) {\n    ebloxAndShippingPriceInCents =\n      getShippingPriceInCents(shippingCountriesSelect) + getEbloxPriceInCents();\n  }\n\n  totalPriceInCents = subscriptionPriceInCents + ebloxAndShippingPriceInCents;\n\n  if (activeCoupon) {\n    const amountPriceInCents = parseFloat((amountOff * 100).toFixed());\n    const priceAfterDiscount = parseFloat((totalPriceInCents - amountPriceInCents).toFixed());\n    totalPriceInCents = priceAfterDiscount < 0 ? 0 : priceAfterDiscount;\n  }\n\n  const getPriceFor3ds = () => {\n    /* eslint-disable max-len */\n    const minCapFor3DSecureInCents = 1;\n    let threeDSecurePrice = mainSubscriptionPriceInCents + ebloxAndShippingPriceInCents;\n\n    if (activeCoupon) {\n      const amountPriceInCents = parseFloat((amountOff * 100).toFixed());\n      const threeDSecurePriceAfterDiscount = parseFloat((threeDSecurePrice - amountPriceInCents).toFixed());\n      // fix for 3d secure, we CAN NOT use 0 as price for 3d secure\n      threeDSecurePrice = threeDSecurePriceAfterDiscount <= 0 ? minCapFor3DSecureInCents : threeDSecurePriceAfterDiscount;\n    }\n\n    return threeDSecurePrice;\n    /* eslint-enable max-len */\n  };\n\n  const priceFor3DSecure = getPriceFor3ds();\n\n  return {totalPriceInCents, priceFor3DSecure};\n};\n\nexport const getCurrencyPrice = (priceInCents) => {\n  return `${CURRENCY}${(priceInCents / 100).toFixed(2).toString()}`;\n};\n\nexport const setCheckoutBtnTitle = ($button, isTrialActive, checkoutTextAttr) => {\n  if (isTrialActive) {\n    $button.html($button.attr(checkoutTextAttr.trial));\n    return;\n  }\n\n  $button.html($button.attr(checkoutTextAttr.noTrial));\n};\n\nexport const setDefaultOfferSubmitText = ($button, submitText='Subscribe') => {\n  if (submitText) $button.html(submitText);\n};\n\nexport const defineTrialMessagePlural = (trialDuration, unit='day') => {\n  return parseFloat(trialDuration) > 1\n    ? `${trialDuration}-${unit}s`\n    : `${trialDuration}-${unit}`;\n};\n","import {\n  braintreeDropinConfig,\n  deleteUrlParam,\n  getError,\n  isThreeDSecureCanceled,\n  processingPlurals,\n  threeDSecureConfig,\n  toggleButtonLoading,\n  toggleMarkWorksheetAsDone,\n  toggleAddWorksheetToFavorite,\n  dispatchCustomEvent,\n  storage,\n  getUrlParam,\n  deleteGetParamFromUrl,\n  redirectToCompleteOnlineInTGC,\n  getBrowser,\n  handleCompleteOnline,\n  redirectToTgcWithOpenWorksheetParams,\n  showSignUpModal\n} from '../utils';\nimport {\n  LOCAL_STORAGE_KEYS,\n  CURRENCY,\n  CUSTOM_MESSAGE,\n  DROPIN_SCRIPT_URL,\n  ENDPOINT,\n  GET_PARAMS,\n  SUBSCRIPTION_PERIOD_MAPPING,\n  SUBSCRIPTION_PERIODS,\n  MODALS,\n  WORKSHEET_ACTIONS,\n  WEBSITE_CUSTOM_EVENTS,\n  IS_DOWNLOAD_WORKSHEET_FLOW\n} from '../config';\nimport {\n  handleDropinToken\n} from '../payment/subscription.utils';\n\n\n$(document).ready(() => {\n  const $websitePlansModal = $(MODALS.WEBSITE_PLANS_MODAL);\n  if (!$websitePlansModal) return;\n\n  let isSuccessStepShown = false;\n\n  const adFreeSubscription = '[data-url=\"ad-free-subscription\"]';\n\n  const freePlanBtn = '[data-selector=\"website-plans-modal-free-plan-btn\"]';\n  const planBtn = '[data-selector=\"website-plans-modal-go-to-checkout-btn\"]';\n\n  const braintreeDropin = '#website-plans-dropin-container';\n  let braintreeDropinInstance = {};\n\n  const $plansContainer = $('[data-selector=\"website-plans-modal-plans\"]');\n  const $purchaseContainer = $('[data-selector=\"website-plans-modal-purchase\"]');\n  const backToPlansBtn = '[data-selector=\"website-plans-modal-back-btn\"]';\n  const $backToPlansBtn = $(backToPlansBtn);\n\n  const $websitePlansModalTitle = $('[data-selector=\"website-plans-modal-title\"]');\n  const successModalTitle = 'Welcome to Kids Academy Premium!';\n  const defaultModalTitle = 'Try Kids Academy Premium!';\n  const limitModalTitle = 'You\\'ve reached your daily download limit!';\n  let isTwoPlansModal = false;\n\n  $websitePlansModalTitle.html(defaultModalTitle);\n  const isWebsitePlansModalShow = storage.get(LOCAL_STORAGE_KEYS.SHOW_WEBSITE_PLANS_MODAL, true);\n  if (isWebsitePlansModalShow === 'true') {\n    // show plans modal with 3 plans\n    $websitePlansModal.modal('show');\n    ga('send', 'event', 'Monetization3_Three_Plans', 'PopUp_Shown', 'Load');\n    isTwoPlansModal = false;\n  }\n\n  const goToPaymentBtn = '[data-selector=\"go-to-payment-btn\"]';\n  const $goToPaymentBtn = $(goToPaymentBtn);\n  const submitPaymentBtn = '[data-selector=\"website-plans-modal-pay-btn\"]';\n  const $submitPaymentBtn = $websitePlansModal.find(submitPaymentBtn);\n  const $subscriptionError = $websitePlansModal.find('[data-selector=\"subscription-error\"]');\n\n  const $buySubscriptionSuccessStep = $('[data-selector=\"buy-subscription-success\"]');\n  const $subtitle = $('[data-selector=\"website-plans-modal-subtitle\"]');\n\n  const trialDurationAttr = 'data-trial-duration';\n  const priceAttr = 'data-price';\n  const redirectAttr = 'data-redirect';\n  const slugAttr = 'data-slug';\n  const periodAttr = 'data-period';\n\n  const planPeriodDisplayAttr = 'data-period-display';\n\n  const successStepActive = '_success-step-active';\n\n  const $planPeriod = $websitePlansModal.find('[data-selector=\"plan-period-value\"]');\n  const $fullPrice = $websitePlansModal.find('[data-selector=\"plan-full-price-value\"]');\n  const $trialValue = $websitePlansModal.find('[data-selector=\"plan-trial-period-value\"]');\n  const $trialRow = $websitePlansModal.find('[data-selector=\"plan-trial-row\"]');\n  const $todayPrice = $websitePlansModal.find('[data-selector=\"plan-total-price-value\"]');\n  const $renewCondition = $websitePlansModal.find('[data-selector=\"plan-renew-condition\"]');\n  const twoPlansClassName = '_two-plans';\n\n  const $plansModalLoading = $('[data-selector=\"website-plans-modal-loading\"]');\n  const $plansModalContent = $('[data-selector=\"website-plans-modal-content\"]');\n\n  const toggleWebsitePlansLoading = (isLoading) => {\n    if (isLoading) {\n      $plansModalLoading.show();\n      $plansModalContent.css('height', '400px');\n    } else {\n      $plansModalLoading.hide();\n      $plansModalContent.attr('style', '');\n    }\n  };\n\n  const showWebsitePlansNoFreePopup = ({isLoading, isDefaultTitle}) => {\n    toggleWebsitePlansLoading(isLoading);\n\n    // show plans modal with 2 plans\n    $(MODALS.WEBSITE_PLANS_MODAL).modal('show');\n    $plansContainer.addClass(twoPlansClassName);\n    $subtitle.show();\n    $websitePlansModalTitle.html(limitModalTitle);\n    if (isDefaultTitle) $websitePlansModalTitle.html(defaultModalTitle);\n    isTwoPlansModal = true;\n\n    const worksheetAction = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION);\n    if (worksheetAction === WORKSHEET_ACTIONS.GO_TO_WORKSHEET_CHECK_IN_TGC) {\n      $websitePlansModalTitle.html(defaultModalTitle);\n    }\n\n    ga('send', 'event', 'Monetization3_Two_Plans', 'PopUp_Shown', 'Load');\n\n    ga('send', 'event', 'Worksheets_Pay_Acc', 'PopUp shown', 'Click');\n  };\n\n  const onPageLoad = () => {\n    const isWebsitePlansModalShow = getUrlParam(GET_PARAMS.DOWNLOAD_POPUP_LIMIT) === 'true';\n\n    // show plans modal first step\n    if (window.isLoggedIn\n    && !window.HAS_PARENT_SUBSCRIPTION\n    && window.isWebsitePlans > 0\n    && isWebsitePlansModalShow) {\n      showWebsitePlansNoFreePopup();\n    }\n\n    // show plans modal purchase step\n    // eslint-disable-next-line max-len\n    const purchaseShow = storage.get(LOCAL_STORAGE_KEYS.SHOW_WEBSITE_PLANS_MODAL_PURCHASE) === 'true';\n    if (purchaseShow\n     && !window.HAS_PARENT_SUBSCRIPTION\n     && window.isWebsitePlansExists > 0\n     && window.isLoggedIn\n     && window.isSignUpComplete) {\n\n      $websitePlansModalTitle.html(defaultModalTitle);\n      const planSlug = storage.get(LOCAL_STORAGE_KEYS.WEBSITE_PLANS_MODAL_PLAN_SLUG);\n      showWebsitePlansNoFreePopup({isLoading: true, isDefaultTitle: true});\n\n      if (planSlug) {\n        const $button = $(`[data-slug=\"${planSlug}\"]`);\n        const planPrice = $button.attr(priceAttr);\n\n        $.getScript(DROPIN_SCRIPT_URL, function() {\n          // Скрипт загружен, даем 1.5 секунды на инициализацию window.braintree\n          setTimeout(() => {\n            // Проверка на всякий случай\n            if (!window.braintree) {\n              console.error('Braintree still not initialized after 1.5s');\n              goToPaymentErrorHandler($button);\n              return;\n            }\n\n            handleDropinToken(\n              () => {dropinTokenCallback(planPrice, planSlug, $button);},\n              (err) => goToPaymentErrorHandler($button, err)\n            );\n          }, 1500);\n        });\n      }\n    }\n  };\n\n  document\n    .addEventListener(WEBSITE_CUSTOM_EVENTS.SHOW_PLANS_POPUP_NO_FREE, () => {\n      showWebsitePlansNoFreePopup();\n      storage.delete(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION);\n    }, false);\n\n  const renderSecondStepUI = ($button) => {\n    $plansContainer.hide();\n    $purchaseContainer.show();\n    $subtitle.hide();\n\n    toggleButtonLoading($button, false);\n\n    const price = $button.attr(priceAttr);\n    const trialDuration = parseInt($button.attr(trialDurationAttr));\n    const planPeriodDisplay = $button.attr(planPeriodDisplayAttr);\n    const planPeriod = $button.attr(periodAttr);\n\n    const planPriceString = (price / 100).toFixed(2);\n    /* eslint-disable max-len */\n    const trialDurationString = processingPlurals(trialDuration, `${trialDuration} day`, `${trialDuration} days`);\n    /* eslint-enable max-len */\n\n    $planPeriod.html(planPeriodDisplay);\n    $fullPrice.html(`${CURRENCY}${planPriceString}`);\n\n    if (trialDuration === 0) {\n      $trialRow.hide();\n      $todayPrice.html(`${CURRENCY}${planPriceString}`);\n    } else {\n      $trialRow.show();\n      $trialValue.html(trialDurationString);\n      $todayPrice.html(`${CURRENCY}0.00`);\n\n      if (planPeriod !== SUBSCRIPTION_PERIODS.LIFETIME) {\n        const text = SUBSCRIPTION_PERIOD_MAPPING[planPeriod](planPriceString);\n        $renewCondition.html(text);\n      }\n    }\n  };\n\n  const initBraintreeDropin = (totalPriceInCents, priceFor3DSecure, slug, redirect) => {\n    if (braintree && $(braintreeDropin).length) {\n      const totalPriceInDollars = (totalPriceInCents / 100).toFixed(2);\n      const braintreeConf = braintreeDropinConfig(totalPriceInDollars, braintreeDropin);\n\n      braintree.dropin.create(braintreeConf,\n        function (createErr, instance) {\n        braintreeDropinInstance = instance;\n          if (createErr) {\n            // An error in the create call is likely due to\n            // incorrect configuration values or network issues.\n            // An appropriate error will be shown in the UI.\n\n            $subscriptionError.html(\n              `${createErr.message}\n               <br>${CUSTOM_MESSAGE.BRAINTREE_CREATE_ERROR}`\n            );\n            $subscriptionError.show();\n            toggleButtonLoading($goToPaymentBtn, false);\n            // eslint-disable-next-line no-console\n            console.error('dropin create error: ', createErr);\n            return;\n          }\n\n          toggleButtonLoading($backToPlansBtn, false);\n\n          if (instance.isPaymentMethodRequestable()) {\n            // This will be true if you generated the client token\n            // with a customer ID and there is a saved payment method\n            // available to tokenize with that customer.\n            $submitPaymentBtn.show();\n          }\n\n          instance.on('paymentMethodRequestable', () => {\n            $submitPaymentBtn.show();\n            $subscriptionError.hide();\n          });\n\n          instance.on('noPaymentMethodRequestable', () => {\n            $submitPaymentBtn.hide();\n            $subscriptionError.hide();\n          });\n\n          instance.on('paymentOptionSelected', () => {\n            $subscriptionError.hide();\n            $submitPaymentBtn.show();\n          });\n\n          toggleButtonLoading($goToPaymentBtn, false);\n          toggleButtonLoading($submitPaymentBtn, false);\n\n          $submitPaymentBtn.click(() => {\n            $backToPlansBtn.hide();\n            $subscriptionError.hide();\n            toggleButtonLoading($submitPaymentBtn, true);\n\n            const priceFor3DSecureStr = (priceFor3DSecure / 100).toFixed(2).toString();\n            const threeDSecureConf = threeDSecureConfig(priceFor3DSecureStr);\n\n            instance.requestPaymentMethod({\n              threeDSecure: threeDSecureConf\n            }, function (requestPaymentMethodErr, payload) {\n              if (requestPaymentMethodErr) {\n                // eslint-disable-next-line no-console\n                console.error('requestPaymentMethodErr: ', requestPaymentMethodErr);\n\n                $subscriptionError.text(requestPaymentMethodErr.message);\n                $subscriptionError.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                $backToPlansBtn.show();\n                return;\n              }\n\n              if (isThreeDSecureCanceled(payload)) {\n                instance.clearSelectedPaymentMethod();\n                $subscriptionError.text(CUSTOM_MESSAGE.THREE_D_SECURE_ABORT);\n                $subscriptionError.show();\n                $backToPlansBtn.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                return;\n              }\n\n              $.ajax({\n                url: ENDPOINT.BUY_SUBSCRIPTION,\n                type: 'POST',\n                contentType: 'application/json',\n                data: JSON.stringify({\n                  payment_method_nonce: payload.nonce,\n                  plan_slug: slug,\n                  source: 'website-offer'\n                })\n              })\n                .then(() => {\n                  ga('send', 'event', 'Worksheets_Pay_Acc', 'Subscribe_Button', 'Click');\n\n                  $purchaseContainer.hide();\n                  $websitePlansModalTitle.html(successModalTitle);\n                  $buySubscriptionSuccessStep.show();\n                  $(MODALS.WEBSITE_PLANS_MODAL).addClass(successStepActive);\n\n                  isSuccessStepShown = true;\n                  ga('send', 'event', 'Monetization3_Pay_OK', 'PopUp_Shown', 'Load');\n\n                  deleteUrlParam(GET_PARAMS.DOWNLOAD_POPUP_LIMIT);\n\n                  const actionType = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION, true);\n                  const worksheetId = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ID, true);\n                  const worksheetSlug = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_SLUG, true);\n\n                  switch (actionType) {\n                    case WORKSHEET_ACTIONS.MARK_AS_DONE:\n                      toggleMarkWorksheetAsDone(worksheetId, true);\n                      break;\n                    case WORKSHEET_ACTIONS.ADD_TO_FAVORITE:\n                      toggleAddWorksheetToFavorite(worksheetId, true);\n                      break;\n                    case WORKSHEET_ACTIONS.INIT_WORKSHEET_DOWNLOAD:\n                      toggleMarkWorksheetAsDone(worksheetId, true);\n                      dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n                      break;\n                    case WORKSHEET_ACTIONS.GO_TO_WORKSHEET_CHECK_IN_TGC:\n                      const goToOnlineWorksheet = () => {\n                        toggleMarkWorksheetAsDone(worksheetId, true, () => {\n                          toggleMarkWorksheetAsDone(worksheetId, true);\n                        });\n                        redirectToCompleteOnlineInTGC(worksheetSlug);\n                      };\n\n                      handleCompleteOnline(goToOnlineWorksheet);\n                      break;\n                  }\n\n                  deleteGetParamFromUrl(GET_PARAMS.DOWNLOAD_POPUP_LIMIT);\n\n                  if(redirect) window.location = redirect;\n                }, (errorResp) => {\n                  instance.clearSelectedPaymentMethod();\n                  $subscriptionError.text('');\n                  $subscriptionError.append(getError(errorResp));\n                  $subscriptionError.show();\n                  $backToPlansBtn.show();\n\n                  toggleButtonLoading($submitPaymentBtn, false);\n                });\n            });\n          });\n        });\n    }\n  };\n\n  const isTrialEnabled = ($button) => {\n    if (!window.ableToGetTrial) return false;\n\n    const trialDuration = $button.attr(trialDurationAttr);\n    const isTrialDisabled = parseInt(trialDuration) === 0;\n    if (isTrialDisabled) return false;\n\n    return true;\n  };\n\n  const getTotalPriceInCents = ($button) => {\n    const priceInCents = $button.attr(priceAttr);\n    let totalPriceInCents = priceInCents;\n    const priceFor3DSecure = priceInCents;\n\n    if (isTrialEnabled($button)) totalPriceInCents = 0;\n\n    return {totalPriceInCents, priceFor3DSecure};\n  };\n\n  const goToPaymentErrorHandler = ($button) => {\n    toastr.error('Something went wrong, please contact us!', '', {timeOut: 3000});\n    toggleButtonLoading($button, false);\n  };\n\n  const dropinTokenCallback = (planPrice, planSlug, $button) => {\n    storage.delete(LOCAL_STORAGE_KEYS.WEBSITE_PLANS_MODAL_PLAN_SLUG);\n    storage.delete(LOCAL_STORAGE_KEYS.SHOW_WEBSITE_PLANS_MODAL_PURCHASE);\n\n    if (!window.braintree) {\n      goToPaymentErrorHandler($button);\n      return;\n    }\n\n    const redirect = $button.attr(redirectAttr);\n\n    renderSecondStepUI($button);\n\n    const {totalPriceInCents, priceFor3DSecure} = getTotalPriceInCents($button);\n    initBraintreeDropin(totalPriceInCents, priceFor3DSecure, planSlug, redirect);\n\n    toggleWebsitePlansLoading(false);\n  };\n\n  const onDismissPlansModal = () => {\n    const actionType = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ACTION, true);\n    const worksheetId = storage.get(LOCAL_STORAGE_KEYS.WORKSHEET_ID, true);\n\n    switch (actionType) {\n      case WORKSHEET_ACTIONS.MARK_AS_DONE:\n        toggleMarkWorksheetAsDone(worksheetId, true);\n        break;\n      case WORKSHEET_ACTIONS.ADD_TO_FAVORITE:\n        toggleAddWorksheetToFavorite(worksheetId, true);\n        break;\n      case WORKSHEET_ACTIONS.INIT_WORKSHEET_DOWNLOAD:\n        toggleMarkWorksheetAsDone(worksheetId, true);\n        dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n        break;\n    }\n\n    $websitePlansModal.modal('hide');\n  };\n\n  $(document)\n    .on('click', freePlanBtn, () => {\n      // KA-183\n      const $websitePlansModal = $(MODALS.WEBSITE_PLANS_MODAL);\n      if ($websitePlansModal.hasClass(IS_DOWNLOAD_WORKSHEET_FLOW)) {\n        const worksheetId = $websitePlansModal.attr('data-worksheet-id');\n        const worksheetUtm = $websitePlansModal.attr('data-worksheet-utm') || '';\n\n        dispatchCustomEvent(WEBSITE_CUSTOM_EVENTS.DOWNLOAD_WORKSHEET, {worksheetId});\n\n        $websitePlansModal.modal('hide');\n\n        const isSafariBrowser = getBrowser().toLowerCase().includes('safari');\n\n        if (isSafariBrowser) return;\n\n        redirectToTgcWithOpenWorksheetParams({\n          worksheetId: worksheetId,\n          utm: worksheetUtm,\n          skipOnboarding: false\n        });\n\n        return;\n      }\n\n      if ($(adFreeSubscription).length) {\n        ga('send', 'event', 'Add_free_subscriptions', 'Limited_access', 'Click');\n\n        if (document.referrer) window.location = document.referrer;\n        window.location = window.location.origin;\n        return;\n      }\n\n      onDismissPlansModal();\n      ga('send', 'event', 'Monetization3_Three_Plans', 'Free_Plan', 'Click');\n    })\n    .on('click', backToPlansBtn, () => {\n      $plansContainer.show();\n      $submitPaymentBtn.hide();\n      $purchaseContainer.hide();\n      $subscriptionError.hide();\n\n      braintreeDropinInstance.teardown((err) => {\n        // eslint-disable-next-line no-console\n        if (err) { console.error('An error occurred during teardown:', err); }\n        $(braintreeDropin).empty();\n      });\n    })\n    .on('click', planBtn, (e) => {\n      const $button = $(e.target);\n      const planPrice = $button.attr(priceAttr);\n      const planSlug = $button.attr(slugAttr);\n\n      toggleButtonLoading($button, true);\n      toggleButtonLoading($backToPlansBtn, true);\n\n      if (!$(adFreeSubscription).length) {\n        if (isTwoPlansModal) {\n          if (planPrice === '10000') {\n            ga('send', 'event', 'Monetization3_Two_Plans', 'Plan_10', 'Click');\n          } else {\n            ga('send', 'event', 'Monetization3_Two_Plans', 'Plan_1_99', 'Click');\n          }\n        } else {\n          if (planPrice === '10000') {\n            ga('send', 'event', 'Monetization3_Three_Plans', 'Plan_10', 'Click');\n          } else {\n            ga('send', 'event', 'Monetization3_Three_Plans', 'Plan_1_99', 'Click');\n          }\n        }\n      }\n\n      if (!window.isSignUpComplete) {\n        $(MODALS.WEBSITE_PLANS_MODAL).modal('hide');\n        showSignUpModal({planSlug});\n      } else {\n        $.getScript(DROPIN_SCRIPT_URL, function() {\n          // Скрипт загружен, даем 1.5 секунды на инициализацию window.braintree\n          setTimeout(() => {\n            // Проверка на всякий случай\n            if (!window.braintree) {\n              console.error('Braintree still not initialized after 1.5s');\n              goToPaymentErrorHandler($button);\n              return;\n            }\n\n            handleDropinToken(\n              () => {dropinTokenCallback(planPrice, planSlug, $button);},\n              (err) => goToPaymentErrorHandler($button, err)\n            );\n          }, 1500);\n        });\n      }\n    });\n\n    $(MODALS.WEBSITE_PLANS_MODAL).on('hidden.bs.modal', () => {\n      toggleButtonLoading($(planBtn), false);\n\n      // look at downloadWorksheetHandler at kidsacademy/kidsacademy/static/js/utils.js\n      // eslint-disable-next-line max-len\n      if ($(MODALS.WEBSITE_PLANS_MODAL).hasClass(IS_DOWNLOAD_WORKSHEET_FLOW) && $(MODALS.WEBSITE_PLANS_MODAL).hasClass(successStepActive)) {\n        $(MODALS.WEBSITE_PLANS_MODAL).removeClass(IS_DOWNLOAD_WORKSHEET_FLOW);\n\n        if (isSuccessStepShown && window.isSignUpComplete === false) {\n          $('[data-selector=\"learning-resources-registration-title\"]').html('Complete sign-up!');\n          $('[data-selector=\"learning-resources-registration-login-btns\"]').hide();\n          $('[data-selector=\"social-btn-login\"]').hide();\n          $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('show');\n        }\n\n        return;\n      }\n\n      onDismissPlansModal();\n      $websitePlansModalTitle.html(defaultModalTitle);\n      $plansContainer.removeClass(twoPlansClassName);\n      $subtitle.hide();\n\n      if (isTwoPlansModal) {\n        ga('send', 'event', 'Monetization3_Two_Plans', 'Close', 'Click');\n      } else {\n        ga('send', 'event', 'Monetization3_Three_Plans', 'Close', 'Click');\n      }\n\n      if (isSuccessStepShown && window.isSignUpComplete === false) {\n        $('[data-selector=\"learning-resources-registration-title\"]').html('Complete sign-up!');\n        $('[data-selector=\"learning-resources-registration-login-btns\"]').hide();\n        $('[data-selector=\"social-btn-login\"]').hide();\n        $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('show');\n        return;\n      }\n\n      if (isSuccessStepShown) {\n        document.location.reload();\n      }\n    });\n\n    onPageLoad();\n});\n","import {\n  braintreeDropinConfig,\n  getError,\n  isThreeDSecureCanceled,\n  processingPlurals,\n  threeDSecureConfig,\n  toggleButtonLoading,\n} from '../utils';\nimport {\n  CURRENCY,\n  CUSTOM_MESSAGE,\n  DROPIN_SCRIPT_URL,\n  ENDPOINT,\n  SUBSCRIPTION_PERIOD_MAPPING,\n  SUBSCRIPTION_PERIODS,\n  MODALS\n} from '../config';\nimport {\n  handleDropinToken\n} from '../payment/subscription.utils';\n\n\n$(document).ready(() => {\n  const $websitePlansModal = $(MODALS.WEBSITE_CR_TG_PLANS_MODAL);\n  if (!$websitePlansModal.length) return;\n\n  let isSuccessStepShown = false;\n\n  const planBtn = '[data-selector=\"free-worksheet-plans-modal-go-to-checkout-btn\"]';\n\n  const braintreeDropin = '#website-plans-cr-tg-dropin-container';\n  let braintreeDropinInstance = {};\n\n  const $plansContainer = $('[data-selector=\"website-plans-modal-plans\"]');\n  const $purchaseContainer = $('[data-selector=\"website-plans-modal-purchase\"]');\n  const backToPlansBtn = '[data-selector=\"website-plans-modal-back-btn\"]';\n  const $backToPlansBtn = $(backToPlansBtn);\n\n  const $websitePlansModalTitle = $('[data-selector=\"free-website-plans-modal-title\"]');\n\n  const goToPaymentBtn = '[data-selector=\"go-to-payment-btn\"]';\n  const $goToPaymentBtn = $(goToPaymentBtn);\n  const submitPaymentBtn = '[data-selector=\"website-plans-modal-pay-btn\"]';\n  const $submitPaymentBtn = $websitePlansModal.find(submitPaymentBtn);\n  const $subscriptionError = $websitePlansModal.find('[data-selector=\"subscription-error\"]');\n\n  const $buySubscriptionSuccessStep = $('[data-selector=\"buy-subscription-success\"]');\n  const $subtitle = $('[data-selector=\"website-plans-modal-subtitle\"]');\n  const successModalTitle = 'Welcome to Kids Academy Premium!';\n  const paymentStepTitle = 'Try Kids Academy Premium!';\n\n  const trialDurationAttr = 'data-trial-duration';\n  const priceAttr = 'data-price';\n  const redirectAttr = 'data-redirect';\n  const slugAttr = 'data-slug';\n  const periodAttr = 'data-period';\n\n  const planPeriodDisplayAttr = 'data-period-display';\n  const successStepActive = '_success-step-active';\n\n  const $planPeriod = $websitePlansModal.find('[data-selector=\"plan-period-value\"]');\n  const $fullPrice = $websitePlansModal.find('[data-selector=\"plan-full-price-value\"]');\n  const $trialValue = $websitePlansModal.find('[data-selector=\"plan-trial-period-value\"]');\n  const $trialRow = $websitePlansModal.find('[data-selector=\"plan-trial-row\"]');\n  const $todayPrice = $websitePlansModal.find('[data-selector=\"plan-total-price-value\"]');\n  const $renewCondition = $websitePlansModal.find('[data-selector=\"plan-renew-condition\"]');\n\n  const $plansModalLoading = $('[data-selector=\"website-plans-modal-loading\"]');\n  const $plansModalContent = $('[data-selector=\"website-plans-modal-content\"]');\n\n  const toggleWebsitePlansLoading = (isLoading) => {\n    if (isLoading) {\n      $plansModalLoading.show();\n      $plansModalContent.css('height', '400px');\n    } else {\n      $plansModalLoading.hide();\n      $plansModalContent.attr('style', '');\n    }\n  };\n\n  const renderSecondStepUI = ($button) => {\n    $plansContainer.hide();\n    $purchaseContainer.show();\n    $subtitle.hide();\n\n    toggleButtonLoading($button, false);\n    $websitePlansModalTitle.html(paymentStepTitle);\n\n    const price = $button.attr(priceAttr);\n    const trialDuration = parseInt($button.attr(trialDurationAttr));\n    const planPeriodDisplay = $button.attr(planPeriodDisplayAttr);\n    const planPeriod = $button.attr(periodAttr);\n\n    const planPriceString = (price / 100).toFixed(2);\n    /* eslint-disable max-len */\n    const trialDurationString = processingPlurals(trialDuration, `${trialDuration} day`, `${trialDuration} days`);\n    /* eslint-enable max-len */\n\n    $planPeriod.html(planPeriodDisplay);\n    $fullPrice.html(`${CURRENCY}${planPriceString}`);\n\n    if (trialDuration === 0) {\n      $trialRow.hide();\n      $todayPrice.html(`${CURRENCY}${planPriceString}`);\n    } else {\n      $trialRow.show();\n      $trialValue.html(trialDurationString);\n      $todayPrice.html(`${CURRENCY}0.00`);\n\n      if (planPeriod !== SUBSCRIPTION_PERIODS.LIFETIME) {\n        const text = SUBSCRIPTION_PERIOD_MAPPING[planPeriod](planPriceString);\n        $renewCondition.html(text);\n      }\n    }\n  };\n\n  const initBraintreeDropin = (totalPriceInCents, priceFor3DSecure, slug) => {\n    if (braintree && $(braintreeDropin).length) {\n      const totalPriceInDollars = (totalPriceInCents / 100).toFixed(2);\n      const braintreeConf = braintreeDropinConfig(totalPriceInDollars, braintreeDropin);\n\n      braintree.dropin.create(braintreeConf,\n        function (createErr, instance) {\n        braintreeDropinInstance = instance;\n          if (createErr) {\n            // An error in the create call is likely due to\n            // incorrect configuration values or network issues.\n            // An appropriate error will be shown in the UI.\n\n            $subscriptionError.html(\n              `${createErr.message}\n               <br>${CUSTOM_MESSAGE.BRAINTREE_CREATE_ERROR}`\n            );\n            $subscriptionError.show();\n            toggleButtonLoading($goToPaymentBtn, false);\n            // eslint-disable-next-line no-console\n            console.error('dropin create error: ', createErr);\n            return;\n          }\n\n          toggleButtonLoading($backToPlansBtn, false);\n\n          if (instance.isPaymentMethodRequestable()) {\n            // This will be true if you generated the client token\n            // with a customer ID and there is a saved payment method\n            // available to tokenize with that customer.\n            $submitPaymentBtn.show();\n          }\n\n          instance.on('paymentMethodRequestable', () => {\n            $submitPaymentBtn.show();\n            $subscriptionError.hide();\n          });\n\n          instance.on('noPaymentMethodRequestable', () => {\n            $submitPaymentBtn.hide();\n            $subscriptionError.hide();\n          });\n\n          instance.on('paymentOptionSelected', () => {\n            $subscriptionError.hide();\n            $submitPaymentBtn.show();\n          });\n\n          toggleButtonLoading($goToPaymentBtn, false);\n          toggleButtonLoading($submitPaymentBtn, false);\n\n          $submitPaymentBtn.click(() => {\n            $backToPlansBtn.hide();\n            $subscriptionError.hide();\n            toggleButtonLoading($submitPaymentBtn, true);\n\n            const priceFor3DSecureStr = (priceFor3DSecure / 100).toFixed(2).toString();\n            const threeDSecureConf = threeDSecureConfig(priceFor3DSecureStr);\n\n            instance.requestPaymentMethod({\n              threeDSecure: threeDSecureConf\n            }, function (requestPaymentMethodErr, payload) {\n              if (requestPaymentMethodErr) {\n                // eslint-disable-next-line no-console\n                console.error('requestPaymentMethodErr: ', requestPaymentMethodErr);\n\n                $subscriptionError.text(requestPaymentMethodErr.message);\n                $subscriptionError.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                $backToPlansBtn.show();\n                return;\n              }\n\n              if (isThreeDSecureCanceled(payload)) {\n                instance.clearSelectedPaymentMethod();\n                $subscriptionError.text(CUSTOM_MESSAGE.THREE_D_SECURE_ABORT);\n                $subscriptionError.show();\n                $backToPlansBtn.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                return;\n              }\n\n              $.ajax({\n                url: ENDPOINT.BUY_SUBSCRIPTION,\n                type: 'POST',\n                contentType: 'application/json',\n                data: JSON.stringify({\n                  payment_method_nonce: payload.nonce,\n                  plan_slug: slug,\n                  source: 'website-offer'\n                })\n              })\n                .then(() => {\n                  $purchaseContainer.hide();\n                  $websitePlansModalTitle.html(successModalTitle);\n                  $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).addClass(successStepActive);\n                  $buySubscriptionSuccessStep.show();\n                  isSuccessStepShown = true;\n                }, (errorResp) => {\n                  instance.clearSelectedPaymentMethod();\n                  $subscriptionError.text('');\n                  $subscriptionError.append(getError(errorResp));\n                  $subscriptionError.show();\n                  $backToPlansBtn.show();\n\n                  toggleButtonLoading($submitPaymentBtn, false);\n                });\n            });\n          });\n        });\n    }\n  };\n\n  const isTrialEnabled = ($button) => {\n    if (!window.ableToGetTrial) return false;\n\n    const trialDuration = $button.attr(trialDurationAttr);\n    const isTrialDisabled = parseInt(trialDuration) === 0;\n    if (isTrialDisabled) return false;\n\n    return true;\n  };\n\n  const getTotalPriceInCents = ($button) => {\n    const priceInCents = $button.attr(priceAttr);\n    let totalPriceInCents = priceInCents;\n    const priceFor3DSecure = priceInCents;\n\n    if (isTrialEnabled($button)) totalPriceInCents = 0;\n\n    return {totalPriceInCents, priceFor3DSecure};\n  };\n\n  const goToPaymentErrorHandler = ($button) => {\n    toastr.error('Something went wrong, please contact us!', '', {timeOut: 3000});\n    toggleButtonLoading($button, false);\n  };\n\n  const dropinTokenCallback = (planPrice, planSlug, $button) => {\n    if (!window.braintree) {\n      goToPaymentErrorHandler($button);\n      return;\n    }\n\n    const redirect = $button.attr(redirectAttr);\n    renderSecondStepUI($button);\n\n    const {totalPriceInCents, priceFor3DSecure} = getTotalPriceInCents($button);\n    initBraintreeDropin(totalPriceInCents, priceFor3DSecure, planSlug, redirect);\n\n    toggleWebsitePlansLoading(false);\n  };\n\n  $(document)\n    .on('click', backToPlansBtn, () => {\n      $plansContainer.show();\n      $submitPaymentBtn.hide();\n      $purchaseContainer.hide();\n      $subscriptionError.hide();\n\n      braintreeDropinInstance.teardown((err) => {\n        // eslint-disable-next-line no-console\n        if (err) { console.error('An error occurred during teardown:', err); }\n        $(braintreeDropin).empty();\n      });\n    })\n    .on('click', planBtn, (e) => {\n      const $button = $(e.target);\n      const planPrice = $button.attr(priceAttr);\n      const planSlug = $button.attr(slugAttr);\n\n      toggleButtonLoading($button, true);\n      toggleButtonLoading($backToPlansBtn, true);\n\n      $.getScript(\n        DROPIN_SCRIPT_URL,\n        // eslint-disable-next-line max-len\n        handleDropinToken(\n          () => {dropinTokenCallback(planPrice, planSlug, $button);},\n          goToPaymentErrorHandler\n        )\n      );\n    });\n\n    $(MODALS.WEBSITE_CR_TG_PLANS_MODAL).on('hidden.bs.modal', () => {\n      if (isSuccessStepShown) document.location.reload();\n    });\n});\n","import {\n  initGoogleRecaptcha,\n  toggleButtonLoading,\n  getUserSources,\n  storage,\n  isWebGamesPage\n} from '../utils';\nimport {\n  ACCOUNT_TYPES,\n  ENDPOINT,\n  LOCAL_STORAGE_KEYS,\n  MODALS\n} from '../config';\n\n\n$(document).ready(function () {\n  const termsCheckbox = '[data-selector=\"terms-condition-checkbox\"]';\n  const formSubmitBtn = '[data-selector=\"modal-registration-form-submit-btn\"]';\n  const $formError = $('[data-selector=\"modal-registration-form-submit-error\"]');\n  const learningResourcesModal = '#learning-resources-registration';\n  const $registrationModalSubmitBtn = $(formSubmitBtn);\n  const $termsCheckbox = $(termsCheckbox);\n  const modalRegistrationFormEmailInput = '[data-selector=\"modal-registration-form-email-input\"]';\n  const websiteSignUpPswInput = '[data-selector=\"modal-registration-form-password-input\"]';\n  const loginSpecialInput = '[data-selector=\"login-special-input\"]';\n  const modalRegistrationForm = '[data-selector=\"modal-registration-form\"]';\n\n  let googleCaptchaToken = null;\n\n  const onRecaptchaExpire = () => {\n    googleCaptchaToken = null;\n  };\n\n  const getPayload = () => {\n    const email = $(modalRegistrationFormEmailInput).val();\n    const password = $(websiteSignUpPswInput).val();\n    const placement = storage.get(LOCAL_STORAGE_KEYS.PLACEMENT, true);\n\n    // TODO add captcha data to payload\n\n    const payload = {\n      account_type: ACCOUNT_TYPES.PARENT,\n      email: email,\n      password: password,\n      source: getUserSources('source'),\n      medium: getUserSources('medium'),\n      campaign: getUserSources('campaign'),\n      placement: placement ? placement : ''\n    };\n\n    const websiteAccountType = storage.get(LOCAL_STORAGE_KEYS.WEBSITE_ACCOUNT_TYPE, true);\n    if (websiteAccountType) payload.website_account_type = websiteAccountType;\n\n    return payload;\n  };\n\n  const loadRecaptcha = (isChecked) => {\n    initGoogleRecaptcha((token) => {\n      $formError.hide();\n      ga('send', 'event', 'Registration_flow', 'Capcha', 'step3');\n      googleCaptchaToken = token;\n      if (isChecked) {\n        $(formSubmitBtn).attr('disabled', !isChecked);\n      }\n    }, onRecaptchaExpire);\n  };\n\n  $(document)\n    // submit website sign up modal\n    .on('click', formSubmitBtn, function (e) {\n      e.preventDefault();\n\n      const $regForm = $(e.target).closest(learningResourcesModal).find(modalRegistrationForm);\n      const hiddenInputVal = $regForm.find(loginSpecialInput).val();\n      if (hiddenInputVal) return;\n\n      if (!isWebGamesPage() && !googleCaptchaToken) {\n        $formError.html('Please complete the CAPTCHA');\n        $formError.show();\n        return;\n      }\n\n      const parsleyForm = $regForm.parsley();\n\n      if (!parsleyForm.isValid() || !$termsCheckbox.is(':checked')) {\n        parsleyForm.validate();\n        return;\n      }\n\n      ga('send', 'event', 'Registration', 'EmailWorksheets', 'Parent');\n      toggleButtonLoading($registrationModalSubmitBtn, true);\n\n      $.ajax({\n        url: ENDPOINT.USER_PROFILE,\n        contentType: 'application/json',\n        type: 'POST',\n        data: JSON.stringify(getPayload())\n      }).then(() => {\n          if (isWebGamesPage()) {\n            // only for web games page\n            storage.set(LOCAL_STORAGE_KEYS.SHOW_WEB_GAMES_SUBSCRIPTION_MODAL, true);\n          } else {\n            const websitePlanSlug = $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-website-plans-slug');\n            const promoPlanSlug = $(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-promo-plans-slug');\n            const isEbloxAdded = !!$(MODALS.WEBSITE_SIGN_UP_MODAL).attr('data-website-plans-eblox');\n\n            if (promoPlanSlug && promoPlanSlug.length) {\n              storage.set(LOCAL_STORAGE_KEYS.SHOW_PROMO_PLANS_MODAL_PURCHASE, true);\n              storage.set(LOCAL_STORAGE_KEYS.WEBSITE_PLANS_MODAL_EBLOX_ADDED, isEbloxAdded);\n            } else if (websitePlanSlug && websitePlanSlug.length) {\n              storage.set(LOCAL_STORAGE_KEYS.SHOW_WEBSITE_PLANS_MODAL_PURCHASE, true);\n              storage.set(LOCAL_STORAGE_KEYS.WEBSITE_PLANS_MODAL_PLAN_SLUG, websitePlanSlug);\n            } else {\n              storage.set(LOCAL_STORAGE_KEYS.CHECK_AVAILABILITY_OF_PDF, true);\n            }\n          }\n\n          $(MODALS.WEBSITE_SIGN_UP_MODAL).modal('hide');\n          // we need to reload the page to show correct user interface (user is logged in)\n          document.location.reload(true);\n        }, (errorResponse) => {\n          toggleButtonLoading($registrationModalSubmitBtn, false);\n          const error = JSON.parse(errorResponse.responseText);\n          $formError.html(error.error);\n          $formError.show();\n        });\n    })\n    .on('change', termsCheckbox, function () {\n      const isChecked = $(this).is(':checked');\n\n      if (isWebGamesPage()) {\n        $(formSubmitBtn).attr('disabled', !isChecked);\n      } else {\n        if (googleCaptchaToken) {$(formSubmitBtn).attr('disabled', !isChecked);}\n        loadRecaptcha(isChecked);\n      }\n    });\n});\n","import {\n  CURRENCY,\n  CUSTOM_MESSAGE,\n  ENDPOINT,\n  GET_PARAMS,\n  URLS,\n  EBLOX_COUPONS,\n  ACCOUNT_TYPES,\n  DROPIN_SCRIPT_URL,\n  SUBSCRIPTION_PERIOD_MAPPING,\n  SUBSCRIPTION_PERIODS,\n  LOCAL_STORAGE_KEYS,\n} from '../config';\nimport {\n  toggleButtonLoading,\n  getError,\n  braintreeDropinConfig,\n  threeDSecureConfig,\n  getUrlParam,\n  capitalize,\n  scrollToHashedElement,\n  isFormValid,\n  isThreeDSecureCanceled,\n  storage,\n  toggleStepProgressBar,\n} from '../utils';\nimport {\n  doCheckIsCouponDistributorCode,\n  toggleApplyCouponBtn,\n  toggleCouponBlock,\n  getSelectedOfferDetails,\n  getCurrencyPrice,\n  getTotalPricesInCents,\n  handleDropinToken,\n  setCheckoutBtnTitle,\n  getShippingPriceInCents,\n  defineTrialMessagePlural,\n  setDefaultOfferSubmitText\n} from './subscription.utils';\n\n\n$(document).ready(() => {\n  const $subscriptionPlans = $('[data-selector=\"subscription-plans\"]');\n  if (!$subscriptionPlans.length) return;\n\n  // sign up\n  const $signUpSection =  $('[data-selector=\"sign-up-parent\"]');\n  const $signUpBtn =  $('[data-selector=\"sign-up-parent-btn\"]');\n  const signUpForm =  '[data-selector=\"sign-up-parent-form\"]';\n  const $signUpEmail =  $('[data-selector=\"sign-up-parent-email-input\"]');\n  const $signUpPassword =  $('[data-selector=\"sign-up-parent-password-input\"]');\n  const $signUpError =  $('[data-selector=\"sign-up-parent-error\"]');\n  const policyCheckbox =  '[data-selector=\"sign-up-parent-policy-checkbox\"]';\n  const $mailingCheckbox =  $('[data-selector=\"sign-up-parent-mailing-checkbox\"]');\n\n  const subscriptionPlansHash = '#subscription-plans';\n  const braintreeDropin = '#subscription-plans-dropin-container';\n  const hiddenInputSelect = '[data-selector=\"buy-parent-subscription-special-input\"]';\n\n  const couponBlockParams = {\n    activeClass: '_active',\n    emptyCouponClass: '_empty',\n    showCouponText: 'Enter coupon code',\n    hideCouponText: 'Hide coupon code'\n  };\n\n  // page title\n  const $pageTitle = $('[data-selector=\"subscription-plans-main-title\"]');\n  const firstStepMainTitle = $pageTitle.html();\n  const secondStepNoTrialTitle = 'Start learning now!';\n\n  const $appInfoSection = $('[data-selector=\"app-info-section\"]');\n  const $ebloxInfoSection = $('[data-selector=\"eblox-info-section\"]');\n  const $reviewsSection = $('[data-selector=\"subscription-plans-reviews-section\"]');\n  const $subscriptionError = $('[data-selector=\"subscription-error\"]');\n  const $buttonsBlockWrapper = $('[data-selector=\"buttons-block-wrapper\"]');\n  const $submitPaymentBtn = $('[data-selector=\"submit-payment-btn\"]');\n\n  const firstStepClassName = '_first-section';\n\n  // plan attributes\n  const planAttr = {\n    isTrialRadioEnabled: 'data-is-trial-radio-enabled',\n    slug: 'data-slug',\n    trialDuration: 'data-trial-duration',\n    offerTitle: 'data-offer-title',\n    offerPeriod: 'data-offer-period',\n    price: 'data-price',\n    backUrl: 'data-offer-back-url',\n    offerPeriodDisplay: 'data-offer-period-display',\n    submitText: 'data-offer-submit',\n    isCouponEnabled: 'data-is-coupon-enabled',\n    isOfferDefault: 'data-is-offer-default',\n    showOnboardingSteps: 'data-show-onboarding-steps'\n  };\n  const checkoutTextAttr = {\n    trial: 'data-trial-text',\n    noTrial: 'data-no-trial-text'\n  };\n\n  // selected plan block (second step)\n  const planInput = '[data-selector=\"subscription-plan-input\"]';\n  const selectedPlanInput = `${planInput}:checked`;\n  const secondStepClassName = '_second-step';\n  const prevSectionButton = '[data-selector=\"back-to-prev-section-btn\"]';\n  const $prevSectionButton = $(prevSectionButton);\n  const goToSignUpStepBtn = '[data-selector=\"go-to-sign-up-btn\"]';\n  const $goToSignUpStepBtn = $(goToSignUpStepBtn);\n  const $stepProgressBar = $('[data-selector=\"step-progress-bar\"]');\n  const planInputWrapperSelector = '[data-selector=\"subscription-plan-input-wrapper\"]';\n\n  // subscription details elements\n  const $planPeriod = $('[data-selector=\"plan-period-value\"]');\n  const $planFullPrice = $('[data-selector=\"plan-full-price-value\"]');\n  const $planTrialPeriod = $('[data-selector=\"plan-trial-period-value\"]');\n  const $planDiscountRow = $('[data-selector=\"plan-discount-row\"]');\n  const $planTrialRow = $('[data-selector=\"plan-trial-row\"]');\n  const $planDiscount = $('[data-selector=\"plan-discount-value\"]');\n  const $planTotalPrice = $('[data-selector=\"plan-total-price-value\"]');\n  const $planRenewCondition = $('[data-selector=\"plan-renew-condition\"]');\n  const $trialText = $('[data-selector=\"trial-text\"]');\n\n  let removedSubscriptions = [];\n\n  //e-blox addon\n  const $addonOnPaymentStep = $('[data-selector=\"addon-on-payment-step\"]');\n\n  // E-Blox add-on UI is hidden; keep purchase path disabled (same as other checkouts).\n  // To restore the E-Blox checkout flow:\n  // 1) remove display:none rules for __addon / subscription-plans-eblox-row /\n  //    subscription-plans-shipping-row in subscription-plans-sample.scss;\n  // 2) change this back to `let isEbloxAdded = false` and set it from the checkboxes\n  //    (first-step + payment-step: subscription-plans-eblox-addon-checkbox /\n  //    eblox-addon-checkbox-payment-step);\n  // 3) restore the payment-step checkbox `change` handler and\n  //    addEbloxDataUItoPaymentStep() when checked.\n  // See also docs/eblox-addon-ui-hidden.md.\n  const isEbloxAdded = false;\n  const ebloxAddonPaymentStepCheckbox = '[data-selector=\"eblox-addon-checkbox-payment-step\"]';\n\n  const $ebloxRow = $('[data-selector=\"subscription-plans-eblox-row\"]');\n  const $ebloxPrice = $('[data-selector=\"eblox-info-value\"]');\n  const $shippingRow = $('[data-selector=\"subscription-plans-shipping-row\"]');\n  const $shippingPrice = $('[data-selector=\"shipping-info-value\"]');\n\n  const $shippingForm = $('[data-selector=\"shipping-addon-form\"]');\n  const $shippingFormItem = $('[data-selector=\"shipping-addon-form-item\"]');\n  const shippingCountriesSelect = '[data-selector=\"shipping-countries-select\"]';\n  const ebloxTooltipLink = '[data-selector=\"subscription-plans-tooltip-link\"]';\n  const ebloxInfoSectionHash = '#eblox-info-section';\n\n  // coupon\n  const $couponInputSection = $('[data-selector=\"coupon-input-section\"]');\n  const $couponBlock = $('[data-selector=\"coupon-block\"]');\n  let activeCoupon = null;\n  let amountOff = 0;\n  const toggleCouponBlockBtn = '[data-selector=\"toggle-coupon-block-btn\"]';\n  const $toggleCouponBlockBtn = $(toggleCouponBlockBtn);\n  const couponForm = '[data-selector=\"coupon-form\"]';\n  const $couponForm = $(couponForm);\n  const $couponError = $('[data-selector=\"coupon-error\"]');\n  const couponInput = '[data-selector=\"enter-coupon-input\"]';\n  const $couponInput = $couponForm.find(couponInput);\n  const applyCoupon = '[data-selector=\"apply-coupon-btn\"]';\n  const $applyCoupon = $couponForm.find(applyCoupon);\n  const removeCoupon = '[data-selector=\"remove-coupon-btn\"]';\n  const $removeCoupon = $couponForm.find(removeCoupon);\n  const $couponMessage = $couponForm.find('[data-selector=\"coupon-message\"]');\n  const $licenseActivationCodeModal = $('#licenseActivationCode');\n  let isSpecialCouponApplied = false;\n  let specialCouponTrialDuration = null;\n\n  const $trialNoteText = $('[data-selector=\"subscription-trial-text\"]');\n\n  const $firstSection = $('#1-step-sample');\n  const $signUpStepSection = $('#sign-up-step-sample');\n  const $secondStepSection = $('#purchase-step-sample');\n  const section = {\n    first: 0,\n    signUp: 'signUp',\n    second: 1\n  };\n\n  const isTrialActiveRadio = '[data-selector=\"is-trial-active-radio\"]';\n  const $isTrialActiveRadio = $(isTrialActiveRadio);\n  const $isTrialActiveRadioLabel = $('[data-selector=\"is-trial-active-radio-label\"]');\n  const $isTrialActiveRadioWrapper = $('[data-selector=\"is-trial-active-radio-wrapper\"]');\n\n  const $noteForm = $('[data-selector=\"subscription-plans-note-form\"]');\n  const $noteFormInput = $('[data-selector=\"subscription-plans-note-form-input\"]');\n  let parsleyNoteForm;\n  let isEbloxNoteInputSeen = false;\n\n  const $hasCommentsCheck = $('[data-selector=\"has-comments-check\"]');\n  const $subscriptionReviews = $('[data-selector=\"subscription-reviews\"]');\n  const $reviewsCarousel = $('[data-selector=\"subscription-plans-reviews-slider\"]');\n  const $reviewsSliderLoader = $('[data-selector=\"subscription-plans-sample-reviews-loader\"]');\n\n  let dropinInstance;\n\n  const doCheckForPreselectedPlan = () => {\n    if ($(selectedPlanInput).length) return;\n    $(planInput).first().prop('checked', true);\n  };\n\n  const setStyleSelectedPlan = () => {\n    $(planInput).each((index, plan) => {\n      const $planInputWrapper = $(plan).closest(planInputWrapperSelector);\n      if ($planInputWrapper.hasClass('_checked')) {\n        $planInputWrapper.removeClass('_checked');\n      }\n    });\n\n    $(selectedPlanInput).closest(planInputWrapperSelector).addClass('_checked');\n  };\n\n  const initFirstSectionUI = () => {\n    toggleIsTrialSelectRadio();\n    setTrialDurationToTrialRadioBtnLabel();\n    setDefaultOfferSubmitText($goToSignUpStepBtn, $(selectedPlanInput).attr(planAttr.submitText));\n    toggleTrialNoteText();\n    initTooltipLinkVisibility();\n    applyProvidedCoupon();\n    toggleIsCouponInputSection();\n    toggleApplyCouponBtn($couponInput, $applyCoupon, couponBlockParams);\n    setStyleSelectedPlan();\n    initReviewSlider().then($reviewsCarousel.slick('refresh'));\n  };\n\n  const toggleIsCouponInputSection = () => {\n    const isCouponInputAvailable = $(selectedPlanInput).attr(planAttr.isCouponEnabled) === 'True';\n\n    isCouponInputAvailable ? $couponInputSection.show() : $couponInputSection.hide();\n  };\n\n  const triggerGAEventOnCheckout = () => {\n    if (isTrialActive()) {\n      ga('send', 'event', 'Trial', 'Started', 'Parent');\n      if (isEbloxAdded) ga('send', 'event', 'Eblox', 'Started', 'Parent');\n      return;\n    }\n\n    ga('send', 'event', 'Subscription', 'Started', 'Parent');\n  };\n\n  const triggerGAEventOnGoToPayment = (offerPeriod) => {\n    if (typeof offerPeriod === 'string' && offerPeriod.length) {\n      const formattedOfferPeriod = offerPeriod.replace(/^./, offerPeriod[0].toUpperCase());\n      ga('send', 'event', 'Subscription', 'Initiated', formattedOfferPeriod);\n    }\n  };\n\n  const triggerAnalyticsOnCheckout = (response, slug, callback = () => {}) => {\n    callback();\n  };\n\n  const setTrialDurationToTrialRadioBtnLabel = () => {\n    const trialDuration = $(selectedPlanInput).attr(planAttr.trialDuration);\n    const trialMessagePlural = defineTrialMessagePlural(trialDuration, 'day');\n    const labelText = `Enable ${trialMessagePlural} free trial`;\n    $isTrialActiveRadioLabel.text(labelText);\n\n    $trialText.html(getTrialDurationText());\n  };\n\n  const isTrialActive = () => {\n    if (!window.ableToGetTrial) return false;\n\n    if (isSpecialCouponApplied) return true;\n\n    const trialDuration = $(selectedPlanInput).attr(planAttr.trialDuration);\n    const isTrialDisabled = parseInt(trialDuration) === 0;\n    if (isTrialDisabled) return false;\n\n    if (activeCoupon) return false;\n\n    if ($isTrialActiveRadio.length) {\n      const isTrialEnabled = $isTrialActiveRadio.is(':checked');\n      const isTrialRadioEnabled = $(selectedPlanInput).attr(planAttr.isTrialRadioEnabled);\n      if (isTrialRadioEnabled === 'False' && !isTrialEnabled) return true;\n\n      return isTrialEnabled;\n    }\n\n    return true;\n  };\n\n  const getPurchaseStepTitle = () => {\n    if (isTrialActive()) {\n      let trialDuration = $(selectedPlanInput).attr(planAttr.trialDuration);\n\n      if (isSpecialCouponApplied && specialCouponTrialDuration) {\n        trialDuration = specialCouponTrialDuration;\n      }\n\n      if (trialDuration === '0') {\n        return secondStepNoTrialTitle;\n      }\n\n      const trialMessagePlural = defineTrialMessagePlural(trialDuration, 'day');\n      const secondStepTrialTitle = `Start your ${trialMessagePlural} Free Trial Now!`;\n      return secondStepTrialTitle;\n    }\n\n    return secondStepNoTrialTitle;\n  };\n\n  const toggleTrialNoteText = () => {\n    if (isTrialActive()) {\n      $trialNoteText.show();\n      return;\n    }\n\n    $trialNoteText.hide();\n  };\n\n  const getTrialDurationText = () => {\n    const noTrialText = 'Start learning!';\n\n    if (isTrialActive()) {\n      let trialDuration = $(selectedPlanInput).attr(planAttr.trialDuration);\n\n      if (isSpecialCouponApplied && specialCouponTrialDuration && checkCouponApplicability()) {\n        trialDuration = specialCouponTrialDuration;\n      }\n\n      if (parseInt(trialDuration) === 0 ) {\n        return noTrialText;\n      }\n\n      const trialMessagePlural = defineTrialMessagePlural(trialDuration, 'day');\n      const trialDurationText = `${trialMessagePlural} free trial!`;\n      return trialDurationText;\n    }\n\n    return noTrialText;\n  };\n\n  const checkCouponApplicability = () => {\n    const planSlug = $(selectedPlanInput).attr(planAttr.slug);\n    const itemIndex = removedSubscriptions.indexOf(planSlug);\n    const isInvalid = removedSubscriptions[itemIndex];\n\n    if (isInvalid) {\n      $goToSignUpStepBtn.prop('disabled', true);\n      $couponError.show();\n    } else {\n      $goToSignUpStepBtn.prop('disabled', false);\n      $couponError.hide();\n    }\n\n    return !isInvalid;\n  };\n\n  const setSelectedPlanDataToUI = (\n    planPeriod,\n    planFullPrice,\n    planTrialPeriod,\n    planFormattedNewPrice,\n    planPeriodDisplay\n  ) => {\n    $planPeriod.text(capitalize(planPeriodDisplay));\n    $planFullPrice.text(`${CURRENCY}${planFullPrice}`);\n\n    if (activeCoupon && amountOff > 0) {\n      $planDiscount.text(`${CURRENCY}${amountOff}`);\n      $planDiscountRow.show();\n    }\n\n    if (isTrialActive()) {\n      $planTrialPeriod.text(`${planTrialPeriod} days`);\n      $planTrialRow.show();\n      $planTotalPrice.text(`${CURRENCY}0.00`);\n\n      if (planPeriod !== SUBSCRIPTION_PERIODS.LIFETIME) {\n        const text = SUBSCRIPTION_PERIOD_MAPPING[planPeriod](planFullPrice);\n        $planRenewCondition.html(text);\n      }\n\n      $planRenewCondition.show();\n    } else {\n      $planTotalPrice.text(`${CURRENCY}${planFormattedNewPrice}`);\n    }\n\n    removeEbloxDataUIFromPaymentStep();\n  };\n\n  const getFirstStepMainTitle = () => {\n    $(planInput).each((index, plan) => {\n      if ($(plan).attr(planAttr.isOfferDefault) === 'True') {\n        return $(plan).attr(planAttr.offerTitle);\n      }\n    });\n\n    return $(planInput).first().attr(planAttr.offerTitle);\n  };\n\n  const setMainTitle = (sectionId) => {\n    if (sectionId === undefined) return null;\n\n    $pageTitle.show();\n\n    switch (sectionId) {\n      case section.first:\n        $pageTitle.html(getFirstStepMainTitle() || firstStepMainTitle);\n        break;\n      case section.second:\n        $pageTitle.html(getPurchaseStepTitle());\n        break;\n      case section.signUp:\n        $pageTitle.hide();\n        break;\n    }\n  };\n\n  const prepareFirstSectionUI = () => {\n    $hasCommentsCheck.addClass('_has-comments');\n    $subscriptionReviews.show();\n    $subscriptionPlans.addClass(firstStepClassName);\n    $secondStepSection.hide();\n    $firstSection.show();\n    $subscriptionPlans.removeClass(secondStepClassName);\n    $appInfoSection.show();\n    $reviewsSection.show();\n    $ebloxInfoSection.show();\n    $subscriptionError.hide();\n    $(braintreeDropin).text('');\n    $planRenewCondition.text('');\n    initReviewSlider().then($reviewsCarousel.slick('refresh'));\n  };\n\n  const selectSection = (sectionId) => {\n    if (sectionId === section.first) {\n      prepareFirstSectionUI();\n      // Remove an event listener set by braintree-creating function so as\n      // to prevent creating multiple event handlers in case of function call repeat\n      $submitPaymentBtn.off('click');\n      return;\n    }\n\n    if (sectionId === section.signUp) {\n      toggleButtonLoading($prevSectionButton, true);\n\n      $hasCommentsCheck.removeClass('_has-comments');\n      $subscriptionReviews.hide();\n\n      $subscriptionPlans.removeClass(firstStepClassName);\n      $subscriptionPlans.addClass(secondStepClassName);\n\n      $firstSection.hide();\n      $appInfoSection.hide();\n      $ebloxInfoSection.hide();\n      $reviewsSection.hide();\n      $planDiscountRow.hide();\n      $planTrialRow.hide();\n      $planRenewCondition.hide();\n\n      $signUpStepSection.show();\n\n      handleProgressBar();\n    }\n\n    if (sectionId === section.second) {\n      toggleButtonLoading($prevSectionButton, true);\n\n      const isStepsShownStr = $(selectedPlanInput).attr(planAttr.showOnboardingSteps);\n      if (isStepsShownStr) $stepProgressBar.show();\n\n      $hasCommentsCheck.removeClass('_has-comments');\n      $subscriptionReviews.hide();\n      $subscriptionPlans.removeClass(firstStepClassName);\n      $subscriptionPlans.addClass(secondStepClassName);\n      $firstSection.hide();\n      $appInfoSection.hide();\n      $ebloxInfoSection.hide();\n      $reviewsSection.hide();\n      $planDiscountRow.hide();\n      $planTrialRow.hide();\n      $planRenewCondition.hide();\n      $signUpSection.hide();\n      $secondStepSection.show();\n\n      setCheckoutBtnTitle($submitPaymentBtn, isTrialActive(), checkoutTextAttr);\n    }\n  };\n\n  /**\n   * returns is trial status available to be changed by user\n   *\n   * @returns {boolean}\n   */\n  const getTrialSelectRadioSeenStatus = () => {\n    if (!window.ableToGetTrial) {\n      return false;\n    }\n\n    const $selectedPlanInput = $(selectedPlanInput);\n    const isTrialRadioEnabled = $selectedPlanInput.attr(planAttr.isTrialRadioEnabled);\n    const trialDuration = parseInt($selectedPlanInput.attr(planAttr.trialDuration));\n\n    if (isTrialRadioEnabled === 'False' || trialDuration === 0) {\n      return false;\n    }\n\n    return true;\n  };\n\n  /**\n   * show/hide toggle trial radio btn block\n   */\n  const toggleIsTrialSelectRadio = () => {\n    const isTrialAvailable = getTrialSelectRadioSeenStatus();\n    const buttonsBlockClass = '_no-trial-radio';\n\n    if (!isSpecialCouponApplied && isTrialAvailable) {\n      $isTrialActiveRadioWrapper.show();\n      $buttonsBlockWrapper.removeClass(buttonsBlockClass);\n      return;\n    }\n\n    $isTrialActiveRadioWrapper.hide();\n    $buttonsBlockWrapper.addClass(buttonsBlockClass);\n  };\n\n  const disableTrialApplyRadioBtn = () => {\n    $isTrialActiveRadio.attr('checked', false);\n    $isTrialActiveRadio.prop('disabled', true);\n  };\n\n  const enableTrialApplyRadioBtn = () => {\n    $isTrialActiveRadio.attr('checked', true);\n    $isTrialActiveRadio.prop('disabled', false);\n  };\n\n  const initReviewSlider = () => {\n    if (!$reviewsCarousel.length) return;\n\n    return new Promise((resolve) => {\n      // callback for the first time Slick initializes\n      $reviewsCarousel.on('init', () => {\n        $reviewsSliderLoader.hide();\n        $reviewsCarousel.show();\n        resolve();\n      });\n\n      $reviewsCarousel.not('.slick-initialized').slick({\n        slidesToShow: 1,\n        slidesToScroll: 1,\n        autoplay: false,\n        swipeToSlide: true,\n        adaptiveHeight: true,\n        responsive: [{\n          breakpoint: 992,\n          settings: {slidesToShow: 2}\n        }, {\n          breakpoint: 620,\n          settings: {slidesToShow: 1}\n        }]\n      });\n    });\n  };\n\n  const initTooltipLinkVisibility = () => {\n    if (!$ebloxInfoSection.length) $(ebloxTooltipLink).hide();\n  };\n\n  const onPageLoad = () => {\n    doCheckForPreselectedPlan();\n    initFirstSectionUI();\n  };\n\n  const applyProvidedCoupon = () => {\n    const providedCoupon = getUrlParam(GET_PARAMS.COUPON);\n    if (!providedCoupon) return;\n    $couponInput.val(providedCoupon);\n    $(toggleCouponBlockBtn).click();\n  };\n\n  const getEbloxPriceInCents = () => {\n    const result = parseInt(ebloxAddonPrice);\n    return result;\n  };\n\n  const addEbloxDataUItoPaymentStep = () => {\n    // set eblox price in UI\n    const ebloxPrice = (getEbloxPriceInCents() / 100).toFixed(2).toString();\n    $ebloxPrice.html(`${CURRENCY}${ebloxPrice}`);\n\n    updateUIbyShippingPrice();\n\n    // toggle eblox & shipping prices\n    $shippingForm.show();\n    $ebloxRow.show();\n    $shippingRow.show();\n  };\n\n  const removeEbloxDataUIFromPaymentStep = () => {\n    $shippingForm.hide();\n    $shippingRow.hide();\n    $shippingPrice.html('');\n    $ebloxRow.hide();\n    $ebloxPrice.html('');\n    updateUIbyShippingPrice();\n  };\n\n  const updateUIbyShippingPrice = () => {\n    const shippingPriceInCents = getShippingPriceInCents(shippingCountriesSelect);\n    const formattedShippingPrice = (shippingPriceInCents / 100).toFixed(2).toString();\n    $shippingPrice.html(`${CURRENCY}${formattedShippingPrice}`);\n  };\n\n  const getTotalPrices = () => {\n    const isTrialEnabled = isTrialActive();\n    const planFullPriceInCents = $(selectedPlanInput).attr(planAttr.price);\n    const totalPrices = getTotalPricesInCents(\n      planFullPriceInCents,\n      isTrialEnabled,\n      isEbloxAdded,\n      activeCoupon,\n      amountOff,\n      shippingCountriesSelect\n    );\n\n    return totalPrices;\n  };\n\n  const clearComponentVariables = () => {\n    activeCoupon = null;\n    amountOff = 0;\n    isSpecialCouponApplied = false;\n    specialCouponTrialDuration = null;\n    removedSubscriptions = [];\n  };\n\n  const setTotalPriceToUI = (totalPriceInCents) => {\n    const currencyPrice = getCurrencyPrice(totalPriceInCents);\n    $planTotalPrice.html(currencyPrice);\n  };\n\n  const getPurchaseRequestData = (paymentMethodNonce, slug) => {\n    const result = {\n      payment_method_nonce: paymentMethodNonce,\n      plan_slug: slug,\n      source: 'main-flow-offer',\n      discount_id: activeCoupon,\n      trial_enabled: isTrialActive(),\n      note: $noteFormInput.val() ? $noteFormInput.val() : ''\n    };\n\n    if (isEbloxAdded) {\n      // collect eblox addon & shipping data\n      const formFields = {};\n      const shippingFormDataArray = $shippingFormItem.serializeArray();\n\n      shippingFormDataArray.forEach((item) => {\n        formFields[item.name] = item.value;\n      });\n\n      result.shipping_address = formFields;\n      result.addons = [{addon_id: ebloxAddonId}, {addon_id: shippingAddonId}];\n    }\n\n    return result;\n  };\n\n  const dropinTokenCallback = () => {\n    if (!window.braintree) {\n      goToPaymentErrorHandler();\n      return;\n    }\n\n    toggleButtonLoading($goToSignUpStepBtn, false);\n    preparePurchaseStep();\n  };\n\n  const goToPaymentErrorHandler = (err) => {\n    toastr.error(getError(err), '', {timeOut: 3000});\n    toggleButtonLoading($goToSignUpStepBtn, false);\n  };\n\n  const preparePurchaseStep = () => {\n    if (isEbloxNoteInputSeen) {\n      parsleyNoteForm = $noteForm.parsley();\n      parsleyNoteForm.validate();\n      const isNoteFormValid = parsleyNoteForm.isValid();\n      if (!isNoteFormValid) return;\n    }\n\n    scrollToHashedElement(subscriptionPlansHash, {scrollTimeout: 0});\n\n    const offer = $(selectedPlanInput);\n    const {\n      planPeriod,\n      planFullPrice,\n      planFormattedNewPrice,\n      planSlug,\n      planBackUrl,\n      planPeriodDisplay\n    } = getSelectedOfferDetails(offer, amountOff, planAttr);\n    const planTrialPeriod = (isSpecialCouponApplied && specialCouponTrialDuration)\n        ? specialCouponTrialDuration\n        : offer.attr(planAttr.trialDuration);\n\n    setSelectedPlanDataToUI(\n      planPeriod,\n      planFullPrice,\n      planTrialPeriod,\n      planFormattedNewPrice,\n      planPeriodDisplay\n    );\n\n    const { totalPriceInCents, priceFor3DSecure } = getTotalPrices();\n\n    setTotalPriceToUI(totalPriceInCents);\n\n    triggerGAEventOnGoToPayment(planPeriod);\n\n    $.getScript(\n        DROPIN_SCRIPT_URL\n      ).done(() => {\n        toggleButtonLoading($signUpBtn, false);\n\n        setMainTitle(section.second);\n        selectSection(section.second);\n\n        handleDropinToken(() => {\n          if (!window.braintree) {\n            goToPaymentErrorHandler();\n          } else {\n            initBraintreeDropin(totalPriceInCents, priceFor3DSecure, planSlug, planBackUrl);\n          }\n        } , goToPaymentErrorHandler);\n      });\n  };\n\n  const prepareSignUpStep = () => {\n    if (isEbloxNoteInputSeen) {\n      parsleyNoteForm = $noteForm.parsley();\n      parsleyNoteForm.validate();\n      const isNoteFormValid = parsleyNoteForm.isValid();\n      if (!isNoteFormValid) return;\n    }\n\n    $firstSection.hide();\n    $signUpStepSection.show();\n\n    scrollToHashedElement(subscriptionPlansHash, {scrollTimeout: 0});\n    $submitPaymentBtn.hide();\n\n    setMainTitle(section.signUp);\n    selectSection(section.signUp);\n  };\n\n  const handleProgressBar = () => {\n    const isStepsShownStr = $(selectedPlanInput).attr(planAttr.showOnboardingSteps);\n    storage.set(LOCAL_STORAGE_KEYS.IS_SHOW_STEP_PROGRESS_BAR, isStepsShownStr);\n\n    toggleStepProgressBar($stepProgressBar);\n  };\n\n  const initBraintreeDropin = (totalPriceInCents, priceFor3DSecure, slug, backUrl) => {\n    if (!isEbloxAdded) $addonOnPaymentStep.show();\n\n    if (braintree && $(braintreeDropin).length) {\n      const totalPriceInDollars = (totalPriceInCents / 100).toFixed(2);\n      const braintreeConf = braintreeDropinConfig(totalPriceInDollars, braintreeDropin);\n\n      braintree.dropin.create(braintreeConf,\n        function (createErr, instance) {\n          if (createErr) {\n            // An error in the create call is likely due to\n            // incorrect configuration values or network issues.\n            // An appropriate error will be shown in the UI.\n\n            $subscriptionError.html(\n              `${createErr.message}\n               <br>${CUSTOM_MESSAGE.BRAINTREE_CREATE_ERROR}`\n            );\n            $subscriptionError.show();\n            toggleButtonLoading($prevSectionButton, false);\n            // eslint-disable-next-line no-console\n            console.error('dropin create error: ', createErr);\n            return;\n          }\n\n          dropinInstance = instance;\n\n          if (instance.isPaymentMethodRequestable()) {\n            // This will be true if you generated the client token\n            // with a customer ID and there is a saved payment method\n            // available to tokenize with that customer.\n            $submitPaymentBtn.show();\n          }\n\n          instance.on('paymentMethodRequestable', () => {\n            $submitPaymentBtn.show();\n            $subscriptionError.hide();\n          });\n\n          instance.on('noPaymentMethodRequestable', () => {\n            $submitPaymentBtn.hide();\n            $subscriptionError.hide();\n          });\n\n          instance.on('paymentOptionSelected', () => {\n            $subscriptionError.hide();\n            if (instance.isPaymentMethodRequestable()) {\n              $submitPaymentBtn.show();\n              return;\n            }\n            $submitPaymentBtn.hide();\n          });\n\n          toggleButtonLoading($prevSectionButton, false);\n          toggleButtonLoading($submitPaymentBtn, false);\n\n          $submitPaymentBtn.click(() => {\n            // To prevent bot spamming we use solution from\n            // https://www.thryv.com/blog/honeypot-technique/\n            const $hiddenInput = $(hiddenInputSelect);\n            const hiddenInputVal = $hiddenInput.val();\n            if (hiddenInputVal) return;\n\n\n            if (isEbloxAdded) {\n              const shippingFormItemParsley = $shippingFormItem.parsley();\n              if (!shippingFormItemParsley.isValid()) {\n                shippingFormItemParsley.validate();\n                return;\n              }\n            }\n\n            $subscriptionError.hide();\n            $prevSectionButton.hide();\n            toggleButtonLoading($submitPaymentBtn, true);\n\n            const priceFor3DSecureStr = (priceFor3DSecure / 100).toFixed(2).toString();\n            const threeDSecureConf = threeDSecureConfig(priceFor3DSecureStr);\n\n            instance.requestPaymentMethod({\n              threeDSecure: threeDSecureConf\n            }, function (requestPaymentMethodErr, payload) {\n              if (requestPaymentMethodErr) {\n                // eslint-disable-next-line no-console\n                console.error('requestPaymentMethodErr: ', requestPaymentMethodErr);\n\n                $subscriptionError.text(requestPaymentMethodErr.message);\n                $subscriptionError.show();\n                $prevSectionButton.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                return;\n              }\n\n              if (isThreeDSecureCanceled(payload)) {\n                instance.clearSelectedPaymentMethod();\n                $subscriptionError.text(CUSTOM_MESSAGE.THREE_D_SECURE_ABORT);\n                $subscriptionError.show();\n                toggleButtonLoading($submitPaymentBtn, false);\n                $prevSectionButton.show();\n                return;\n              }\n\n              const requestData = getPurchaseRequestData(payload.nonce, slug);\n              $.ajax({\n                url: ENDPOINT.BUY_SUBSCRIPTION,\n                type: 'POST',\n                contentType: 'application/json',\n                data: JSON.stringify(requestData)\n              })\n                .then((response) => {\n                  const callback = () => {\n                    if (window.ableToGetTrial && window.user.email) {\n                      window.location = `/${URLS.SIGN_UP_PARENT_COMPLETE}/`;\n                    } else {\n                      window.location = backUrl;\n                    }\n                  };\n\n                  triggerGAEventOnCheckout();\n                  triggerAnalyticsOnCheckout(response, slug, callback);\n                }, (errorResp) => {\n                  instance.clearSelectedPaymentMethod();\n                  $subscriptionError.text('');\n                  $subscriptionError.append(getError(errorResp));\n                  $subscriptionError.show();\n\n                  toggleButtonLoading($submitPaymentBtn, false);\n                });\n            });\n          });\n        });\n    }\n  };\n\n  const proceedPurchaseFlow = (e) => {\n    e.preventDefault();\n\n    toggleButtonLoading($goToSignUpStepBtn, true);\n\n    if (!window.isSignUpComplete) {\n      prepareSignUpStep();\n    } else {\n      $.getScript(\n        DROPIN_SCRIPT_URL\n      ).done(() => {\n        handleDropinToken(dropinTokenCallback, goToPaymentErrorHandler);\n      });\n    }\n  };\n\n  const getParentSignUpData = () => {\n    const email = $signUpEmail.val();\n    const password = $signUpPassword.val();\n    const isSubscribedToMailing = $mailingCheckbox.prop('checked');\n\n    const data = {\n      account_type: ACCOUNT_TYPES.PARENT,\n      email: email,\n      password: password,\n      subscribe_to_emails: isSubscribedToMailing,\n      // https://learnlikenastya.youtrack.cloud/agiles/124-13/current?issue=KA-233\n      // https://docs.google.com/document/d/1ymtrAsXwcKd7EI45E5Ct5XzGjXMoDleyH9XY4N_Nyv4/edit?tab=t.0\n      buy_subscription_flow: true,\n    };\n\n    return data;\n  };\n\n  // event listeners\n  $(document)\n    // sign up form submit\n    .on('submit', signUpForm, (e) => {\n      e.preventDefault();\n\n      // clear error\n      $signUpError.html();\n      $signUpError.hide();\n\n      // validate form\n      const signUpFormParsley = $(e.target).closest(signUpForm).parsley();\n      signUpFormParsley.validate();\n      if (!signUpFormParsley.isValid()) return;\n\n      toggleButtonLoading($signUpBtn, true);\n\n      // submit sign up request\n      $.ajax({\n        url: ENDPOINT.USER_PROFILE,\n        contentType: 'application/json',\n        type: 'POST',\n        data: JSON.stringify(getParentSignUpData())\n      }).then(() => {\n        preparePurchaseStep();\n      }, (error) => {\n        toggleButtonLoading($signUpBtn, false);\n        const errorText = getError(error);\n        $signUpError.html(errorText);\n        $signUpError.show();\n      });\n    })\n    .on('change', policyCheckbox, (e) => {\n      $signUpBtn.attr('disabled', !e.target.checked);\n    })\n    // on change country in shipping form\n    .on('change', shippingCountriesSelect, () => {\n      const {totalPriceInCents, priceFor3DSecure} = getTotalPrices();\n      const offer = $(selectedPlanInput);\n      const {\n        planSlug,\n        planBackUrl,\n      } = getSelectedOfferDetails(offer, amountOff, planAttr);\n\n      $submitPaymentBtn.off('click');\n\n      dropinInstance.teardown((teardownErr) => {\n        if (teardownErr) {\n          // eslint-disable-next-line no-console\n          console.error('dropin teardown error: ', teardownErr);\n        } else {\n          initBraintreeDropin(totalPriceInCents, priceFor3DSecure, planSlug, planBackUrl);\n        }\n      });\n\n      updateUIbyShippingPrice();\n      setTotalPriceToUI(totalPriceInCents);\n      scrollToHashedElement(subscriptionPlansHash, {scrollTimeout: 0});\n    })\n    .on('change', isTrialActiveRadio, () => {\n      toggleTrialNoteText();\n    })\n    // on change coupon input value\n    .on('input', couponInput, () => {\n      $couponInput.parsley().reset();\n      toggleApplyCouponBtn($couponInput, $applyCoupon, couponBlockParams);\n    })\n    // apply coupon\n    .on('click', applyCoupon, (e) => {\n      e.preventDefault();\n      // To prevent bot spamming we use solution from https://www.thryv.com/blog/honeypot-technique/\n      const hiddenInputVal = $('[data-selector=\"parent-coupon-check-special-input\"]').val();\n      if (hiddenInputVal) return;\n\n      if (!isFormValid($couponForm)) return;\n\n      const coupon = $couponInput.val().trim();\n      $couponError.hide();\n\n      if (coupon) {\n        toggleButtonLoading($applyCoupon, true);\n\n        // check is coupon a distributor code\n        doCheckIsCouponDistributorCode(coupon)\n          .then(() => {\n            toggleButtonLoading($applyCoupon, false);\n            $licenseActivationCodeModal.modal('show');\n          }, () => {\n            toggleButtonLoading($applyCoupon, false);\n          });\n\n        $.post(ENDPOINT.COUPON_VALIDATE, {\n          coupon: coupon\n        }).then((response) => {\n          toggleButtonLoading($applyCoupon, false);\n\n          activeCoupon = coupon;\n          amountOff = response.amount_off;\n          removedSubscriptions = response.exclude_subscriptions;\n          const isCouponValid = checkCouponApplicability();\n          $applyCoupon.prop('disabled', false);\n          $couponInput.parsley().removeError('coupon');\n          $couponInput.prop('disabled', true);\n          $applyCoupon.hide();\n          $removeCoupon.show();\n          $couponMessage.html(response.description);\n          $couponMessage.show();\n          $trialNoteText.hide();\n\n          if (isCouponValid) ga('send', 'event', 'Button', 'CouponApplied', 'Parent');\n          isSpecialCouponApplied = response.has_trial;\n          specialCouponTrialDuration = response.trial_duration;\n\n          toggleTrialNoteText();\n          $trialText.html(getTrialDurationText());\n\n          if (isCouponValid && EBLOX_COUPONS.indexOf(coupon.toLowerCase()) > -1) {\n            isEbloxNoteInputSeen = true;\n            $noteForm.show();\n          }\n\n          if (isSpecialCouponApplied) {\n            toggleIsTrialSelectRadio();\n            return;\n          }\n\n          disableTrialApplyRadioBtn();\n        }, (error) => {\n          toggleButtonLoading($applyCoupon, false);\n\n          activeCoupon = null;\n          $couponMessage.empty();\n          $couponMessage.hide();\n          const errorObject = JSON.parse(error.responseText);\n\n          if (errorObject.error) {\n            $couponInput.parsley().removeError('coupon');\n            $couponInput.parsley().addError('coupon', {\n              message: errorObject.error\n            });\n          }\n        });\n      }\n    })\n    // remove coupon applied to the selected plan\n    .on('click', removeCoupon, (e) => {\n      e.preventDefault();\n      enableTrialApplyRadioBtn();\n      toggleTrialNoteText();\n      toggleIsTrialSelectRadio();\n\n      clearComponentVariables();\n      $couponInput.parsley().reset();\n      $couponInput.prop('disabled', false);\n      $couponInput.val('');\n      $applyCoupon.show();\n      $removeCoupon.hide();\n      $couponMessage.empty();\n      $couponMessage.hide();\n      checkCouponApplicability();\n      $trialText.html(getTrialDurationText());\n\n      $noteFormInput.val('');\n      $noteForm.hide();\n      isEbloxNoteInputSeen = false;\n      if (parsleyNoteForm && parsleyNoteForm.reset) parsleyNoteForm.reset();\n    })\n    // show/hide apply coupon form\n    .on('click', toggleCouponBlockBtn, (e) => {\n      e.preventDefault();\n      toggleCouponBlock($couponBlock, $toggleCouponBlockBtn, couponBlockParams);\n    })\n    // click on tooltip link\n    .on('click', ebloxTooltipLink, () => {\n      scrollToHashedElement(ebloxInfoSectionHash, {scrollTimeout: 0});\n    })\n    // go to first step (select plan)\n    .on('click', prevSectionButton, () => {\n      scrollToHashedElement(subscriptionPlansHash, {scrollTimeout: 0});\n      selectSection(section.first);\n      setMainTitle(section.first);\n\n      $(ebloxAddonPaymentStepCheckbox).prop('checked', false);\n      $addonOnPaymentStep.hide() ;\n    })\n    // on click plan item\n    .on('click', planInput, (e) => {\n      proceedPurchaseFlow(e);\n    })\n    // go to second step (sign up)\n    .on('click', goToSignUpStepBtn, (e) => {\n      proceedPurchaseFlow(e);\n    });\n\n  onPageLoad();\n});\n","// vendor\nimport 'bootstrap';\nimport 'parsleyjs';\nimport 'slick-carousel/slick/slick';\nimport 'smartbanner.js/dist/smartbanner.min';\n\nimport toastr from 'toastr';\nwindow.toastr = toastr;\n\nimport 'select2/dist/js/select2';\n$.fn.select2.defaults.set('theme', 'bootstrap');\n\n// components\nimport './components/parsley-validators';\n// import './components/contact-us-form';\nimport './components/main';\nimport './components/menu';\n// import './components/homepage';\nimport './components/header';\nimport './components/main-banner';\nimport './components/main-banner-timer';\n// import './components/share-social';\n// import './components/related-worksheets';\n// import './components/related-games-animated';\nimport './components/my-messages';\n// import './components/shipping-addon-form';\n// import './components/monetization-popup';\n// import './components/website-limit-modal';\n// import './worksheet/worksheet-details';\n// import './worksheet/worksheet-rating';\n// import './worksheet/worksheet-answers';\nimport './components/website-account-type-modal';\nimport './components/website-quesstion-modal';\nimport './components/website-plans-modal';\nimport './components/website-cr-tg-plans-modal';\nimport './components/website-sign-up-modal';\nimport './components/skilled-worksheet-play';\n//\nimport './payment/subscription-plans-sample';\n"],"sourceRoot":""}